Возвращает номер строки в определенном пользователем диапазоне, а не абсолютный номер строки - PullRequest
2 голосов
/ 28 марта 2012

У меня есть диапазон rngData и массив aCopyrows() [int].

Следующий цикл используется для заполнения массива:

For Each c In rngData

    If c.Value = "Search term 1" Then
        aCopyrow(1) = c.Row
    ElseIf c.Value = "Search term 2" Then
        aCopyrow(2) = c.Row
    ElseIf c.Value = "Search term 3" Then
        aCopyrow(3) = c.Row
    End If

Next c

Я хочу, чтобы массив сохранял номера строк, соответствующие rngData, или другими словами: если совпадение найдено в первой строке rngData, целое число 1 сохраняется в aCopyrow. Однако использование этого метода сохраняет глобальный номер строки этой конкретной ячейки.

Любая помощь приветствуется!

rngData.c.Row просто выдает ошибку (метод не поддерживается).

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Как насчет:

aCopyrow(1) = c.Row  - rngData.Cells(1,1).Row + 1

и, если имеется более 3 If, вы можете выполнить итерацию следующим образом, чтобы сделать код более компактным:

Dim i as Long

For Each c In rngData

    For i = 1 To 3
        If c.Value = "Search term " & i Then
            aCopyrow(i) = c.Row  - rngData.Cells(1,1).Row + 1
        End If
    Next i

Next c
0 голосов
/ 29 марта 2012

Используйте массив данных, это будет намного быстрее:

Dim vArray As Variant

vArray = rngData.Value

For lRow = 1 To UBound(vArray, 1)
    For lCol = 1 To UBound(vArray, 2)
        If vArray(lRow, lCol) = "Search term 1" Then
            aCopyrow(1) = lRow
        ElseIf vArray(lRow, lCol) = "Search term 2" Then
            aCopyrow(2) = lRow
        ElseIf vArray(lRow, lCol) = "Search term 3" Then
            aCopyrow(3) = lRow
        End If
    Next lCol
Next lRow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...