Удвоение для цикла, не увеличивающегося

#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» в качестве переменной, правильно?