Replace関数

にメンテナンス済み

Excel を使用する業務において、データの置換や整形は頻繁に行われる作業の一つです。 特に大量のデータを扱う場合、手動で置換作業を行うのは時間がかかり、ミスも発生しやすくなります。 このような状況で、VBA のReplaceコマンドは非常に有用なツールとなります。

ここでは、VBA のReplace関数に焦点を当てて、その使い方や具体例を紹介します。

プレイグラウンドで試す

検索する文字列と置換後の文字列を変えると、何箇所が置換されるかと結果文字列が即座に更新されます。一致が複数ある場合に すべての箇所が置換される ことを実際に確認してみましょう。

Replace 関数を試す

検索文字列と置換後の文字列を変更して、どう置換されるかを確認できます。

置換
検索
Replace(expression, find, replace)

文字列内の find を replace に置換します。

文字位置 (1 始まり) と処理範囲
1a
2p
3p
4l
5e
6,
7b
8a
9n
10a
11n
12a
13,
14a
15p
16p
17l
18e
19,
20c
21h
22e
23r
24r
25y
結果String
orange,banana,orange,cherry
結果文字列のハイライト
1o
2r
3a
4n
5g
6e
7,
8b
9a
10n
11a
12n
13a
14,
15o
16r
17a
18n
19g
20e
21,
22c
23h
24e
25r
26r
27y

💡 2 箇所が置換されました。

生成された VBA コード
Dim s As String
s = "apple,banana,apple,cherry"
Debug.Print Replace(s, "apple", "orange")

Replaceコマンドの基本的な使い方

VBA のReplace関数の基本的な構文は以下の通りです:

Replace関数の構文
Replace(expression, find, replace[, start[, count[, compare]]])

各引数の意味は以下の通りです:

  • expression: 置換を行う対象の文字列
  • find: 検索する文字列
  • replace: 置換後の文字列
  • start: 検索を開始する位置(省略可能、デフォルトは 1)
  • count: 置換する回数(省略可能、デフォルトは-1 で全て置換)
  • compare: 比較方法(省略可能、0=バイナリ比較、1=テキスト比較)

一般的な使い方であれば、指定する引数はexpressionfindreplaceの 3 つだけで十分です。startcountcompareは必要に応じて指定します。

Replaceコマンドの具体例

基本的な文字列置換

Private Sub BasicReplace()
    Dim originalText As String
    Dim newText As String

    originalText = "Hello, World!"

    Debug.Print originalText ' Hello, World!

    newText = Replace(originalText, "World", "VBA")

    Debug.Print newText ' Hello, VBA!
End Sub

この例では、“Hello, World!”という文字列の”World”を”VBA”に置換しています。

セル内のデータ置換

続いて、Excel シートを操作する際にセル内のデータを置換する例を示します。

Private Sub ReplaceInCells()
    Dim ws As Worksheet
    Dim rng As Range

    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set range = ws.Range("A1:A10")

    For Each cell In range
        cell.Value = Replace(cell.Value, "old", "new")
    Next cell
End Sub

この例では、Sheet1 の A1:A10 の範囲内のセルで、“old”という文字列を”new”に置換しています。

大文字小文字を区別しない置換

Private Sub CaseInsensitiveReplace()
    Dim text As String
    Dim basicText As String
    Dim caseInsensitiveText As String

    text = "これはTEST目的のtestメッセージです"

    basicText = Replace(text, "test", "example")

    Debug.Print basicText ' これはTEST目的のexampleメッセージです

    caseInsensitiveText = Replace(text, "test", "example", 1, -1, vbTextCompare)

    Debug.Print caseInsensitiveText ' これはexample目的のexampleメッセージです
End Sub

引数を置換後の文字列までしか指定しなかった場合(デフォルトの設定)では、大文字小文字を区別して置換されます。 vbTextCompareを指定することで、大文字小文字を区別しない置換が可能です。

この例では、1 回目の置換では置き換えられなかった”TEST”という文字列を、大文字小文字を区別せずに”example”に置換しています。

複数の置換を連続して行う

Private Sub MultipleReplace()
    Dim text As String

    text = "赤いりんごと青いみかんと黄色いバナナ。"
    text = Replace(text, "赤い", "緑の")
    text = Replace(text, "青い", "赤い")
    text = Replace(text, "黄色い", "紫の")

    Debug.print text ' 緑のりんごと赤いみかんと紫のバナナ。
End Sub

この例では、複数の単語を順番に置換しています。

活用例

日付形式の統一

異なる形式で入力された日付を統一するケースを考えてみましょう。

Private Sub UnifyDateFormat()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range

    Set ws = ThisWorkbook.Sheets("DateData")
    Set rng = ws.UsedRange

    For Each cell In rng
        If IsDate(cell.Value) Then
            ' 日付を "yyyy/mm/dd" 形式に統一
            cell.Value = Format(cell.Value, "yyyy/mm/dd")
        Else
            ' スラッシュをハイフンに置換
            cell.Value = Replace(cell.Value, "/", "-")
            ' ピリオドをスラッシュに置換
            cell.Value = Replace(cell.Value, ".", "/")
        End If
    Next cell
End Sub

この例では、日付データが含まれるシートの全セルに対して、以下の処理を行っています:

  1. セルの値が日付として認識できる場合、“yyyy/mm/dd”形式に統一
  2. 日付として認識できない場合、区切り文字を統一(”/“や”.”を”-“に置換)

電話番号の形式統一

電話番号の形式を統一するケースを考えてみましょう。

Private Sub UnifyPhoneNumberFormat()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range

    Set ws = ThisWorkbook.Sheets("PhoneNumbers")
    Set rng = ws.UsedRange

    For Each cell In rng
        ' ハイフンを削除
        cell.Value = Replace(cell.Value, "-", "")
        ' 先頭に"0"を追加
        If Not Left(cell.Value, 1) = "0" Then
            cell.Value = "0" & cell.Value
        End If
    Next cell
End Sub

まとめ

VBA のReplace関数は、特定の文字列を別の文字列に置換する際に非常に便利なツールです。 特に、大量のデータを扱う際に手動で行うと時間がかかるタスクを自動化する際に役立ちます。 VBA を活用して、日常的な作業を効率化し、業務の生産性を向上させましょう。

#コマンドプロンプト #バッチファイル #引数 #コマンドライン #コマンド