#excel #vba
#превосходить #vba
Вопрос:
У меня возникли некоторые проблемы с вложенным циклом Do While и For в VBA.
По сути, у меня есть две таблицы. Я пытаюсь повторить каждую строку первой таблицы, сколько бы строк ни было во второй таблице. Количество строк во второй таблице может меняться со временем, поэтому, к сожалению, я не могу жестко указать количество строк в ней.
В своем текущем состоянии цикл for только правильно повторяет первую строку моей таблицы на листе «Var Admin» и не собирается делать то же самое со второй строкой в первой таблице.
Вот что я пробовал до сих пор:
Sheets("Managers").Select Range("Table6").Select managers = ActiveSheet.UsedRange.rows.Count managers = managers - 1 Set myTable = Worksheets("Var").ListObjects("var_no_format") my = 1 looper = 1 For Each lr In myTable.ListRows Do While looper lt;= managers lr.Range.rows.Copy Sheets("Var Admin").Range("A" amp; my) my = my 1 looper = looper 1 Loop Next lr
Что я могу попробовать дальше?
Ответ №1:
Я скопировал значения в массив для скорости.
Option Explicit Sub copyrows() Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet Dim managers As Long, tbl As ListObject Dim n As Long, i As Long, r As Long, c As Long Dim trow As ListRow, ar With ThisWorkbook Set ws1 = .Sheets("Managers") Set ws2 = .Sheets("Var") Set ws3 = .Sheets("Var Admin") End With managers = ws1.ListObjects("Table6").ListRows.Count Set tbl = ws2.ListObjects("var_no_format") ReDim ar(1 To managers * tbl.ListRows.Count, 1 To tbl.ListColumns.Count) i = 1 For r = 1 To tbl.ListRows.Count For c = 1 To tbl.ListColumns.Count ar(i, c) = tbl.DataBodyRange(r, c).Value2 For n = 1 To managers - 1 ar(i n, c) = ar(i, c) Next Next i = i managers Next ' output ws3.Range("A1").Resize(UBound(ar), UBound(ar, 2)) = ar MsgBox "Table rows copied for " amp; managers amp; " times", vbInformation End Sub
Комментарии:
1. Привет! Большое вам спасибо за ваш ответ. К сожалению, это не совсем то, что мне нужно. Этот код копирует всю таблицу в Var Admin n раз, но мне нужна строка 1 таблицы, скопированная в Var Admin n раз, затем строка 2, скопированная в Var Admin n раз, и так далее.
2. @AleksLi Вы тоже хотите скопировать форматы или только значения ?
3. Просто значения-это нормально.
4. @AleksLi кстати, ваш код будет работать, если вы переместите
looper = 1
строку в послеFor Each lr In myTable.ListRows
5. Похоже, это сработало. Большое вам спасибо!!!