Впервые я столкнулся с "формулой массива" в VBA.Это не так, но не очень очевидно для понимания / устранения неполадок.На моей машине [где диапазон имел все пустые ячейки, он выдает ошибку [myRange <> 0] = Error 2092
, затем в функции Match, затем получает другую ошибку ...
Формулы массива хороши только на листе формул,но я чувствую, что вы должны избегать их в VBA.У вас есть возможность использовать петли в VBA, поэтому не стесняйтесь их использовать!Хотя ваш черед, хотя и явный, насколько это возможно, является ключевым при написании программного обеспечения (так что вы поймете это позже!).
Мое предложение будет следующим:
Option Explicit
Function FindDateColumnInRange(ByVal RangeToLookIn As Range) As Long
If RangeToLookIn.Rows.Count <> 1 Then
'The range you're looking in has more than one row
'what should you do in this case? Look only in the first row?
Else
Dim i As Long
'The range has only one row
For i = 0 To RangeToLookIn.Columns.Count - 1
If RangeToLookIn.Item(1, i).Value <> 0 Then
'should you verifiy that the value is a date value?
FindDateColumnInRange = RangeToLookIn.Item(1, i).Column
Exit Function
End If
Next
End If
'the range didn't have a value different from 0
FindDateColumnInRange = 0
End Function
В действии вы быget:
Sub Test()
Dim MyRange As Range
Set MyRange = Worksheets("Portf_Mod").Range("AB368:CY368")
Dim date_col As Integer
date_col = FindDateColumnInRange(MyRange)
If date_col = 0 Then
'There was no date in your range
End If
End Sub
Да, это намного длиннее, чем предложения SJR, но охватывает все исключения, и вы можете контролировать, как будет выглядеть, если вы будете передавать многомерный массив (сначала проходите по строкам, а затем по столбцам)или наоборот).