エクセルVBAで選択した範囲の文字の一部を置換する方法です。
目次
文字の一部を置換する
「/」を「・」に置換する例です。
例のように文字の一カ所のみの置換であれば、エクセルの一般機能でも簡単にできます。
(1)置換したいデータを選択します。
(2)Ctrlキーを押しながら「H」を押します。(Ctrl + H)
(3)検索する文字列に「/」を入力し、置換後の文字列に「・」を入力し、「すべて置換」をクリックします。
置換後の画面です。
サンプルコード
Replace関数とReplaceメゾットの例です。
Replace関数
検索指定した文字を、置換文字に置き換えます。
Replace(文字列,検索文字列,置換文字列)
次の2つの方法の場合、前者の方が早いです。
- 配列とFor~Nextステートメント
- For~Nextステートメント
5万件のデータでテストした結果
- 配列とFor~Nextステートメント:0秒
- For~Nextステートメント:9秒
スクロールできます
引数 | 説明 |
---|---|
expression | 文字列 |
find | 検索文字列 |
replace | 置換文字列 |
start | 検索開始位置(省略可能) |
count | 置換する回数(省略可能) |
compare | 比較種類(省略可能) |
配列とFor~Nextステートメント
配列を使った方法は処理が早いです。
動きがわかりやすくなるように、データの選択範囲を以下のようにしました。
置換したいデータは、セルB5~セルB9です。
置換後の画面です。
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 |
SearchOrder | xlByRows xlByColumns |
MatchCase | 大文字と小文字を区別する |
MatchByte | 半角と全角を区別する |
SearchFormat | 検索書式 |
ReplaceFormat | 置換書式 |