セルに入力されたデータの一部を置換するには、Replaceメソッドを使用する。何万件もあるデータをいちいち手動で書き換えていたら、それこそ時間ばかりが経過して日が暮れる。非効率この上ない。そういったデータを書き換える場合にReplaceメソッドは力を発揮する。
Replaceメソッドの書式は下記の通りだ。
Rangeオブジェクト.Replace What:={検索する文字(必須)},Replacement:={置き換える文字(必須)},LookAt:={LookAt}
設定値 | 説明 |
---|---|
xlWhole | 完全一致 |
xlPart | 部分一致(既定値) |
図7のようなデータがあったとしよう。
図7の「宇和島蜜柑」の名前を「宇和島鯛めし」に置換してみる。「検索する文字列」の「D3」セルに「検索する文字列」を入力して「実行」ボタンをクリックする。入力ダイアログボックスが表示されるので、「鯛めし」と入力して「OK」ボタンをクリックする。
すると、「宇和島蜜柑」が「宇和島鯛めし」に全て置換される。{LookAt}に指定する値は部分一致の「xlPart」を指定している。これは既定値であるため、指定しなくても構わない。
この置換を行うマクロはリスト5のようになる
Sub 置換() If Range("D3").Value = "" Then MsgBox "検索文字列を入力してください。" Else Dim resultStr As String resultStr = InputBox( _ Prompt:="置換文字列を入力してください。", _ Title:="検索文文字列は=" & Range("D3").Value) Range("D7:D19").Replace _ What:=Range("D3").Value, _ Replacement:=resultStr, _ LookAt:=xlPart End If End Sub
「検索する文字列」が入力されていない場合(3行目)は、警告するメッセージボックスを表示させる(4行目)。入力されていた場合(5行目)は、置換文字列を入力する入力ボックスを、「InputBox」を用いて表示させる(7〜9行目)。
Replaceメソッドの「What」にD3セルの値を指定し(11行目)、「Replacement」に入力ボックスに入力した値を保持している変数resultStrの値を指定する(12行目)。「LookAt」には「部分一致」を表す「xlPart」を指定した(13行目)。
実行結果は図8のようになる。
なお、「読み」は以前の「うわじまみかん」のままになっている。これも「うわじまたいめし」に置換する必要がある。これについては、ぜひ読者の皆さまに実際に自分でリストを見ながらVBEを起動してマクロを書くことに挑戦していただきたい。
次は、「検索する文字列」に入力された文字列を検索して、その該当するセルの背景色を変更させてみる。セルの背景色など「セルの書式」(ここでの「書式」は、表示形式)については、連載第5回の「セルの数値、フォント、文字位置、背景色、けい線など表示形式/書式設定の使い方」を参照してほしい。
検索した「セルの書式」を変更するには、ReplaceFormatプロパティを使用する。ReplaceFormatプロパティの書式(使い方)は下記の通りだ。どのセルが変更の対象となったかを一目瞭然で確認できる。
Applicationオブジェクト.ReplaceFormat.Font.FontStyle={フォントのスタイル}
Applicationオブジェクト.ReplaceFormat.Interior.Color={セルの塗りつぶし色}
Wnd With
では、図8の「宇和島鯛めし」の文字を「宇和島蜜柑」に置換し、文字を「斜体」に、セルの塗りつぶしを「赤」にしてみよう。その後「書式を元に戻す」ボタンで元の状態に戻す。マクロはリスト6のようになる。
Sub 検索結果のセルの書式を変える() With Application.ReplaceFormat .Font.FontStyle = "Italic" .Interior.Color = RGB(240, 0, 0) End With If Range("D3").Value = "" Then MsgBox "検索文字列を入力してください。" Else Dim resultStr As String resultStr = InputBox( _ Prompt:="置換文字列を入力してください。", _ Title:="検索文文字列は=" & Range("D3").Value) Range("D7:D19").Replace _ What:=Range("D3").Value, _ Replacement:=resultStr, _ LookAt:=xlPart, _ ReplaceFormat:=True End If End Sub
Application.ReplaceFormatで書式を設定しておく(2〜5行目)。置換した後の文字を「斜体」にし(3行目)、セルの塗りつぶし色を「赤」にしておく(4行目)。その後、検索と置換を実行し、「ReplaceFormat:=True」と指定して書式の適用を実行する。
実行した画面は図9になる。
次に「書式を元に戻す」ボタンで、「宇和島蜜柑」を「宇和島鯛めし」に置換して、セルの書式を元に戻す。マクロはリスト7だ。
Sub 書式を元に戻す() With Application.ReplaceFormat .Font.FontStyle = "Normal" .Interior.Color = RGB(255, 255, 255) End With If Range("D3").Value = "" Then MsgBox "検索文字列を入力してください。" Else Dim resultStr As String resultStr = InputBox( Prompt:="置換文字列を入力して下さい。", _ Title:="検索文文字列は=" & Range("D3").Value) Range("D7:D19").Replace What:=Range("D3").Value, _ Replacement:=resultStr, _ LookAt:=xlPart, _ ReplaceFormat:=True End If End Sub
リスト6とほとんど同じ内容なので説明は省略する。ReplaceFormatプロパティで、文字のスタイルを「Normal」に(3行目)、セルの塗りつぶし色を「白」にしている(4行目)点が、リスト6と異なる点だ。実行すると、図10のようになる。
Copyright © ITmedia, Inc. All Rights Reserved.