Найдите число в столбце, вставьте строку ниже столбца, заполните данными, а затем повторяйте, пока не будут найдены все предварительно определенные числа

#excel #vba

#excel #vba

Вопрос:

Мне нужно найти значение «5005» (только это значение) в столбце J: J, вставить новую строку под ним, а затем заполнить строку значениями в столбцах A-U.

Я новичок в VBA, и я не могу сделать это, не внося путаницу в код.

Черновик будет выглядеть примерно так

Найдите все ячейки со значением 5005 в столбце J: J, вставьте строку ниже, поместите значение 1 в A, поместите значение 2 в B и т.д. … до столбца U Повторяйте для следующей ячейки, в которой есть «5005», пока не останется больше

Я не уверен, какой код будет работать лучше всего на данном этапе, и я думаю, что просмотр этого, написанного профессионалом, значительно поможет.

В приведенном ниже беспорядочном коде я смог выполнить поиск значения «5005» и вставить строку под ним, но любая ячейка, которую я выбрал в Excel, будет заполнена значением «TRUE», а код довольно беспорядочный. Не уверен, что я шел в правильном направлении с этим.

 Sub AAAAAAAtest()
    Dim find5005 As Range

    'Have excel search 1 column instead of all cell
    Set find5005 = Cells.Find(What:="5005", LookIn:=xlFormulas, _
                              LookAt:=xlPart, SearchOrder:=xlByColumns, _
                              SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False)

    If find5005 Then ActiveCell.Value = find5005.Offset(1).EntireRow.Insert
End Sub
  

Комментарии:

1. Откуда вы берете значения (A-U), т. Е. что вы копируете во вновь вставленную строку?

Ответ №1:

Описание находится в комментариях к коду

 Option Explicit

Sub insert5005()

    Dim rng As Range, urng As Range, faddr As String
    Dim vals As Variant

    'get some dummy values quickly
    vals = buildAU()

    With Worksheets("sheet5")

        'find first 5005
        Set rng = .Range("J:J").Find(What:="5005", after:=.Cells(.Rows.Count, "J"), _
                                     LookIn:=xlFormulas, LookAt:=xlPart, _
                                     SearchOrder:=xlByRows, SearchDirection:=xlNext)

        'continue if found
        If Not rng Is Nothing Then

            'record first found cell
            faddr = rng.Address

            'start loop for insert, populate and additional cells
            Do
                'insert new row
                rng.Offset(1, 0).EntireRow.Insert
                'populate row
                .Cells(rng.Offset(1, 0).Row, "A").Resize(1, UBound(vals)   1) = vals
                'look for another
                Set rng = .Range("J:J").FindNext(after:=rng)

            'keep going until first address is reached a second time
            Loop Until rng.Address = faddr

        End If

    End With

End Sub

Function buildAU()

    'construct some dummy values

    Dim i As Long, tmp As String

    For i = 65 To 85
        tmp = tmp amp; Format(i, "|value00")
    Next i

    buildAU = Split(Mid(tmp, 2), Chr(124))

End Function
  

Комментарии:

1. Это здорово, я такой новичок, и я ценю всю помощь, которую я могу получить! Одна вещь, которую я не совсем понял, у меня есть определенные значения, которые я хотел бы заполнить в каждой ячейке во вновь вставленной строке. Какой код был бы лучшим для заполнения этих строк определенными значениями? Пример: в новой строке в столбце A я хотел бы получить строковое значение типа «rack», а в следующем столбце я хотел бы получить значение «400» это не то, чем я собираюсь их заполнять, но они дают вам представление,

2. Создайте массив из 21 значения, как я сделал выше.

3. Я ПОНЯЛ, ТЫЫЫЫЫ <3