VBAの初心者が初めにVBAに苦労するのがここです。
というのも「ワークシート関数」(普通のExcelの関数)と「VBAの関数」で機能が同じなのに名前が違うからです。実際私もそうでしたが、「そういうもんだ」と別々に覚えましょう。
VBAで置換をするための、簡単3ステップ
VBAはまだ得意じゃないけど、普通のExcelなら大丈夫という人も多いと思うので、まずReplace関数とワークシート関数からの比較から始めます。
VBAのコードは大活躍中の「マクロの自動記録」で取得しましょう。コードが分かればこっちのもので、いろいろな状況で試しながら知識を定着させていきましょう。
1.ワークシート関数から導入
ひとまず普通のExcelで置換をする時は「SUBSTITUTE」関数を使いますね。使い方は
=SUBSTITUTE(文字列, 検索文字列, 置換文字列)
です。実際の使用画面はこんな感じですかね。セルA1の文字列から「World」を探して、「Japan」で置換します。
なんとVBAでも関数の名前が違うだけで、SUBSTITUTE関数と同じように置換が出来ます!使用する関数はVBAのReplace関数です。
2.Replace関数を使おう
Range(“セル番地”).Valueで値を取得、設定できることは大丈夫でしょうか。ではマクロを書いていきましょう。
まずVBEを開きます。「Alt + F11」で開くのが一番シンプルかと思います。
今回書くコードは
Sub Sumple()
Range(“A1”).Value = Replace(Range(“A2”).Value, “World”, “Japan”)
End Sub
です。実行したら次のようになると思います。
3.全体を置換したい
今回はSUBSTITUTEをReplaceに変えるだけで出来る。という流れだったのでしませんでしたが、もちろん自動記録で記録されます。やってみましょう。「Hello World」さんには増殖してもらいました。
「Ctrl + H」で置換の画面を出し、必要な情報を埋めます。「すべて置換」をクリックしてください。
実行後はこんな感じ。
コードは次のようなものが記録されたと思います。
Sub Macro1()
‘
‘ Macro1 Macro
‘
‘
Cells.Replace What:=”World”, Replacement:=”Japan”, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
Cells.Replace What:=”World”, Replacement:=”Japan”, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
大事なのはCells.Repalaceのところです。ラベルは指定しても、しなくてもいいというルールから、Cells.Replace “World”, “Japan”に変更しても動くと思います。
今回はVBAでの置換を解説しました。実際記事の前半部分はVBAのReplace関数を使い、後半ではCellオブジェクトのReplaceメソッドを使っています。
Replace関数を単独で使うと、セルに代入してセルの値に反映させますが、CellオブジェクトのReplaceメソッドを使うと直接Cellの値が変更されます。置換して別の場所に転記したい場合はReplace関数を使いましょう。