Массив номеров строк, соответствующих критериям - PullRequest
0 голосов
/ 08 января 2019


Мне нужно создать массив, состоящий из номеров строк, которые соответствуют определенным критериям.
Допустим, у меня есть список дат:

01.03.2019
01.07.2019
01.03.2020
30.03.2019
01.03.2019
01.06.2019

Теперь, если мне нужны номера строк 01.03.2019, мой массив будет [1,5].
Есть ли достойный способ сделать это? В моем списке много тысяч записей, поэтому я думаю, что цикл по каждой ячейке займет некоторое время. Любое бережливое решение будет высоко ценится.
Я нашел эту ветку, но ответы еще не подтверждены: Можно ли заполнить массив номерами строк, которые соответствуют определенным критериям, без зацикливания?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Это не займет много времени, если вы работаете с массивом, а не с рабочим листом.

dim dt as long, i as long, j as long, tmp as variant, arr as variant

dt = dateserial(2019, 1, 3)

with worksheets("sheet1")

    tmp = .range(.cells(1, "A"), .cells(.rows.count, "A").end(xlup)).value2

end with

redim arr(0)

for i=lbound(tmp, 1) to ubound(tmp, 1)
    if tmp(i, 1) = dt then
        redim preserve arr(j)
        arr(j) = i   'collect row numbers
        j=j+1
    end if
next i

for i=lbound(arr) to ubound(arr)
    debug.print arr(i)  'print row numbers
next i
0 голосов
/ 08 января 2019

Если бы ваши значения были в столбце A, это заполнило бы массив соответствующими номерами строк и распечатало бы их в ближайшее окно:

Sub FillArray()

Dim myarray As Variant
Dim i As Long

ReDim myarray(0 To 0)

For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 1).Value = "01.03.2019" Then 'Value to find
        ReDim Preserve myarray(0 To UBound(myarray) + 1)
        myarray(UBound(myarray) - 1) = i
    End If
Next i

For i = 0 To UBound(myarray)
    Debug.Print myarray(i)
Next i

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