選択範囲だけを置換する・Replace関数とReplaceメゾット

エクセルVBAで選択した範囲の文字の一部を置換する方法です。

目次

文字の一部を置換する

「/」を「・」に置換する例です。

文字の置換

例のように文字の一カ所のみの置換であれば、エクセルの一般機能でも簡単にできます。

(1)置換したいデータを選択します。

(2)Ctrlキーを押しながら「H」を押します。(Ctrl + H)

(3)検索する文字列に「/」を入力し、置換後の文字列に「・」を入力し、「すべて置換」をクリックします。

置換後の画面です。

サンプルコード

Replace関数とReplaceメゾットの例です。

Replace関数

検索指定した文字を、置換文字に置き換えます。

Replace(文字列,検索文字列,置換文字列)

次の2つの方法の場合、前者の方が早いです。

  1. 配列とFor~Nextステートメント
  2. For~Nextステートメント

5万件のデータでテストした結果

  1. 配列とFor~Nextステートメント:0秒
  2. For~Nextステートメント:9秒
スクロールできます
引数説明
expression文字列
find検索文字列
replace置換文字列
start検索開始位置(省略可能)
count置換する回数(省略可能)
compare比較種類(省略可能)

配列とFor~Nextステートメント

配列を使った方法は処理が早いです。

動きがわかりやすくなるように、データの選択範囲を以下のようにしました。

置換したいデータは、セルB5~セルB9です。

選択範囲

置換後の画面です。

置換後

選択範囲は連続する1列です。それ以外の場合は、エラーが起きます。

Sub sample1()
    Dim i As Long
    Dim myStr As Variant

    myStr = Selection
    
    For i = LBound(myStr) To UBound(myStr)
       myStr(i, 1) = Replace(myStr(i, 1), "/", "・")
    Next i
    
    Selection = myStr 
End Sub
  • 選択範囲(selection)のデータを配列に格納します。
    Variant型の変数は、配列宣言をしなくても配列に格納できます。
    配列のサイズ指定は不要。
  • For~Nextステートメントを使って文字を置換する。
  • 置換したデータを選択した範囲に入れる。

5行目「myStr = Selection」まで実行した後のローカルウィンドウです。配列に選択したデータがセットされています。

ローカルウィンドウ

11行目「Selection = myStr」まで実行した後のローカルウィンドウの画面です。

ローカルウィンドウ

For~Nextステートメント

文字変換のサンプルの一文を変えた例です。置換対象のデータが多いと処理が少し遅いです。

選択範囲の全角文字と半角文字の変換

Sub sample2()
    Dim i As Long
    For i = Selection(1).Row To Selection(Selection.Count).Row
        Cells(i, 1) = Replace(Cells(i, 1), "/", "・")
    Next i
End Sub

Replaceメゾット

引数を省略した例です。

Sub sample3()
    With Selection
        .Replace "/", "・"
    End With
End Sub

検索と置換ダイアログの設定値を変更している場合は、思った通りの結果にならないことがあります。

例えば、マクロの実行前に、検索と置換を使用していてオプションの「セル内容が完全に同一であるものを検索する」にチェックを入れていた場合、上記のサンプルでは置換できません。

検索と置換のダイアログ

確実な置換をするには、引数を指定します。

スクロールできます
引数説明
What検索する値
Replacement置換後の値
LookAtセル内容が完全に同一であるものを検索する
xlWhole
xlPart
SearchOrderxlByRows
xlByColumns
MatchCase大文字と小文字を区別する
MatchByte半角と全角を区別する
SearchFormat検索書式
ReplaceFormat置換書式
目次