Прокрутите весь столбец, чтобы найти значение

Как я могу прокручивать все строки столбца в VBA?

Вот мой пример:

Function FindRow(Item As String, Rng As range) As Variant Dim row As Integer Dim col As Integer For col = 1 To Rng.Columns.Count For row = 1 To Rng.Rows.Count If Rng.Cells(row, col).Value = Item Then FindRow = row + Rng.row - 1 Exit Function End If Next row Next col FindRow = CVErr(XlCVError.xlErrNA) End Function 

Если мой диапазон – это один столбец, Rng.Columns.Count равен 1 и Rng.Rows.Count равен 1048576. Моя функция останавливается перед входом второго For. Если я добавлю часы на Rng.Cells (row, col) .Value, я получил

 <Application-defined or object-defined error> 

в окне просмотра, но не всплывающее окно.

Спасибо.

РЕДАКТИРОВАТЬ

Второе решение

Использование Rng.Find (Item) .Row

 Function FindRow(Item As String, Rng As range) As Variant FindRow = Rng.Find(Item).Row End Function 

/! \ Он возвращает #VALUE вместо # N / A, если элемент не находится в диапазоне

Почему бы просто не использовать встроенную функцию MATCH ?

 =MATCH(C3,A:A,0) 

введите описание изображения здесь


… потому что вы хотите искать сразу несколько столбцов. Для этого вы можете использовать этот UDF:

 Function FindRow(lookFor As String, rng As Range) Dim v As Variant Dim iRow As Long Dim iCol As Long 'Read contents of range into a Variant array v = rng.Value 'Loop through contents to locate the desired element For iRow = LBound(v, 1) To UBound(v, 1) For iCol = LBound(v, 2) To UBound(v, 2) If v(iRow, iCol) = lookFor Then FindRow = iRow Exit Function End If Next iCol Next iRow FindRow = CVErr(XlCVError.xlErrNA) End Function 

введите описание изображения здесь

Давайте будем гением компьютера.