For Nextを使って作業を繰り返す
『指示した内容を忠実に繰り返してくれる』というのがエクセルマクロを作る醍醐味です。
前回、Cellsでセルの指定ができるようになったので、いよいよ繰り返し作業をやってみましょう。
氏名に様をつけるプログラム
例えば、こういう氏名のリストがあったとします。
B2には、「様」をつけて、織田信長様にしたいと思った場合、どうすればよいでしょうか?
A列の全てをコピーしてB列に貼り付けてから一つずつ開いて「様」と打ち込んでいけばできますが、とても面倒です。
ということで、マクロで書けるようにしたいと思います。
まず、開発→Visual Basicを開き、
挿入→標準モジュールをクリックして空のウィンドウを出してください。
(このやり方は、その2で説明していますので、ご参照ください。)
そこに、
sub add_sama
と打ち込んでエンターを押しましょう。
そうすると、勝手にEnd Subが入ります。
このSubと、End Subの間に命令を打ち込んでいきましょう。
B2を狙いたいので、Cellsで言うと
cells(2,2)ですね。
なので、まずは
cells(2,2) = "様"
と打ち込んでみましょう。
これで、左上にある再生ボタンを押して実行してみてください。
エクセルの画面で、うまくB2に「様」が入りましたでしょうか?
でも、本当にやりたいのは、B2に「織田信長様」としたいわけなので、ここで【文字列の結合】を使って実現してみます。
マクロ作成画面に戻って、
Cells(2,2) = Cells(2,1) + "様"
と修正してみましょう。
これで実行すると、エクセルのB2が今度は「織田信長様」になったはずです。
うまく行きましたか?
無事にマクロで「様」を付けられました!
あとの二人も同じようにしたいときに、どうすればいいでしょうか?
豊臣秀吉のセルはCells(3, 1)ですし、徳川家康のセルはCells(4, 1)なので
こうやると良さそうですね。
ただこれだと、コピペするとの変わらないくらい、めちゃくちゃ手間がかかります・・・。
そこで、繰り返し作業の呪文の登場です。
こう打ち込んでください。
For i = 2 To 4
Cells(i, 2) = Cells(i, 1) + "様"
Next
先程、2, 3, 4と数字が増えていた箇所を「i」に置き換えて、
その前に、For i = 2 To 4
後ろにNextと付けました。
これで実行してみましょう。
うまく行きましたでしょうか。
これは、
For と、Nextで挟まれた処理を、i = 2 の時、i = 3 の時、i = 4 の時という風に、マクロちゃんが繰り返してくれたのです。
ちなみにもし、For i = 2 To 100 と書いていたら、100行目までマクロちゃんは「様」をつける作業をやってくれます。
試してみてください。
次回も、もう少しFor Nextに慣れるために練習してみましょう。
今回の最終的なコード
Sub add_sama()
For i = 2 To 4
Cells(i, 2) = Cells(i, 1) + "様"
Next
End Sub
宿題-5
氏名のリストと、For Nextを使って、B列に「こんにちは!○○様」と入るようにしてください。
解説
B2に、こんにちは!織田信長様 と入れるためには、文字列の結合を使って
Cells(2, 2) = "こんにちは!" + Cells(2, 1) + "様"
とすれば良いですね。
これを、For Nextを使って 2行目から4行目まで繰り返せば良いので、
Sub hw05_hello()
For i = 2 To 4
Cells(i, 2) = "こんにちは!" + Cells(i, 1) + "様"
Next
End Sub
とすれば完成です。
エクセルマクロ(EXCEL VBA) その6 繰り返し作業の練習(For Next)
(文:森脇孝/エントレ)