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)
(文:森脇孝/エントレ)