Excel VBAを使っていると、「ある変数に格納されたデータの個数を数えたい」「変数の値の合計を計算したい」といった場面がよくあります。とくに配列やコレクションを扱うときには、データ数のカウントや合計値の取得は基本中の基本です。
本記事では、初心者にもわかりやすく、Excel VBAで変数のデータ数を数える方法や合計する方法を、サンプルコード付きで解説します。配列やコレクションを使った具体例も紹介していますので、業務でVBAを活用したい方はぜひ最後までご覧ください。
変数に格納された複数の値とは?
VBAでは、1つの変数に対して複数の値を格納する方法があります。代表的なのが「配列」と「コレクション」です。
配列(Array)
配列は同じデータ型の値を順番に並べて格納できる構造です。たとえば、10人分の売上データを入れるといったケースでよく使われます。
Dim 売上(1 To 5) As Integer
売上(1) = 100
売上(2) = 200
売上(3) = 150
売上(4) = 300
売上(5) = 250
コレクション(Collection)
コレクションは、異なるデータ型でも格納可能で、柔軟性の高いデータ構造です。
Dim 商品 As New Collection
商品.Add "りんご"
商品.Add "バナナ"
商品.Add "みかん"
このような「複数の値」を対象に、個数をカウントしたり、合計を出したりする方法を見ていきましょう。
配列のデータ個数を数える方法
配列に格納された要素数を取得するには、UBound
とLBound
を使うのが定番です。
Dim 数値(1 To 5) As Integer
Dim 個数 As Integer
' 配列にデータを代入
数値(1) = 10
数値(2) = 20
数値(3) = 30
数値(4) = 40
数値(5) = 50
' 個数を数える
個数 = UBound(数値) - LBound(数値) + 1
MsgBox "データの個数は " & 個数 & " 個です。"
UBound
は配列の最大インデックス、LBound
は最小インデックスを返します。その差を取って+1することで、配列内の要素数を計算できます。
配列の値を合計する方法
次に、配列の中身の合計値を求めてみましょう。ループ処理を使うのが一般的です。
Dim i As Integer
Dim 合計 As Integer
Dim 数値(1 To 5) As Integer
' 配列にデータを代入
数値(1) = 10
数値(2) = 20
数値(3) = 30
数値(4) = 40
数値(5) = 50
' 合計を求める
合計 = 0
For i = LBound(数値) To UBound(数値)
合計 = 合計 + 数値(i)
Next i
MsgBox "合計値は " & 合計 & " です。"
For
ループで配列の最小から最大インデックスまで回し、1つずつ合計していきます。
コレクションのデータ個数を数える方法
コレクションの場合は、Count
プロパティを使えば簡単に個数がわかります。
Dim 商品 As New Collection
商品.Add "りんご"
商品.Add "バナナ"
商品.Add "みかん"
MsgBox "商品数は " & 商品.Count & " 個です。"
コレクションは、商品.Count
のように書くだけで、要素数を取得できます。
コレクションの中身を合計する方法
数値をコレクションに格納している場合、For Each
ループを使って合計できます。
Dim 売上 As New Collection
Dim item As Variant
Dim 合計 As Integer
' コレクションに数値を追加
売上.Add 100
売上.Add 200
売上.Add 300
合計 = 0
For Each item In 売上
合計 = 合計 + item
Next item
MsgBox "売上の合計は " & 合計 & " 円です。"
For Each
構文は、配列にも使えますが、コレクションとの相性が特によく、簡潔に書けます。
Split関数を使った個数と合計の取得
文字列から配列を作るにはSplit
関数が便利です。
Dim str As String
Dim arr() As String
Dim 合計 As Integer
Dim i As Integer
str = "10,20,30,40,50"
arr = Split(str, ",")
MsgBox "個数は " & UBound(arr) - LBound(arr) + 1
合計 = 0
For i = LBound(arr) To UBound(arr)
合計 = 合計 + Val(arr(i))
Next i
MsgBox "合計は " & 合計
Split
は文字列をカンマなどで分割して配列に変換する関数です。CSV形式のデータを扱う時に便利です。
2次元配列での個数と合計の取得
2次元配列を使っている場合、ループを2重にして処理する必要があります。
Dim i As Integer, j As Integer
Dim 合計 As Integer
Dim データ(1 To 2, 1 To 3) As Integer
' データを格納
データ(1, 1) = 10
データ(1, 2) = 20
データ(1, 3) = 30
データ(2, 1) = 40
データ(2, 2) = 50
データ(2, 3) = 60
合計 = 0
For i = 1 To 2
For j = 1 To 3
合計 = 合計 + データ(i, j)
Next j
Next i
MsgBox "合計は " & 合計
行×列のデータを扱うときには、2重ループを使って1つずつ処理するのが基本です。
まとめ:用途に応じて構造を選び、処理しよう
この記事では、Excel VBAで変数に格納されたデータの個数を数える方法と、合計を求める方法を詳しく解説しました。以下にまとめます。
- 配列の個数は
UBound - LBound + 1
で求める - 配列の合計は
For
ループで順番に加算 - コレクションの個数は
.Count
プロパティで取得 - コレクションの合計は
For Each
で処理 - Split関数で文字列から配列に変換も便利
- 2次元配列では2重ループを使う
これらをマスターすれば、データ処理が格段に楽になります。実際の業務に合わせて、構造を選んで使いこなしてみてください。
VBAは慣れれば非常に強力なツールになりますので、ぜひ繰り返し練習して習得してください!