VBAでは、配列の要素数を取得するために、以下の方法があります。
- UBound関数を使う方法
- Len関数を使う方法
それぞれ、確認していきましょう。
UBound関数を使う方法
UBound関数は、”Upper Bound”の略で、配列の最大のインデックス(上限)を返す関数です。
一方、LBound関数は、”Lower Bound”の略で、配列の最小のインデックス(下限)を返す関数です。
両方を合わせて使うことで、配列の要素数を求めることができます。
UBound関数を使って配列の要素数を求める例を示します。まず、以下のような配列を定義します。
1 |
Dim myArray(1 To 5) As String |
この配列には、要素が5つあります。次に、UBound関数を使って、配列の最大インデックスを取得します。
1 2 |
Dim lastIndex As Integer lastIndex = UBound(myArray) |
この場合、lastIndexには、5が代入されます。最後に、1を足すことで、配列の要素数を求めることができます。
1 2 |
Dim elementCount As Integer elementCount = lastIndex - LBound(myArray) + 1 |
ここでは、LBound関数を使って、配列の最小インデックスを取得し、最大インデックスから最小インデックスを引いて1を足すことで、配列の要素数を求めています。
また、UBound関数は、配列の次元を指定することもできます。2次元配列の場合は、以下のように使うことができます。
1 2 3 |
Dim myArray(1 To 5, 1 To 3) As String Dim lastIndex As Integer lastIndex = UBound(myArray, 1) ' 1次元目の最大インデックスを取得 |
UBound関数を使うことで、配列の要素数や、各次元の最大インデックスを取得することができます。
サンプルコード
配列から重複した値を取り除くコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub RemoveDuplicateValues() Dim myArray(1 To 8) As Integer ' 配列の定義 Dim i As Integer ' ループカウンタ ' 配列に値を代入 myArray(1) = 3 myArray(2) = 2 myArray(3) = 5 myArray(4) = 5 myArray(5) = 7 myArray(6) = 8 myArray(7) = 2 myArray(8) = 1 ' 重複した値を取り除く For i = LBound(myArray) To UBound(myArray) - 1 Dim j As Integer For j = i + 1 To UBound(myArray) If myArray(i) = myArray(j) Then ' 重複した値が見つかった場合、後ろの要素を前に詰める Dim k As Integer For k = j To UBound(myArray) - 1 myArray(k) = myArray(k + 1) Next k ' 配列の最後の要素を削除 ReDim Preserve myArray(LBound(myArray) To UBound(myArray) - 1) j = j - 1 End If Next j Next i ' 取り除かれた後の配列の内容をメッセージボックスで表示 Dim result As String For i = LBound(myArray) To UBound(myArray) result = result & myArray(i) & vbCrLf Next i MsgBox result End Sub |
このコードでは、1次元の整数型配列から重複した値を取り除く処理を行っています。
配列から重複した値を取り除くために、ForループとIf文を使っています。
重複した値が見つかった場合、後ろの要素を前に詰めて配列から削除しています。
Len関数を使用する方法
Len関数は、文字列の長さを返す関数ですが、配列に対しても使用することができます。配列を文字列に変換し、その文字列の長さを取得することで、配列の要素数を取得することができます。
具体的には、Join関数を使用して配列を文字列に変換し、その文字列の長さを取得します。Join関数は、指定された区切り文字を使用して、配列の要素を1つの文字列に結合します。以下は例です。
1 2 |
Dim arr(1 To 5) As Integer MsgBox Join(arr) ' 結果は空白で区切られた"0 0 0 0 0"になる |
Join関数で配列を文字列に変換した後、Len関数を使用して文字列の長さを取得します。ただし、このままLen関数を使用すると、区切り文字の長さも含まれてしまうため、要素数を取得するには、文字列の長さを、配列の1つの要素の長さで割る必要があります。以下は例です。
1 2 |
Dim arr(1 To 5) As Integer MsgBox Len(Join(arr)) / Len(arr(1)) ' 結果は5になる |
この方法は、配列が文字列である場合にのみ使用できます。また、要素が文字列型でない場合には、この方法は正しく機能しません。したがって、可能であればUBound関数を使用することをお勧めします。
コメント