大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、配列の要素数や長さを取得する方法について、ご紹介します。配列で最大と最小の要素番号は、「UBound」と「LBound」で取得することができます。配列の長さは、「UBound」と「LBound」を組み合わせることでできます。配列を扱う際には、要素番号を取得する必要があるので、マスターしていきましょう。

はじめに

この記事では、配列の要素数や長さを取得する方法について、ご紹介します。

配列の大きさや長さを取得するには、「UBound」や「LBound」を使います。

配列を扱う場合には、配列の大きさや長さが必要になってくるので、取得する方法についてマスターしていきましょう。

では、配列の要素数や長さを取得する方法について、解説していきます。

この記事で紹介すること

  • 配列の要素数を取得
  • 配列の長さを取得
  • UBoundの使いどころ

目次から見たい項目へ移動すると便利ですよ。

目次

VBAで配列の要素数を取得

VBAで、配列の要素数を取得するには、「UBound」と「LBound」があります。

UBoundとLBoundは、「最大」と「最小」の要素番号を取得することができます。

最大の要素番号(UBound)

最大の要素番号を取得する方法です。

1次元配列

1次元配列で、最大の要素番号を取得するイメージです。

最大の要素番号のイメージ

1次元の最大の要素番号を取得するには、次のように入力します。

  • 最大の要素番号:UBound(一次元配列)

という感じです。

2次元配列

2次元配列で、最大の要素番号を取得するイメージです。

2次元配列で、最大の要素番号を取得するイメージ

2次元配列で、最大の要素番号を取得するには、「UBound(2次元配列, 次元)」と入力します。

  • 1次元で、最大の要素番号:UBound(2次元配列, 1)
  • 2次元で、最大の要素番号:UBound(2次元配列, 2)

というような感じです。

最小の要素番号(LBound)

配列の要素で、最小値を取得する方法です。

1次元配列

1次元配列で、最小の要素番号を取得するイメージは次のようになります。

1次元配列で、最小の要素番号を取得するイメージ

1次元配列で、最小の要素番号を取得するには、「LBound(1次元配列)」と入力します。

  • 最小の要素番号:LBound(1次元配列)

というような感じです。

2次元配列

2次元配列で、最小の要素番号を取得するイメージは次のようになります。

2次元配列で、最小の要素番号を取得するイメージ

2次元配列で、それぞれの最小の要素番号を取得するには、「LBound(2次元配列, 次元)」と入力します。

  • 1次元で、最小の要素番号:LBound(2次元配列, 1)
  • 2次元で、最小の要素番号:LBound(2次元配列, 2)

というような感じです。

では、VBAコードを実際に作成して実行してみます。

1次元配列で要素数を取得

1次元配列で、最大と最小の要素番号を取得してみます。

a(3)の要素数

0番目からスタートする配列「a(3)」で、最大と最小の要素番号を取得してみます。

Sub TEST1()
    
    Dim a
    ReDim a(3) '0番目スタートの1次元配列
    
    MsgBox "最大の要素番号:" & UBound(a) '3
    MsgBox "最小の要素番号:" & LBound(a) '0
    
End Sub

では実行してみます。

最大値

Uboundで最大の要素番号を取得

結果は、「最大の要素番号:3」となりました。

最小値

LBoundで最小値を取得

結果は、「最小の要素番号:0」となりました。

a(1 to 3)の要素数

つづいて、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

では、実行してみます。

最大値

UBoundで最大値を取得

結果は、「最大の要素番号:3」となりました。

最小値

LBoundで最小値を取得

結果は、「最小の要素番号:1」となりました。

1次元配列の場合は、こんな感じで、配列の最大と最小の要素番号を取得することができます。

2次元配列で要素数を取得

次は、2次元配列で要素数を取得してみます。

2次元以上の配列では、UBoundやLBoundに、「次元」を指定します。

『a = UBound(2次元配列, 次元)』

という感じです。

a(2, 3)の要素数

では、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次元で最大の要素番号

UBoundを使って、1次元で、最大の要素番号を取得

結果は、「1次元で、最大の要素番号:2」となりました。

1次元で最小の要素番号

LBoundを使って、1次元で、最小の要素番号を取得

結果は、「1次元で、最小の要素番号:0」となりました。

2次元で最大の要素番号

UBoundを使って、2次元で、最大の要素番号を取得

結果は、「2次元で、最大の要素番号:3」となりました。

2次元で最小の要素番号

LBoundを使って、2次元で最小の要素番号を取得

結果は、「2次元で、最小の要素番号:0」となりました。

という感じで、2次元以上の配列で、最大や最小の要素番号を取得するには、「次元」を設定します。

a(1 to 2, 1 to 3)の要素数

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次元で最大の要素番号

UBoundを使って1次元で最大の要素番号を取得

結果は、「1次元で、最大の要素番号:2」となりました。

1次元で最小の要素番号

LBoundを使って1次元で、最小の要素番号を取得

結果は、「1次元で、最小の要素番号:1」となりました。

2次元で最大の要素番号

UBoundを使って2次元で、最大の要素番号を取得

結果は、「2次元で、最大の要素番号:3」となりました。

2次元で最小の要素番号

LBoundを使って2次元で、最小の要素番号を取得

結果は、「2次元で、最小の要素番号:1」となりました。

配列の長さを取得

配列の長さを取得する方法について、ご紹介します。

配列の長さの取得方法

配列の長さを取得するには、「UBound」と「LBound」を組み合わせます。

次のように、UBoundとLBoundを組み合わせます。

『長さ = UBound(配列) - LBound(配列) + 1』

最大と最小の要素数を取得して、その差分をとって、1を足しています。

ちょっと面倒ですね。

だけど、配列が0番目スタートでも、1番目スタートでも、正しく配列の長さを取得できます。

では、実際に配列の長さを取得してみます。

a(3)の長さ

「a(3)」で宣言された配列の長さを取得するVBAコードです。

Sub TEST5()
    
    Dim a
    ReDim a(3) '0番目スタートの1次元配列
    
    '配列の長さを取得
    b = UBound(a) - LBound(a) + 1
    
    MsgBox b & " 個"
    
End Sub

実行してみます。

a(3)の長さを取得

Redim a(3)で宣言された配列の長さを取得

結果は、「4」個となりました。

a(0)、a(1)、a(2)、a(3)で、4個なので、正しく配列の長さを取得できています。

a(1 to 3)の長さ

次は「a(1 to 3)」で、配列の長さを取得してみます。

VBAコードは次のようになります。

Sub TEST6()
    
    Dim a
    ReDim a(1 To 3) '1番目スタートの1次元配列
    
    '配列の長さを取得
    b = UBound(a) - LBound(a) + 1
    
    MsgBox b & " 個"
    
End Sub

配列の長さを取得するVBAコードは、同じです。

実行してみます。

a(1 to 3)の長さを取得

a(1 to 3)で宣言された配列の長さを取得

結果は、「3」個となりました。

a(1)、a(2)、a(3)で、3個なので、正しく配列の長さを取得できています。

UBoundを使って配列をセルに貼り付け

セル範囲から取得した配列の大きさを取得する際に、「UBound」が使えます。

配列をセルに貼り付け

セルから取得した配列を、別のセルに貼り付ける、ということをやってみます。

まず、「UBound」を使わないで、配列をセルに貼り付けてみます。

Sub TEST7()
    
    'セルから配列を取得
    a = ActiveSheet.Range("A1").CurrentRegion
    
    '配列をセルに貼り付け
    ActiveSheet.Range("E1:G3") = a '←ここが面倒
    
End Sub

手順は、

  • ①セル範囲から配列を取得
  • ②配列をセルに貼り付け

という流れです。

実行してみます。

配列をセルに貼り付け

配列をセルに貼り付けた結果

とりあえず、配列をセルに貼り付けられました。

UBoundを使わない場合は、貼り付け先のセル範囲を「Range("E1:G3")」というように、指定する必要があります。

なので、配列の大きさが変わるたびに、VBAコードを変更する必要があるため、ちょっと面倒です。

UBoundを使うと便利

配列を貼り付ける際に、UBoundを使ってみます。

UBoundを使うと、配列を貼り付ける際にかなり便利になります。

セルの値を配列に格納して、UBoundを使って配列を貼り付けるVBAコードです。

Sub TEST8()
    
    'セルから配列を取得
    a = ActiveSheet.Range("A1").CurrentRegion
    
    '配列をセルに貼り付け
    ActiveSheet.Range("E1").Resize(UBound(a, 1), UBound(a, 2)) = a '←これが便利
    
End Sub

ポイントは、貼り付ける際に、セル範囲の大きさを、UBoundを使って指定しています。

これで、配列の大きさが変更されても、同じVBAコードで、配列をセルに貼り付けることができます。

では、実行してみます。

配列をセルに貼り付け

UBoundを使って配列をセルに貼り付けた結果

配列をセルに貼り付けることができました。

配列の大きさが変更されても、同じVBAコードで貼り付けができるので、便利です。

おわりに

この記事では、配列の要素数や長さを取得する方法について、ご紹介しました。

配列の大きさや長さを取得するには、「UBound」や「LBound」を使います。

配列を扱う場合には、配列の要素数や長さが必要になってくるので、取得する方法についてマスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す