私は配列の長さを取得しようとしていますが、このエラーが発生し続けます:
必要なオブジェクト
私は何か間違っていますか?
Dim columns As Variant
columns = Array( _
"A", "ID", _
"D", "Name")
Debug.Print columns.Length ' Error: Object required
配列の長さ:
UBound(columns)-LBound(columns)+1
UBound
だけでは、VBAの配列は異なるインデックスで開始できるため、すべての配列の長さを取得するのに最適な方法ではありません。たとえば、Dim arr(2 to 10)
UBound
は、配列が1ベースの場合にのみ正しい結果を返します(1でインデックス作成を開始します(例:Dim arr(1 to 10)
。他の状況では間違った結果を返します(例:Dim arr(10)
))。
VBAアレイの詳細このVBAアレイチュートリアル .
関数
Public Function ArrayLen(arr As Variant) As Integer
ArrayLen = UBound(arr) - LBound(arr) + 1
End Function
使用法
Dim arr(1 To 3) As String ' Array starting at 1 instead of 0: nightmare fuel
Debug.Print ArrayLen(arr) ' Prints 3. Everything's going to be ok.
バリアントが空の場合、エラーがスローされます。防弾コードは次のとおりです。
Public Function GetLength(a As Variant) As Integer
If IsEmpty(a) Then
GetLength = 0
Else
GetLength = UBound(a) - LBound(a) + 1
End If
End Function
「CountA」をお試しください
Dim myArray(1 to 10) as String
Dim arrayCount as String
arrayCount = Application.CountA(myArray)
Debug.Print arrayCount