【Access関数】Replace関数の使い方|構文・具体例

文字列操作関数

Replace関数は、特定の文字列を、別の文字列に置き換えることができる関数です。この記事では、基本的な構文や、具体的な使い方について解説します。

Replace関数とは

Replace関数の活用場面

Replace関数は、指定した文字列の中から、特定の部分を別の文字列に置き換えるための文字列操作関数です。
たとえば、住所データ中の「-(ハイフン)」を削除したり、全角スペースを半角スペースに統一したいときなど、文字列を整形する場面で非常に役立ちます。

Accessでは、手入力したデータや別部署から入手してインポートしたCSVなどの中に、同じ意味でも表記ゆれが起こることがあります。たとえば「(株)」と「株式会社」、「-」と「ー」などです。このようなデータの“ゆらぎ”を整理するのに、Replace関数はうってつけです。

置換えの例

Replace関数の仕組み

Replace関数は、対象文字列を1文字ずつスキャンしながら、指定した検索文字列が現れた箇所を検出して、その部分を置換文字列に入れ替えた新しい文字列を返します
このとき元の文字列が変更されるわけではなく、「結果として置き換え後の文字列を返す」仕組みになっています。(データを実際に書き換えたい場合は、更新クエリやVBAでデータ更新を行います。)

また、Replace関数は大小文字の区別部分的な置換回数の制御にも対応しており、シンプルながら非常に柔軟です。たとえば、「abcABC」という文字列から「abc」だけを置き換えたいのか、大小区別なく全部置き換えたいのかを指定することができます。

構文

Replaceの基本構文

Format(文字列,検索文字列,置換文字列,[開始位置],[置換回数],[比較方法])

各引数の内容は次のとおりです。

引数必須/省略内容
文字列必須置換対象となる文字列を指定
検索文字列必須検索する文字列を指定
置換文字列必須置換する文字列を指定
開始位置省略可開始する位置。省略すると先頭から検索する
置換回数省略可置換する回数。省略するとすべて置き換える
比較方法省略可文字列の比較方法。設定値は【表1】を参照

【表1】比較方法の設定値(省略した場合の既定はvbUseCompareOption

定数名内容
vbUseCompareOptionOption Compareステートメントの設定で比較を行う
※モジュールの宣言セクションで以下ステートメントを宣言
・Option Compare Binary
・Option Compare Text
・Option Compare Database

※既定でOption Compare Databaseが設定されています。
各内容の挙動は下記を参照↓↓↓
vbBinaryCompareバイナリモードで比較を行う
※大文字/小文字、半角/全角、ひらがな/カタカナが区別される
vbTextCompareテキストモードで比較を行う
※大文字/小文字、半角/全角、ひらがな/カタカナが区別されない
vbDatabaseCompareデータベースの設定に基づき比較を行う
※既定では区別されない設定になっています。

つまり、引数「比較方法」を省略した場合は、vbUseCompareOptionが適用→モジュールの宣言セクションにvbDatabaseCompareが既定で入っているので、”区別されない”っていうことですね!

具体例

最もシンプルな基本形

Replace("Excel VBA", "Excel", "Access")

【結果】

Access VBAが返されます。

大文字・小文字を区別する置換

Replace("abcABC", "abc", "X", , , vbBinaryCompare)

【結果】

XABCが返されます。

【解説】

引数「比較方法」にvbBinaryCompareを指定することで、大文字/小文字が区別されます。その結果、abcのみがXに置き換わるため、戻り値がXABCとなります。
なお、大文字/小文字の他、半角/全角、ひらがな/カタカナも区別されます。

文字列の一部分だけ置換

Replace("11111", "1", "A", 2, 2)

【結果】

AA11が返されます。

【解説】

引数「開始位置」に2、「置換回数」に2をそれぞれ指定しています。
「開始位置」を2にした時点で文字列が1111と4桁になり、「置換回数」が2回ですから、戻り値はAA11となります。

文字を削除する(空文字で置換え)

Replace("A-B-C", "-", "")

【結果】

ABCが返されます。

【解説】

置換後の文字列を空文字(””)にすると、指定した文字を削除できます。電話番号のハイフン除去など、データ整形によく使われます。

複数の置換をしたいパターン(Replaceをネストする)

Replace(Replace([会社名], "(株)", "株式会社"), "㈱", "株式会社")

【解説】

Replace関数は基本的には、1回に1種類しか置換できませんが、入れ子(ネスト)することにより、複数種類の検索文字列置換文字列を設定することができます。

例えば、入手したデータの会社名フィールドに手入力した(株)だったり、記号のなどが混在している場合、そのどちらも株式会社に置換したい場合があります。上記コードではネストにより、どちらの文言にも置換を対応させています。

ただし、複雑なパターンになると視認性が悪くなるため、一気にネストさせるよりも、変数を使って段階的に処理した方がわかりやすいです。

Dim s As String
s = STD㈱
s = Replace(s, "(株)", "株式会社")
s = Replace(s, "㈱", "株式会社")

使用例

冒頭で触れたように、Replace関数はクエリやVBA、フォーム上など様々な箇所で使用することができます。ここではクエリとVBAで使用する事例をご紹介します。

クエリで使用するパターン

クエリの演算フィールドでReplace関数を使用することができます。

【具体例】

下記のサンプルテーブルでは、取引先フィールドに格納されているデータに、社名と株式会社の間に半角スペース、全角スペースが挿入されているものもあれば、スペースがないものも混在しています。

このスペース(空白)を一律削除する方法を説明します。

文字列の左側や右側、また両端のスペースであれば、LTrim関数、RTrim関数、Trim関数で取り除くことができますが、文字列の中に含まれるスペースを削除する場合は、Replace関数を活用することで実現できます。

クエリの演算フィールドにReplace関数を指定した例
取引先名調整: Replace([取引先]," ","")

上記クエリを実行することで、一律スペースを削除し「※※※株式会社」または「株式会社※※※」形式に統一されます。

VBAで使用するパターン

特定のフィールドについて、VBAで一括置換することも可能です。

Sub ReplaceMultiFieldADO()
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim strSQL As String
    
    Set cn = CurrentProject.Connection
    strSQL = "SELECT 会社名 FROM T_顧客"
    
    Set rs = New ADODB.Recordset
    rs.Open strSQL, cn, adOpenDynamic, adLockOptimistic
    
    Do Until rs.EOF
        If Not IsNull(rs!会社名) Then
            rs!会社名 = Replace(rs!会社名, "㈱", "株式会社")
        End If
        rs.Update
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    Set cn = Nothing
    
    MsgBox "フィールドの変換が完了しました。", vbInformation
End Sub

上記コードは、ADOで読み込んだテーブルのフィールド(会社名)の全レコードに対して、文字列を置換している例です。
12~18行目のDo~Loopステートメントにより、会社名フィールドがNullでなければ、株式会社に置き換えています。

まとめ

本記事の要点をまとめます。

Replace関数とは
 指定した文字列の中から、特定の部分を別の文字列に置き換える文字列操作関数。データの表記ゆれ(例:「-」「ー」「㈱」「(株)」など)の統一に有効。

構文と主な引数
  Replace(文字列, 検索文字列, 置換文字列, [開始位置], [置換回数], [比較方法])  
 - 開始位置:どこから検索を始めるか
 - 置換回数:何回まで置き換えるか
 - 比較方法:大文字・小文字や半角/全角の区別の有無を指定可能
 - 既定では「区別しない比較」が適用されやすい設定

使用例/活用方法
 - クエリ(演算フィールド)での利用:空白を除去する場合など、例:Replace([取引先], " ", "")
 - VBAでの一括置換:レコードセットをループしてフィールド値を置換して更新するスクリプト例あり

ポイント・注意点
 - Replace関数は元の文字列を直接変えるのではなく、「置換後の新しい文字列」を返す仕様である点に注意。実データの更新は、クエリや VBA を用いて行う必要あり。
 - 複雑な置換を一度にネストで処理すると可読性が落ちるため、段階的に処理する方法が実践的。

タイトルとURLをコピーしました