[VBA] переформирование данные в две строки

Zarubiant

Участник
Сообщения
80
Реакции
0
Сделай макрос VBA в excel, анализирующий строки в диапазоне. Макрос должен в каждой строке находить ячейку с определённым триггером, и все ячейки после этой он должен переносить на строку ниже
 
Сделай макрос VBA в excel, анализирующий строки в диапазоне. Макрос должен в каждой строке находить ячейку с определённым триггером, и все ячейки после этой он должен переносить на строку ниже
Для создания макроса VBA в Excel, который будет анализировать строки в диапазоне и выполнять указанное действие, в данном случае переносить ячейки после определенного триггера на строку ниже, следует выполнить следующие шаги:

1. Откройте Excel и нажмите Alt + F11, чтобы открыть редактор VBA.
2. В меню выберите "Вставка" -> "Модуль", чтобы создать новый модуль.
3. Вставьте следующий код в окно редактора VBA:

Код:
Sub ПереносЯчеек()
    Dim rng As Range
    Dim cell As Range
    Dim trigger As String
    Dim lastRow As Long
    
    trigger = "Триггер" ' Укажите ваш триггер
    
    Set rng = Range("A1:A100") ' Укажите диапазон, который нужно анализировать
    
    For Each cell In rng
        If cell.Value = trigger Then
            lastRow = Cells(Rows.Count, "A").End(xlUp).Row
            cell.Offset(1, 0).Resize(1, rng.Columns.Count).Cut Destination:=Cells(lastRow + 1, 1)
            cell.Offset(1, 0).EntireRow.Delete
        End If
    Next cell
End Sub

4. В коде замените "Триггер" на значение, которое будет являться вашим триггером для переноса ячеек.
5. Укажите нужный диапазон в переменной rng = Range("A1:A100"), где "A1:A100" - это пример диапазона.
6. Закройте редактор VBA и сохраните файл с расширением .xlsm, чтобы сохранить макрос.
7. Теперь можно запустить макрос, выбрав его в меню "Разработчик" -> "Макрос" и нажав "Выполнить".

Пожалуйста, убедитесь, что перед запуском макроса у вас есть резервная копия вашего файла Excel, чтобы избежать потери данных.
 
макрос должен вначале создать строку ниже анализируемой, а потом уже переносить туда данные
 
макрос должен вначале создать строку ниже анализируемой, а потом уже переносить туда данные
Для того чтобы макрос создавал строку ниже анализируемой перед переносом данных, вам нужно немного изменить код. Вот обновленный вариант макроса:

Код:
Sub ПереносЯчеек()
    Dim rng As Range
    Dim cell As Range
    Dim trigger As String
    Dim lastRow As Long
    
    trigger = "Триггер" ' Укажите ваш триггер
    
    Set rng = Range("A1:A100") ' Укажите диапазон, который нужно анализировать
    
    For Each cell In rng
        If cell.Value = trigger Then
            cell.Offset(1, 0).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            lastRow = Cells(Rows.Count, "A").End(xlUp).Row
            cell.Offset(1, 0).Resize(1, rng.Columns.Count).Cut Destination:=Cells(lastRow + 1, 1)
            cell.Offset(1, 0).EntireRow.Delete
        End If
    Next cell
End Sub

Теперь макрос сначала создаст строку ниже анализируемой, а затем перенесет данные в эту новую строку. Не забудьте заменить "Триггер" на ваше значение триггера и указать нужный диапазон для анализа. Сохраните файл и выполните макрос в Excel. Пожалуйста, сделайте резервную копию файла перед запуском макроса.
 
добавь возможность указания триггера
Для добавления возможности указания триггера в макросе, вы можете использовать InputBox, который позволит пользователю ввести значение триггера перед выполнением макроса. Вот обновленный код с добавлением InputBox:

Код:
Sub ПереносЯчеек()
    Dim rng As Range
    Dim cell As Range
    Dim trigger As String
    Dim lastRow As Long
    
    trigger = InputBox("Введите триггер:") ' Запрашиваем у пользователя ввод триггера
    
    If trigger = "" Then
        MsgBox "Триггер не был указан. Макрос будет остановлен."
        Exit Sub
    End If
    
    Set rng = Range("A1:A100") ' Укажите диапазон, который нужно анализировать
    
    For Each cell In rng
        If cell.Value = trigger Then
            cell.Offset(1, 0).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            lastRow = Cells(Rows.Count, "A").End(xlUp).Row
            cell.Offset(1, 0).Resize(1, rng.Columns.Count).Cut Destination:=Cells(lastRow + 1, 1)
            cell.Offset(1, 0).EntireRow.Delete
        End If
    Next cell
End Sub

Теперь перед выполнением макроса пользователю будет предложено ввести значение триггера. Если пользователь оставит поле триггера пустым, макрос выдаст сообщение об ошибке. Пожалуйста, сохраните файл и выполните макрос в Excel, чтобы использовать эту обновленную версию. Не забудьте сделать резервную копию файла перед запуском макроса.
 
Назад
Сверху Снизу