цикл на основе сохраненных дат начала и окончания в массивах VBA - PullRequest
0 голосов
/ 05 ноября 2018

Исходный лист:
Дизайн: A
данные 1
данные 2
данные 3
данные 4
Всего по дизайну А

Дизайн: B
данные 5
данные 6
данные 7
Всего за дизайн B

Информация о размещении на новом листе с новым заголовком:
данные 1 & ensp; & EnSP; & EnSP; Конструкция A
данные 2 & ensp; & EnSP; & EnSP; Конструкция A
данные 3 & ensp; & EnSP; & EnSP; Конструкция A
данные 4 & ensp; & EnSP; & EnSP; Конструкция A
данные 5 & ensp; & EnSP; & EnSP; Конструкция B
данные 6 & ensp; & EnSP; & EnSP; Конструкция B
данные 7 & ensp; & EnSP; & EnSP; Конструкция B
Всего по дизайну А
Всего за дизайн B

1) Как выполнить цикл для сбора описаний конструкций в одном массиве и итоговых значений для конструкций в другом массиве? Нужно ли назначать массивы 0 и 1 для этих двух массивов?

2) а затем сделать подсчет массивов, чтобы вставить их в соответствии с новым форматом листа?

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Если начало и конец имеют одинаковое количество элементов, вы можете использовать одну и ту же петлю / одну и ту же переменную управления для обоих.

Sub LoopRanges()

    Dim aStart As Variant
    Dim aEnd As Variant
    Dim i As Long
    Dim rCell As Range

    'Start and End have some number of elements
    aStart = Array("A1", "B3", "C10", "D1")
    aEnd = Array("A10", "B15", "C12", "D20")

    With Sheet1
        'loop through start, but use the same control variable (i) for both start and end
        For i = LBound(aStart) To UBound(aStart)
            For Each rCell In .Range(.Range(aStart(i)), .Range(aEnd(i))).Cells
                Debug.Print rCell.Address
            Next rCell
        Next i
    End With

End Sub

Возможно, это не совсем ваша ситуация, но, надеюсь, она достаточно близка, чтобы быть поучительной. У меня есть два массива - один для какой ячейки начинаться, а другой - для какой ячейки заканчиваться. В моем цикле For Next используйте i в качестве управляющей переменной и получайте доступ к aStart и aEnd, используя эту переменную. Внутренний цикл просто строит диапазон для цикла For Each, который будет повторяться.

0 голосов
/ 05 ноября 2018

Вы имеете в виду что-то вроде этого:

Sub Test()

    Dim StRows As Variant
    Dim EndRows As Variant

    Dim aStRow As Variant
    Dim aEndRow As Variant

    StRows = Array(1, 2, 3, 4, 5)
    EndRows = Array(6, 7, 8, 9, 10)

    For Each aStRow In StRows
        For Each aEndRow In EndRows
            Debug.Print aStRow & " - " & aEndRow
        Next aEndRow
    Next aStRow

End Sub

Будет напечатано в отдельных строках в окне Immediate:
1 - 6, 1 - 7, 1 - 8, 1 - 9, 1 - 10 и затем 2 - 6, 2 - 7, 2 - 8....

Каждый StRow прикреплен к каждому aEndRow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...