Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Замена значений в таблице. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Замена значений в таблице.
Stormy Дата: Вторник, 12.11.2024, 16:30 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 366
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Приветствую, уважаемые.
Возникла такая проблема, не знаю, в какую сторону "копать".
В книге два листа ааа и ххх
ххх это своего рода общая таблица в которой хранится расписка по заказам.
данные туда записываются из формы ввода, с этим проблем нет.
иногда возникает необходимость изменить расписку. То ли название пришлось менять, то ли кол-во строк увеличилось или уменьшилось.
Главный момент и состоит в том, что может увеличиться кол-во строк.
Мне нужно сосчитать кол-во строк в таблице ааа, скопировать данные которые там есть, перейти на лист ххх, найти по коду строку соответствующую ааа и заменить/вставить/удалить строки.
Если бы была одна строка, то с этим проблем не было, но вот когда несколько строк нужно вставить (расширить таблицу) то не понимаю как это сделать.
К сообщению приложен файл: basepl1.xlsx (14.4 Kb)


Место для рекламы.

Сообщение отредактировал Stormy - Среда, 13.11.2024, 11:46
 
Ответить
СообщениеПриветствую, уважаемые.
Возникла такая проблема, не знаю, в какую сторону "копать".
В книге два листа ааа и ххх
ххх это своего рода общая таблица в которой хранится расписка по заказам.
данные туда записываются из формы ввода, с этим проблем нет.
иногда возникает необходимость изменить расписку. То ли название пришлось менять, то ли кол-во строк увеличилось или уменьшилось.
Главный момент и состоит в том, что может увеличиться кол-во строк.
Мне нужно сосчитать кол-во строк в таблице ааа, скопировать данные которые там есть, перейти на лист ххх, найти по коду строку соответствующую ааа и заменить/вставить/удалить строки.
Если бы была одна строка, то с этим проблем не было, но вот когда несколько строк нужно вставить (расширить таблицу) то не понимаю как это сделать.

Автор - Stormy
Дата добавления - 12.11.2024 в 16:30
Hugo Дата: Вторник, 12.11.2024, 17:34 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3707
Репутация: 792 ±
Замечаний: 0% ±

365
Stormy, Добрый день
найти по коду строку

все дружно ищем этот код ))

Но когда нашли - не вижу проблем вставить все скопированные строки выше найденной.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеStormy, Добрый день
найти по коду строку

все дружно ищем этот код ))

Но когда нашли - не вижу проблем вставить все скопированные строки выше найденной.

Автор - Hugo
Дата добавления - 12.11.2024 в 17:34
Stormy Дата: Среда, 13.11.2024, 07:42 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 366
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
все дружно ищем этот код ))

Это все мысли виноваты, крутятся в разных направлениях ))
Поиск провожу по столбцу С , заголовок Номер.
Сейчас пришла мысль, что как вариант можно сделать так:
При первой записи блока строк в таблицу на листе ххх давать запас. Максимальное кол-во записываемых строк не может превышать количества 10.
То есть получится, что будет к примеру запись (с одинаковым номером) из 6 строк.
В след. раз при необходимости замены в из листа ааа, находить и менять эти строки.
Этим самым физическое удаление/добавление строк в ххх отпадает.
Осталось придумать как правильно все это организовать и насколько верно будет работать таблица, которая содержит кучу пустых строк между блоками ((


Место для рекламы.
 
Ответить
Сообщение
все дружно ищем этот код ))

Это все мысли виноваты, крутятся в разных направлениях ))
Поиск провожу по столбцу С , заголовок Номер.
Сейчас пришла мысль, что как вариант можно сделать так:
При первой записи блока строк в таблицу на листе ххх давать запас. Максимальное кол-во записываемых строк не может превышать количества 10.
То есть получится, что будет к примеру запись (с одинаковым номером) из 6 строк.
В след. раз при необходимости замены в из листа ааа, находить и менять эти строки.
Этим самым физическое удаление/добавление строк в ххх отпадает.
Осталось придумать как правильно все это организовать и насколько верно будет работать таблица, которая содержит кучу пустых строк между блоками ((

Автор - Stormy
Дата добавления - 13.11.2024 в 07:42
NikitaDvorets Дата: Среда, 13.11.2024, 09:57 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 614
Репутация: 142 ±
Замечаний: 0% ±

Excel 2019
Stormy, добрый день.
Цитата
найти по коду строку соответствующую ааа и заменить/вставить/удалить строки

Эта инструкция не выглядит исчерпывающей.
Пример файла с листами "как было" и "как должно быть после копирования" не помешал бы.
 
Ответить
СообщениеStormy, добрый день.
Цитата
найти по коду строку соответствующую ааа и заменить/вставить/удалить строки

Эта инструкция не выглядит исчерпывающей.
Пример файла с листами "как было" и "как должно быть после копирования" не помешал бы.

Автор - NikitaDvorets
Дата добавления - 13.11.2024 в 09:57
Stormy Дата: Среда, 13.11.2024, 11:47 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 366
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
NikitaDvorets, Hugo,
Обновил файл, добавил пометки


Место для рекламы.
 
Ответить
СообщениеNikitaDvorets, Hugo,
Обновил файл, добавил пометки

Автор - Stormy
Дата добавления - 13.11.2024 в 11:47
Stormy Дата: Среда, 13.11.2024, 12:40 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 366
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Пошел немного по другому пути, стал дописывать снизу и удалять предыдущие записи.
Если вдруг кому-то понадобится.

[vba]
Код
Sub UpdateDataFromIsxodToBaza()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRowSource As Long, lastRowTarget As Long
    Dim i As Long, targetRow As Long
    Dim codeToFind As String
    Dim found As Range
    Dim copyRange As Range
    Dim row As Long

    ' Проверяем, существует ли лист "isxod"
    On Error Resume Next
    Set wsSource = ThisWorkbook.Sheets("isxod")
    On Error GoTo 0
    If wsSource Is Nothing Then
        MsgBox "Лист 'isxod' не найден!"
        Exit Sub
    End If
    
    ' Проверяем, существует ли лист "baza"
    On Error Resume Next
    Set wsTarget = ThisWorkbook.Sheets("baza")
    On Error GoTo 0
    If wsTarget Is Nothing Then
        MsgBox "Лист 'baza' не найден!"
        Exit Sub
    End If

    ' Находим последнюю строку на листе isxod в столбце E
    lastRowSource = wsSource.Cells(wsSource.Rows.Count, "E").End(xlUp).row

    ' Находим последнюю строку на листе baza в столбце C
    lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp).row

    ' Проходим по строкам на листе isxod, начиная с 4-й
    For i = 4 To lastRowSource ' Начинаем с 4-й строки на листе isxod
        codeToFind = wsSource.Cells(i, "C").Value ' Получаем код из столбца "Номер" на листе isxod
        
        ' Ищем все строки с таким же кодом в столбце C на листе baza
        Set found = wsTarget.Range("C4:C" & lastRowTarget).Find(codeToFind, LookIn:=xlValues)

        ' Если найдено совпадение, очищаем все строки с таким же номером на листе baza
        Do While Not found Is Nothing
            found.EntireRow.ClearContents
            ' Ищем следующее совпадение
            Set found = wsTarget.Range("C4:C" & lastRowTarget).FindNext(found)
        Loop
        
        ' Находим следующую пустую строку на листе baza
        lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp).row + 1

        ' Определяем диапазон для копирования данных на листе isxod (A4:E последняя строка)
        Set copyRange = wsSource.Range("A4:E" & lastRowSource) ' Копируем все строки с A4 до последней строки с данными

        ' Копируем диапазон с листа isxod и вставляем в следующую строку на листе baza
        copyRange.Copy
        wsTarget.Range("A" & lastRowTarget).PasteSpecial Paste:=xlPasteValues
    Next i

    ' Удаляем пустые строки на листе baza
    lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp).row
    For row = lastRowTarget To 4 Step -1 ' Идем от последней строки вверх
        If WorksheetFunction.CountA(wsTarget.Rows(row)) = 0 Then
            wsTarget.Rows(row).Delete
        End If
    Next row

    MsgBox "Данные обновлены на листе 'baza'!"
End Sub
[/vba]


Место для рекламы.
 
Ответить
СообщениеПошел немного по другому пути, стал дописывать снизу и удалять предыдущие записи.
Если вдруг кому-то понадобится.

[vba]
Код
Sub UpdateDataFromIsxodToBaza()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRowSource As Long, lastRowTarget As Long
    Dim i As Long, targetRow As Long
    Dim codeToFind As String
    Dim found As Range
    Dim copyRange As Range
    Dim row As Long

    ' Проверяем, существует ли лист "isxod"
    On Error Resume Next
    Set wsSource = ThisWorkbook.Sheets("isxod")
    On Error GoTo 0
    If wsSource Is Nothing Then
        MsgBox "Лист 'isxod' не найден!"
        Exit Sub
    End If
    
    ' Проверяем, существует ли лист "baza"
    On Error Resume Next
    Set wsTarget = ThisWorkbook.Sheets("baza")
    On Error GoTo 0
    If wsTarget Is Nothing Then
        MsgBox "Лист 'baza' не найден!"
        Exit Sub
    End If

    ' Находим последнюю строку на листе isxod в столбце E
    lastRowSource = wsSource.Cells(wsSource.Rows.Count, "E").End(xlUp).row

    ' Находим последнюю строку на листе baza в столбце C
    lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp).row

    ' Проходим по строкам на листе isxod, начиная с 4-й
    For i = 4 To lastRowSource ' Начинаем с 4-й строки на листе isxod
        codeToFind = wsSource.Cells(i, "C").Value ' Получаем код из столбца "Номер" на листе isxod
        
        ' Ищем все строки с таким же кодом в столбце C на листе baza
        Set found = wsTarget.Range("C4:C" & lastRowTarget).Find(codeToFind, LookIn:=xlValues)

        ' Если найдено совпадение, очищаем все строки с таким же номером на листе baza
        Do While Not found Is Nothing
            found.EntireRow.ClearContents
            ' Ищем следующее совпадение
            Set found = wsTarget.Range("C4:C" & lastRowTarget).FindNext(found)
        Loop
        
        ' Находим следующую пустую строку на листе baza
        lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp).row + 1

        ' Определяем диапазон для копирования данных на листе isxod (A4:E последняя строка)
        Set copyRange = wsSource.Range("A4:E" & lastRowSource) ' Копируем все строки с A4 до последней строки с данными

        ' Копируем диапазон с листа isxod и вставляем в следующую строку на листе baza
        copyRange.Copy
        wsTarget.Range("A" & lastRowTarget).PasteSpecial Paste:=xlPasteValues
    Next i

    ' Удаляем пустые строки на листе baza
    lastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp).row
    For row = lastRowTarget To 4 Step -1 ' Идем от последней строки вверх
        If WorksheetFunction.CountA(wsTarget.Rows(row)) = 0 Then
            wsTarget.Rows(row).Delete
        End If
    Next row

    MsgBox "Данные обновлены на листе 'baza'!"
End Sub
[/vba]

Автор - Stormy
Дата добавления - 13.11.2024 в 12:40
NikitaDvorets Дата: Среда, 13.11.2024, 12:42 | Сообщение № 7
Группа: Авторы
Ранг: Ветеран
Сообщений: 614
Репутация: 142 ±
Замечаний: 0% ±

Excel 2019
Stormy,
Цитата
Обновил файл, добавил пометки


Теперь стало понятнее.
Вариант с макросом вставки блока на примере предыдущего файла.
К сообщению приложен файл: ew_zamena_znachenij_v_tablice_.xlsm (22.5 Kb)
 
Ответить
СообщениеStormy,
Цитата
Обновил файл, добавил пометки


Теперь стало понятнее.
Вариант с макросом вставки блока на примере предыдущего файла.

Автор - NikitaDvorets
Дата добавления - 13.11.2024 в 12:42
Stormy Дата: Среда, 13.11.2024, 13:50 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 366
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Цитата NikitaDvorets, 13.11.2024 в 12:42, в сообщении № 7 ()
Вариант с макросом вставки блока на примере предыдущего файла.

Ваш пример намного проще.
Спасибо


Место для рекламы.
 
Ответить
Сообщение
Цитата NikitaDvorets, 13.11.2024 в 12:42, в сообщении № 7 ()
Вариант с макросом вставки блока на примере предыдущего файла.

Ваш пример намного проще.
Спасибо

Автор - Stormy
Дата добавления - 13.11.2024 в 13:50
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!