#excel #vba
#excel #vba
Вопрос:
Кажется, я просто не могу заставить этот цикл for работать правильно. Я знаю, что мне не хватает чего-то основного, но я просто не могу понять это.
У меня есть 2 таблицы.
Таблица 1: (Таблица начинается со строки 7, а столбцы с i по q скрыты)
Таблица 2 :
Моя цель — перенести новые строки из Table1 в Table2. Мой код просматривает таблицу 1, идентифицирует строки со значением ‘R’ и заполняет их. Затем я хочу извлечь данные из тех же строк в Table2
Код, который идентифицирует и заполняет значение ‘R’:
Dim iRow As Long
With Sheet12
iRow = Application.Count(.ListObjects("Table1").ListColumns("KEY").DataBodyRange)
End With
'find last row with a date
Dim jRow As Long
With Sheet12
jRow = Application.Count(.ListObjects("Table1").ListColumns("Date").DataBodyRange)
End With
'take the value from iRow and col 1, add 1, place in iRow 1,1
Dim q As Long
For q = iRow 7 To jRow 6
Sheet12.Cells(q, 18) = 1 Sheet12.Cells(q - 1, 18)
Next q
Тогда с этим у меня возникли проблемы. Моей мыслью было попытаться запустить двойной цикл, где я выполняю цикл, чтобы заполнить каждый столбец, а затем каждую строку.
Dim a As Long
Dim b As Long
Dim c As Long
c = jRow - iRow
For b = 11 To c 11
For a = iRow 7 To jRow 6
ws15.Cells(b, 1).Value = "Plaid-" amp; Sheet12.Cells(a, 8).Value amp; "-" amp; Sheet12.Cells(a, 7).Value
ws15.Cells(b, 2).Value = Sheet12.Cells(a, 18).Value
ws15.Cells(b, 3).Value = Sheet12.Cells(a, 3).Value
ws15.Cells(b, 4).Value = Sheet12.Cells(a, 4).Value
ws15.Cells(b, 5).Value = Sheet12.Cells(a, 5).Value
ws15.Cells(b, 6).Value = 1001
ws15.Cells(b, 7).Value = "FILL IN"
Next a
Next b
Теперь приведенный выше код копирует только последнюю строку из Table1 в Table2 четыре раза.
Я знаю, что я близок, и я уверен, что я просто устал, но я не могу сделать это правильно. Я ценю время каждого.
Комментарии:
1. Что показывает пошаговое выполнение кода в отладчике?
Ответ №1:
Проблема возникает из-за двойного цикла. Внутренняя петля заполняет один и тот же ряд 4 раза. Это объясняет, почему каждая строка содержит одни и те же данные.
Вы хотите повторить строки вместе, поэтому вам просто нужен 1 цикл. b
Переменная не нужна.
Попробуйте этот код:
Dim a As Long
Dim c As Long
c = jRow - iRow 7 'start row on new sheet
For a = iRow 7 To jRow 6 'source data rows
ws15.Cells(c, 1).Value = "Plaid-" amp; Sheet12.Cells(a, 8).Value amp; "-" amp; Sheet12.Cells(a, 7).Value
ws15.Cells(c, 2).Value = Sheet12.Cells(a, 18).Value
ws15.Cells(c, 3).Value = Sheet12.Cells(a, 3).Value
ws15.Cells(c, 4).Value = Sheet12.Cells(a, 4).Value
ws15.Cells(c, 5).Value = Sheet12.Cells(a, 5).Value
ws15.Cells(c, 6).Value = 1001
ws15.Cells(c, 7).Value = "FILL IN"
c = c 1 'next row on new sheet
Next a
Комментарии:
1. как шарм. Я просто не мог этого видеть. но, чтобы было ясно, нам не нужно «b» в качестве переменной, правильно?