サイトアイコン エントレ|演劇動画ニュース

エクセルマクロ(EXCEL VBA) その6 繰り返し作業の練習(For Next)

エクセルマクロ(EXCEL VBA)

For Nextの練習

前回、For Nextを使って名前に「様」を付けるマクロを作りました。
For Nextでの繰り返し作業は、とても重要なのでもう少し練習してみましょう。

 
肩書と名前を結合するマクロ

演劇のスタッフには、作、演出、音楽、美術・・・などの肩書が付き物です。

そこで、こういうリストがあったとします。
このリストをCSVでダウンロード

このC2のところに、
【作】織田信長

と入るようにしてみましょう。
前回の記事を参考にマクロを作ってみてください。

 
まずは、A2とB2を結合して、C2に入るようにしてみましょう。

C2は、CellsでいうとCells(2, 3)でしたよね。
A2はCells(2, 1)で、B2はCells(2, 2)なので、

Cells(2, 3) = Cells(2, 1) + Cells(2, 2)

と書けば良さそうです。

これを実行すると、

うまくいきました。
C2に、作織田信長 と入れることができました!

でも、本当に入れたいのは【作】織田信長 でしたので、このマクロにさらに追記して行きましょう。
様を追加したときは、”様” というふうにダブルクォーテーションでくくって、「+」でつなげれば良かったわけなので、

Cells(2, 3) = "【" + Cells(2, 1) + "】" + Cells(2, 2)

こうしてみましょう。

これを実行すると、

うまく行きました!
あとは、9行目まで繰り返せばできそうですね。
For Nextを使って、繰り返し作業の指示を出してみてください。

 
僕はこう書きました。

 

 
無事に、肩書に【】を付けて、氏名と結合されたものを、隣の列に書き入れることができました。

 
これで、たとえスタッフが100人いても同じ方法で肩書をくっつけることができます。

次回は、For Nextと同じくらいとても重要な If による条件分岐について書きます。

 
今回の最終的なコード

Sub add_katagaki()
For i = 2 To 9
    Cells(i, 3) = "【" + Cells(i, 1) + "】" + Cells(i, 2)
Next
End Sub

宿題-6

同じ肩書のスタッフが2人以上いる場合は、どうしたら良いでしょう。

こうなるようにしてみてください。

いろいろな解決方法が考えられると思うので、是非取り組んでみてください。

 

▼ クリックで解説を表示

解説

まず、一番人数の多い9行目に着目して、文字列を結合してみます。
結果を書き入れたいE9はCells(9, 5)なので、単純に結合を表現すると

Cells(9, 5) = Cells(9, 1) + Cells(9, 2) + Cells(9, 3) + Cells(9, 4)

これで結果は、

とても読みずらいですが、とりあえず結合はできました。
あとは、読みやすくなるように、【】と、全角スペースを間に入れていきましょう。

Cells(9, 5) = "【" + Cells(9, 1) + "】" + Cells(9, 2) + " " + Cells(9, 3) + " " + Cells(9, 4)

これで実行すると、

読みやすくなりました。
では、For Nextを使って2行目から9行目まで繰り返しましょう。

For i = 2 To 9
    Cells(i, 5) = "【" + Cells(i, 1) + "】" + Cells(i, 2) + " " + Cells(i, 3) + " " + Cells(i, 4)
Next

これで一見大丈夫なんですが、「【作】織田信長  」と、右側に全角スペースが2つ入っています。
エクセルには便利な《文字列の最後のスペースを削除する》というコマンドRTrimがあるのでそれを使いましょう。
RTrim(”【作】織田信長  ”)とやると、右側のスペースを削除できて「【作】織田信長」こうできる、ということです。
今回は、同じE列に上書きしたいので、こちらを追加で書き込みます。

For i = 2 To 9
    Cells(i, 5) = RTrim(Cells(i, 5))
Next

これで余分なスペースも削除できました。

最終的なコードはこちらです。

Sub hw06_katagaki()
'文字列の結合
For i = 2 To 9
    Cells(i, 5) = "【" + Cells(i, 1) + "】" + Cells(i, 2) + " " + Cells(i, 3) + " " + Cells(i, 4)
Next

'右側の余計な全角スペースを削除
For i = 2 To 9
    Cells(i, 5) = RTrim(Cells(i, 5))
Next
End Sub

答えファイルのダウンロード

 
エクセルマクロ(EXCEL VBA) その7 Ifで条件分岐(If)

(文:森脇孝/エントレ)

モバイルバージョンを終了