Выберите диапазон, используя конкретные критерии в непрерывном столбце данных - PullRequest
2 голосов
/ 08 января 2012

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

      A       B       C           D       E       F
1     x       x       12:10       x       x       x
2     x       x       12:10       x       x       x
3     x       x       12:10       x       x       x
4     x       x       12:40       x       x       x
5     x       x       12:40       x       x       x
6     x       x       12:40       x       x       x
7     x       x       12:40       x       x       x
8     x       x       1:05        x       x       x
9     x       x       1:05        x       x       x
10    x       x       1:05        x       x       x

Например,

Я хотел бы захватить столбцы A-F, строки 1-3 как один Диапазон, запустить мой макрос, затем ...

Я хотел бы захватить столбцы A-F, строки 4-7 как другой диапазон, запустить мой макрос, а затем ...

Я хотел бы захватить столбцы A-F, строки 8-10 как другой диапазон, запустить мой макрос и т. Д., Пока не останется больше диапазонов для этого.

Как видите, строки в этом случае различаются по своим временным меткам.

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

Спасибо за вашу помощь.

1 Ответ

3 голосов
/ 08 января 2012

Вероятно, самый простой способ:

  1. Скопировать ваши данные в массив
  2. Проверить массив, чтобы найти смежные диапазоны (цикл этого массива намного быстрее, чем цикл ячеек)
  3. Вызовите макрос с указанным диапазоном

Option Explicit

Sub Demo()
    Dim v As Variant
    Dim i As Long, j As Long
    Dim sh As Worksheet

    Set sh = ActiveSheet
    v = sh.[A1].CurrentRegion ' Assumes data range starts at cell A1
    ' Alternative method to get data block starting at A3
    ' Extend to a specified column number (NumberOfColumnsYouWant)
    ' Assumes all rows in your data block in columns A have data
    v = sh.Range([A3], [A3].End(xlDown)).Resize(, NumberOfColumnsYouWant)


    i = 1
    j = 1
    Do While i <= UBound(v, 1)
        Do While j < UBound(v, 1)
            If v(i, 3) = v(j + 1, 3) Then
                j = j + 1
            Else
                Exit Do
            End If
        Loop
        YourMacro Range(sh.Cells(i, 1), sh.Cells(j, UBound(v, 2)))
        i = j + 1
        j = i
    Loop
 End Sub

 Sub YourMacro(rng As Range)
     MsgBox rng.Address
 End Sub
...