Получить номер строки, используя массив VBA - PullRequest
0 голосов
/ 22 марта 2019

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

Изображения:

enter image description here

Option Explicit

Sub test()

    Dim i As Long, arr As Variant

    With ThisWorkbook.Worksheets("Sheet1")

        arr = .Range("A1:A10")

        For i = LBound(arr) To UBound(arr)

            If arr(i, 1) = 4 Then
                'Get the row that the array value apperas in Column A. The answer should be row number 8
            End If

        Next i

    End With

End Sub

Ответы [ 4 ]

4 голосов
/ 22 марта 2019

Ваш массив относится к номеру строки на i, хотя это зависит от вашего массива, начиная с первого ряда. Если бы вы начали с 5-го ряда, это было бы i + 4

    For i = LBound(arr) To UBound(arr)

        If arr(i, 1) = 4 Then
            Debug.Print i
        End If

    Next i
2 голосов
/ 22 марта 2019
Sub test()

    Dim i As Long, arr As Variant, rng As Range

    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:A10")
    arr = rng.Value

    For i = LBound(arr) To UBound(arr)
            If arr(i, 1) = 4 Then
                Debug.Print rng(i).Row
            End If
     Next i   
End Sub
1 голос
/ 22 марта 2019

Попробуйте с Для каждой ячейки, как показано ниже. он вернет строки с точным соответствием.

Option Explicit
Sub test()
    Dim i As Long
    Dim cells As Range
    With ThisWorkbook.Worksheets("Sheet1")
        For Each cells In .Range("A1:A10")
            If cells.Value = 4 Then
                MsgBox ("row Number is :" & cells.Row)
            End If
        Next
    End With
End Sub
0 голосов
/ 22 марта 2019

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

Также обратите внимание, что индекс i вашего массива связан с положением внутри диапазона.Когда вы делаете arr = .Range("A1:A10"), вы создаете BIDIMENSIONAL массив из 10 ячеек (10x1).Индекс 1 будет ячейкой (1,1), индекс 2 будет ячейкой (2,1) и т. Д.

Таким образом, хитрость здесь заключается в том, чтобы сохранить номер строки, с которой начинается диапазон, а затем суммироватьindex.

Sub test()

Dim i As Long, arr As Variant

Dim rng As Range
Dim InitialRow As Long


With ThisWorkbook.Worksheets("Sheet1")
    Set rng = .Range("A1:A10")
    arr = rng.Value


    InitialRow = Range(Left(rng.Address(False, False), Application.WorksheetFunction.Search(":", rng.Address(False, False)) - 1)).Row

    For i = LBound(arr) To UBound(arr)

        If arr(i, 1) = 4 Then
            'Get the row that the array value apperas in Column A. The answer should be row number 8
            Debug.Print InitialRow + i - 1 'this is the row number that matches the value
        End If

    Next i

    Erase arr

End With

End Sub

Если я проверю это со значениями в `Range (" A1: A10 "), я получу в результате 8.

enter image description here

Но если я изменю положение значений, я получу другой результат с тем же кодом, потому что код хранит начальную строку диапазона.

enter image description here

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

Надеюсь, этот код поможет вам и адаптируется к вашим потребностям.

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