#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