今回はVBAで「何かしらの件数をカウントする方法」と「数値を合計する方法」、「文字列を結合する方法」を説明します。
例えば、名簿リストの中から「田中」という名字の人が何人いるかカウントする処理も行うことができます。
また、別々のセルに存在する「名字」と「名前」を結合することもできます。
カウントしたり、結合したりといった処理はエクセルの関数を用いて行うこともできますが、VBAで処理することも可能です。
そこで今回は、これらの処理をVBAで実行するにはどのようなコードを書くのか、説明していきたいと思います。
VBAでカウントするには
何らかの数値や文字列を数える(カウントする)際には変数を上手く活用しましょう!
そのためには、カウントする際の変数の用い方を理解する必要があります。
【エクセルVBA初心者講座】変数の利用方法|モジュールレベル変数とパブリック変数とは
続きを見る
変数について基礎から学びたい人は上記の記事を参考にしてみてください。
変数の使い方
まず最初に、下記のVBAの実行結果はどうなるでしょうか?
Sub Test1()
Dim A As Long
A = 10 -①
A = A + 10 -②
A = A + 10 -③
MsgBox A
End Sub
①〜③のコードを順に見ていきましょう。
まず①では変数Aに10が代入されています。
②では「10」が代入された変数Aに「10」を足した「20」が計算結果となります。
③では「20」が代入された変数Aに「10」を足した「30」が計算結果となります。
つまり、答えはメッセージボックスに「30」が表示されるということです。
考え方のポイントは2つあります。
1つ目は「=」の右側を先に計算することです。
上のVBAの場合「A+10」の部分を先に計算することでイメージしやすくなると思います。
2つ目が変数を宣言した直後は初期値が格納されていることです。
IntegerやLongなどの数値を格納する変数では「0」が初期値、Stringなどの文字列型の変数では「空欄(””)」が初期値となります。
そのため、上の例だと変数Aを宣言直後は「0」が格納されていることになります。
件数のカウント例
では、実践でどのような使い方をするのか、例を用いてみていきたいと思います。
上図のデータから性別が「女」の件数をカウントしてみましょう。
Sub Test2()
Dim I As Long, A As Long
For I = 2 To 7
If Cells(I, 2) = "女" Then
A = A + 1
End If
Next I
MsgBox A
End Sub
この場合、B列のセルが「女」だった場合に「A = A + 1」が実行されます。
上の例だとB列に「女」が4個あるので「A = A + 1」が4回実行されて、結果は4になります。
VBAで合計するには
それでは先程の図1のC列(成績)を合計するにはどうしたらいいでしょうか?
カウントするときには変数を「A = A + 1」として+1ずつすることで数えていましたが、合計する場合は変数を「A = A + 加えたい数値」となるようにします。
※このとき変数Aは累計になっています
例えば、先程の図1のデータから、B列が「女」だったときのC列を合計してみます。
Sub Test2()
Dim I As Long, A As Long
For I = 2 To 7
If Cells(I, 3) = "女" Then
A = A + Cells(I,3)
End If
Next I
MsgBox A
End Sub
性別が「女」は3、4、5、7行目に存在するため、実行されるVBAのコードは以下の4つです。
- A = A + Cells (3, 3)
- A = A + Cells (4, 3)
- A = A + Cells (5, 3)
- A = A + Cells (7, 3)
これに数字を当てはめると以下の通りです。
- A = A + 30
- A = A + 50
- A = A + 80
- A = A + 60
変数Aには最初「0」が代入されていることを考慮して計算すると結果は「220」になりますね。
VBAで文字列を結合するには
文字列を結合する際には、&演算子を利用します。
例えば、
Dim A as String
A = "桃" & "太郎"
これで変数Aに「桃太郎」という文字列が代入されます。
エクセル上でも「&」を用いて文字列の結合ができるのでイメージしやすいのではないでしょうか。
他にも実践的な例を見ていきたいと思います。
上の図2に記載されている年・月・日を結合し、結合した結果をD列に表示したいと思います。
Sub TEST3()
Dim I As Long
For I = 2 To 6
Cells(I, 4) = Cells(I, 1) & Cells(I, 2) & Cells(I, 3)
Next I
End Sub
Test3の処理では2行目から6行目について、「A列の文字列 & B列の文字列 & C列の文字列」で結合した文字列をD列に転記しています。
考え方のポイントは、最終的に結合した結果がどのような文字列になるのかをしっかりイメージした上でコードを書いていくことです。
これさえ押さえてしまえば、あとはパズルを組み立てるように「&」を用いて結合していくのみです。
カウント・合計方法/文字列の結合のおさらい
VBAで件数をカウントしたり数値を合計する方法、文字列を結合する方法を説明しました。
- カウントする際のポイント
「=」の右側を先に計算する。
変数を宣言した直後は初期値が格納されている。 - 合計する際のポイント
変数を「A = A + 加えたい数値」となるようにする。 - 結合する際のポイント
最終的に結合した結果がどのような文字列になるのかイメージする。
今回紹介した内容はどれも簡単な処理ですが、使用頻度は高いと思うのでしっかり理解して自分のものにしておきましょう!
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介
続きを見る