大体でIT
大体でIT
2021/1/8
Excel VBAで、配列の要素数や長さを取得する方法について、ご紹介します。配列で最大と最小の要素番号は、「UBound」と「LBound」で取得することができます。配列の長さは、「UBound」と「LBound」を組み合わせることでできます。配列を扱う際には、要素番号を取得する必要があるので、マスターしていきましょう。
この記事では、配列の要素数や長さを取得する方法について、ご紹介します。
配列の大きさや長さを取得するには、「UBound」や「LBound」を使います。
配列を扱う場合には、配列の大きさや長さが必要になってくるので、取得する方法についてマスターしていきましょう。
では、配列の要素数や長さを取得する方法について、解説していきます。
配列の要素数を取得
配列の長さを取得
UBoundの使いどころ
VBAで、配列の要素数を取得するには、「UBound」と「LBound」があります。
UBoundとLBoundは、「最大」と「最小」の要素番号を取得することができます。
1次元配列
1次元配列で、最大の要素番号を取得するイメージです。
1次元の最大の要素番号を取得するには、次のように入力します。
2次元配列
2次元配列で、最大の要素番号を取得するイメージです。
2次元配列で、最大の要素番号を取得するには、「UBound(2次元配列, 次元)」と入力します。
1次元で、最大の要素番号:UBound(2次元配列, 1)
2次元で、最大の要素番号:UBound(2次元配列, 2)
1次元配列
1次元配列で、最小の要素番号を取得するイメージは次のようになります。
1次元配列で、最小の要素番号を取得するには、「LBound(1次元配列)」と入力します。
2次元配列
2次元配列で、最小の要素番号を取得するイメージは次のようになります。
2次元配列で、それぞれの最小の要素番号を取得するには、「LBound(2次元配列, 次元)」と入力します。
1次元で、最小の要素番号:LBound(2次元配列, 1)
2次元で、最小の要素番号:LBound(2次元配列, 2)
では、VBAコードを実際に作成して実行してみます。
1次元配列で、最大と最小の要素番号を取得してみます。
0番目からスタートする配列「a(3)」で、最大と最小の要素番号を取得してみます。
Sub TEST1()
Dim A
ReDim A(3) '0番目スタートの1次元配列
MsgBox "最大の要素番号:" & UBound(A) '3
MsgBox "最小の要素番号:" & LBound(A) '0
End Sub
最大値
最小値
つづいて、1番目からスタートする1次元配列「a(1 to 3)」で、最大と最小の要素番号を取得してみます。
Sub TEST2()
Dim A
ReDim A(1 To 3) '1番目スタートの1次元配列
MsgBox "最大の要素番号:" & UBound(A) '3
MsgBox "最小の要素番号:" & LBound(A) '1
End Sub
最大値
最小値
1次元配列の場合は、こんな感じで、配列の最大と最小の要素番号を取得することができます。
2次元以上の配列では、UBoundやLBoundに、「次元」を指定します。
では、0行0列スタートの2行3列の配列で、最大と最小の要素番号を取得してみます。
a(2, 3)で宣言した配列で、それぞれの次元の最大と最小の要素番号を取得するVBAコードです。
Sub TEST3()
Dim A
ReDim A(2, 3) '0行0列スタートの2次元配列
MsgBox "1次元で、最大の要素番号:" & UBound(A, 1) '2
MsgBox "1次元で、最小の要素番号:" & LBound(A, 1) '0
MsgBox "2次元で、最大の要素番号:" & UBound(A, 2) '3
MsgBox "2次元で、最小の要素番号:" & LBound(A, 2) '0
End Sub
1次元で最大の要素番号
結果は、「1次元で、最大の要素番号:2」となりました。
1次元で最小の要素番号
結果は、「1次元で、最小の要素番号:0」となりました。
2次元で最大の要素番号
結果は、「2次元で、最大の要素番号:3」となりました。
2次元で最小の要素番号
結果は、「2次元で、最小の要素番号:0」となりました。
という感じで、2次元以上の配列で、最大や最小の要素番号を取得するには、「次元」を設定します。
1行1列スタートの、2行3列の配列で、最大と最小の要素番号を取得してみます。
a(1 to 2, 1 to 3)で宣言した配列の、要素番号を取得するVBAコードです。
Sub TEST4()
Dim A
ReDim A(1 To 2, 1 To 3) '1行1列スタートの2次元配列
MsgBox "1次元で、最大の要素番号:" & UBound(A, 1) '2
MsgBox "1次元で、最小の要素番号:" & LBound(A, 1) '1
MsgBox "2次元で、最大の要素番号:" & UBound(A, 2) '3
MsgBox "2次元で、最小の要素番号:" & LBound(A, 2) '1
End Sub
1次元で最大の要素番号
結果は、「1次元で、最大の要素番号:2」となりました。
1次元で最小の要素番号
結果は、「1次元で、最小の要素番号:1」となりました。
2次元で最大の要素番号
結果は、「2次元で、最大の要素番号:3」となりました。
2次元で最小の要素番号
結果は、「2次元で、最小の要素番号:1」となりました。
配列の長さを取得するには、「UBound」と「LBound」を組み合わせます。
次のように、UBoundとLBoundを組み合わせます。
『長さ = UBound(配列) - LBound(配列) + 1』
最大と最小の要素数を取得して、その差分をとって、1を足しています。
だけど、配列が0番目スタートでも、1番目スタートでも、正しく配列の長さを取得できます。
「a(3)」で宣言された配列の長さを取得するVBAコードです。
Sub TEST5()
Dim A, B
ReDim A(3) '0番目スタートの1次元配列
'配列の長さを取得
B = UBound(A) - LBound(A) + 1
MsgBox B & " 個"
End Sub
a(3)の長さを取得
a(0)、a(1)、a(2)、a(3)で、4個なので、正しく配列の長さを取得できています。
次は「a(1 to 3)」で、配列の長さを取得してみます。
Sub TEST6()
Dim A, B
ReDim A(1 To 3) '1番目スタートの1次元配列
'配列の長さを取得
B = UBound(A) - LBound(A) + 1
MsgBox B & " 個"
End Sub
a(1 to 3)の長さを取得
a(1)、a(2)、a(3)で、3個なので、正しく配列の長さを取得できています。
セル範囲から取得した配列の大きさを取得する際に、「UBound」が使えます。
セルから取得した配列を、別のセルに貼り付ける、ということをやってみます。
まず、「UBound」を使わないで、配列をセルに貼り付けてみます。
Sub TEST7()
Dim A
'セルから配列を取得
A = ActiveSheet.Range("A1").CurrentRegion
'配列をセルに貼り付け
ActiveSheet.Range("E1:G3") = A '←ここが面倒
End Sub
配列をセルに貼り付け
UBoundを使わない場合は、貼り付け先のセル範囲を「Range("E1:G3")」というように、指定する必要があります。
なので、配列の大きさが変わるたびに、VBAコードを変更する必要があるため、ちょっと面倒です。
配列を貼り付ける際に、UBoundを使ってみます。
UBoundを使うと、配列を貼り付ける際にかなり便利になります。
セルの値を配列に格納して、UBoundを使って配列を貼り付けるVBAコードです。
Sub TEST8()
Dim A
'セルから配列を取得
A = ActiveSheet.Range("A1").CurrentRegion
'配列をセルに貼り付け
ActiveSheet.Range("E1").Resize(UBound(A, 1), UBound(A, 2)) = A '←これが便利
End Sub
ポイントは、貼り付ける際に、セル範囲の大きさを、UBoundを使って指定しています。
これで、配列の大きさが変更されても、同じVBAコードで、配列をセルに貼り付けることができます。
配列をセルに貼り付け
配列の大きさが変更されても、同じVBAコードで貼り付けができるので、便利です。
この記事では、配列の要素数や長さを取得する方法について、ご紹介しました。
配列の大きさや長さを取得するには、「UBound」や「LBound」を使います。
配列を扱う場合には、配列の要素数や長さが必要になってくるので、取得する方法についてマスターしていきましょう。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。