エクセルマクロ(EXCEL VBA)

エクセルマクロ(EXCEL VBA) その18 文字列の置換(Replace)

文字列の置換

今回は文字列の置換についてご紹介します。
例えば、公演アンケートを取ったときにこんな結果だったとします。

アンケート結果

この表の数値を☆に置き換えてみましょう。
マクロで文字列を置換したいときには、Replaceという関数を使います。

まずは、シートをコピーして名前を付けた上で、
B4の 1 を ☆ に置き換えてみましょう。
B4はCells(4, 2)なので、

ActiveSheet.Copy after:=ActiveSheet
ActiveSheet.Name = "置き換え後"

Cells(4, 2) = Replace(Cells(4, 2), "1", "☆")

とします。

Replaceの書き方

ここで、青線で書いた部分が「検索対象の文字列」・・・今回は 1
オレンジ線の部分が「置き換え対象の文字列」・・・今回は 1
そして緑線の部分が「置き換え後の文字列」・・・今回は ☆

右辺が置き換わったので、それを元のセルに入れ直すことで、『置換』できるというわけです。

これを実行すると

☆に置換

1を☆に置換できました!

 
ということで、おなじみのForNextを使って、2行目から最終行まで置き換えを繰り返せばいいですね。
最終行をlastRowとすると、

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lastRow
 Cells(i, 2) = Replace(Cells(i, 2), "1", "☆")
Next

これで、このアンケートの中に1があれば、☆に置き換えてくれるはずです。

 
ということで、2は☆☆、3は☆☆☆、4は☆☆☆☆、5は☆☆☆☆☆に置き換えましょう。

For i = 2 To lastRow
 Cells(i, 2) = Replace(Cells(i, 2), "1", "☆")
 Cells(i, 2) = Replace(Cells(i, 2), "2", "☆☆")
 Cells(i, 2) = Replace(Cells(i, 2), "3", "☆☆☆")
 Cells(i, 2) = Replace(Cells(i, 2), "4", "☆☆☆☆")
 Cells(i, 2) = Replace(Cells(i, 2), "5", "☆☆☆☆☆")
Next

なんかもうちょっとカッコよく書けるような気もしますが、わかりやすいの見逃してください。

星を入れる

これを実行すると、

☆に置き換えられた

これを使えば、☆を数字に置き換えることもできます。
 

今回の最終的なコード

Sub star_chikan()
ActiveSheet.Copy after:=ActiveSheet
ActiveSheet.Name = "置き換え後"

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lastRow
  Cells(i, 2) = Replace(Cells(i, 2), "1", "☆")
  Cells(i, 2) = Replace(Cells(i, 2), "2", "☆☆")
  Cells(i, 2) = Replace(Cells(i, 2), "3", "☆☆☆")
  Cells(i, 2) = Replace(Cells(i, 2), "4", "☆☆☆☆")
  Cells(i, 2) = Replace(Cells(i, 2), "5", "☆☆☆☆☆")
Next

End Sub

宿題-18
氏名の列を参照して、「田」という感じを「★」に置換してください。
さらに、「野」と「松」を消してください。

エクセルマクロ(EXCEL VBA) その19 文字列の検索(Find)

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

関連記事一覧