web-dev-qa-db-ja.com

配列の長さを取得しますか?

私は配列の長さを取得しようとしていますが、このエラーが発生し続けます:

必要なオブジェクト

私は何か間違っていますか?

Dim columns As Variant
columns = Array( _
"A", "ID", _
"D", "Name")
Debug.Print columns.Length  ' Error: Object required
44
lisovaccaro

配列の長さ:

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アレイチュートリアル .

87
AnalystCave.com

関数

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.
23
MarredCheese

バリアントが空の場合、エラーがスローされます。防弾コードは次のとおりです。

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
0
meMadhav