Как сместить в «Для каждого цикла» - PullRequest
0 голосов
/ 27 сентября 2019

В рамках вложенного цикла я пытаюсь выяснить, как указать, что результаты должны помещаться в другой столбец для второй и третьей таблиц в массиве.Для первого листа в массиве все хорошо.Для второго и третьего рабочих листов мне нужно поместить результат в следующий столбец.Я просто не уверен, ГДЕ сказать это, чтобы не испортить «вложенную» часть цикла.

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

Dim SG As Worksheet, SG2017 As Worksheet, SG2018 As Worksheet, SG2019 As Worksheet
    Set SG = Workbooks("Subgroup Summary Template").Sheets("SG")
    Set SG2017 = Workbooks("2017 Subgroup Summary").Sheets("2017")
    Set SG2018 = Workbooks("2018 Subgroup Summary").Sheets("2018")
    Set SG2019 = Workbooks("2019 Subgroup Summary").Sheets("2019")
Dim SGdata As Variant
Dim CurrentSGdata As Variant
    SGdata = Array(SG2017, SG2018, SG2019)
Dim i As Long

'ALL STUDENTS
For Each CurrentSGdata In SGdata
    With CurrentSGdata.Range("A1")
         For i = 3 To 8
         .AutoFilter Field:=7, Criteria1:=i
         .AutoFilter Field:=8, Criteria1:="Total Population"
         .AutoFilter Field:=1, Criteria1:=school
                SG.Cells(i, 3) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible).Areas(2).Columns(15).Cells(1, 1)
                    On Error Resume Next
                SG.Cells(i, 6) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible).Areas(2).Columns(17).Cells(1, 1)
                    On Error Resume Next
            CurrentSGdata.AutoFilterMode = False
         Next i
Next CurrentSGdata

Например, как мне указать, что во второй итерации "CurrentSGdata," SG.Cells(i,3) должно стать SG.Cells(i,4)?

1 Ответ

2 голосов
/ 27 сентября 2019

Например:

Dim i As Long, n As Long

'ALL STUDENTS
n = 3
For Each CurrentSGdata In SGdata
    With CurrentSGdata.Range("A1")
         For i = 3 To 8
             .AutoFilter Field:=7, Criteria1:=i
             .AutoFilter Field:=8, Criteria1:="Total Population"
             .AutoFilter Field:=1, Criteria1:=school

             On Error Resume Next

             SG.Cells(i, n) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible) _
                                .Areas(2).Columns(15).Cells(1, 1)

             SG.Cells(i, 6) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible) _
                                .Areas(2).Columns(17).Cells(1, 1)

             On Error Goto 0 '<< stop ignoring errors

             CurrentSGdata.AutoFilterMode = False
         Next i
     End With 'missing in your code?
     n = n + 1
Next CurrentSGdata
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...