ACCESS Replace関数で文字を置換する方法(VBAコード公開)
ACCESSで文字列を一定のルールに沿って置換する際に使用するのがReplace関数です。
Replace関数は非常に利用頻度の高い関数ですが、意図通りに変換するには工夫が必要です。
今回は、Replace関数の機能と実務での利用シーンをご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
Replace関数の構文
最初にReplace関数の構文を示します。
Replace ( ①置換前の文字列全体 , ②置換対象文字列 , ③置換後文字列 , ④検索開始位置 , ⑤置換回数 , ⑥比較方法 )
引数は多いですが、比較的理解しやすい構文でしょう。
日本語で記載すると、
「①置換前の文字列全体」を対象に、
「④検索開始位置」から
「⑤置換回数」分だけ
「⑥比較方法」に基づいて
「②置換対象文字列」を
「③置換後文字列」に変換する
となります。
それぞれの引数の意味を解説します。
引数 | 説明 |
①置換前の文字列全体 | 置換対象の文字列や文章全体を指定します。実務では直接テキストを指定するよりは、変数で指定する場合が多いでしょう。 |
②置換対象文字列 | 置換する対象の文字を指定します。上記の置換前の文字列全体に含まれる置き換える文字です。 |
③置換後文字列 | 置換対象文字列を置き換えたい、結果の文字列です。 |
④検索開始位置 | 置換対象文字列の検索を開始する位置です。省略可能で、省略すると「置換前の文字列全体」の最初から検索します。 |
⑤置換回数 | 置換を行う回数です。省略可能で、省略した場合は可能な置換を全て行います。実務では省略することが多いでしょう。 |
⑥比較方法 | 文字列の比較方法です。詳しくは後述します。 |
最後の引数である比較方法は以下のパターンがあります。
デフォルト値は-1ですが、バイナリとテキストのどちらで比較するかだけを意識しておけばよいでしょう。
定数 | 値 | 説明 |
---|---|---|
vbUseCompareOption | -1 | Option Compare ステートメント(モジュールの先頭の記述する、文字列の比較方法を規定するステートメント)の設定を利用して比較。 |
vbBinaryCompare | 0 | バイナリモードで比較。大文字 / 小文字、全角 / 半角、ひらがな / カタカナを区別して比較。 |
vbTextCompare | 1 | テキストモードで比較。大文字 / 小文字、全角 / 半角、ひらがな / カタカナを区別せず比較。 |
vbDatabaseCompare | 2 | Microsoft Office Access 2007 のみ。 データベース内の情報に基づいて比較。 |
大文字 / 小文字、全角 / 半角、ひらがな / カタカナを区別して比較したい場合はバイナリモードの0、そうでなければテキストモードの-1となります。
基本的な利用例
では実際の利用例を見てみましょう。
ここでは「base_string」という変数に、「ああいいううええおお」という文字列が入っている前提です。
置換前 | 置換内容 | 構文 | 置換後 |
---|---|---|---|
ああいいううええおお | 「い」を「き」に変更 | Replace(base_string, “い”, “き”) | ああききううええおお |
ああいいううええおお | 「あ」を一度だけ「か」に変更 | Replace(base_string, “あ”, “か”, 1, 1) | かあいいううええおお |
ああいいううええおお | 2つ目のうだけを「く」に変更 | Replace(base_string, “う”, “く”, 6, 1) | くええおお |
意図通りに置換を行うためには、引数の中でも④検索開始位置 , ⑤置換回数をうまく利用する必要があります。
上記の例は非常に基礎的な内容ですので引数を数値で指定していますが、実際には複数のレコードのデータを一括処理するためにこれらの引数は変数や関数で指定することの方が多いでしょう。
Replace関数を利用したcsvファイルの文字置換
最後にかなり複雑な利用例として、csvファイルをACCESSへデータをインポートする前の、テキスト上でのデータ整形処理でReplace関数を利用する例を示します。
例えば、下記のようにimp_txtというcsvファイルを、IMP_TBLというテーブルに取り込みたいとします。
しかし、imp_txtの一行目(フィールド列)の文字に「/」が入っていました。
ACCESSのフィールド名にこのような特殊文字が入るとうまく動作せず、エラーの原因となります。
そこで、取り込み前にReplace関数を使って、「/」を置換して除去する、という処理をしています。
'変数定義
Dim FSO As Object
Set FSO = CreateObject("scripting.FileSystemObject)
Dim filepath As String
Dim file_name As String
Dim imp_file As Object
Dim exp_file As Object
Dim tmp_txt As String
Dim tmp_line As String
Dim file_name As String
'ファイル指定
filepath = "C:import"
file_name = "test.csv"
'テキストの読み込み
Set imp_txt = FSO.openTextFile(filepath & "\" & file_name & "_", ForReading)
'一行目(フィールド列)の読み込み
tmp_line = imp_txt.ReadLine
'「/」の置換処理
tmp_line = Replace(tmp_line, "/", "", 1)
tmp_txt = tmp_line
'二行目以降の読み込み
Do Until imp_txt.AtEndOfStream
'一行読み込み
tmp_line = imp_txt.ReadLine
'一行分追加
tmp_txt = tmp_txt & vbCrLf & tmp_line
Loop
'出力用ファイル作成
Set exp_file = FSO.createTextFile(filepath & "\" & file_name & "_exp", True)
'ファイル書き込み
exp_file.Write tmp_txt
exp_file.Close
'ACCESSへのインポート処理
DoCmd.TransferText acImportDelim, "インポート定義", "IMP_TBL", filepath & "\" & file_name & "_exp", False
処理を解説しましょう。
まず処理全体としてはACCESSにインポートする前のcsvファイルを操作しますので、FileSystemObjectを使用します。
csvファイルの内容を imp_txt という変数に読み込みます。
そして、tmp_line という変数に ReadLine メソッドを使って、csvファイルを一行ずつ読み込んでいきます。
tmp_line = imp_txt.ReadLine
読み込み後に、1行目のみReplace関数で「/」を削除する処理を行っています。
tmp_line = Replace(tmp_line, "/", "", 1)
そして、変更した tmp_line の内容を、テキストデータの蓄積用変数である tmp_txt に一行ずつ書き込んでいきます。
tmp_txt = tmp_line
2行目以降は特に処理をしていませんが、Do Loop構文で、一行読み込み→一行追加を繰り返して、 tmp_txt にデータを入れていきます。
Do Until imp_txt.AtEndOfStream
'一行読み込み
tmp_line = imp_txt.ReadLine
'一行分追加
tmp_txt = tmp_txt & vbCrLf & tmp_line
Loop
最後に、出来上がった tmp_txt を出力用ファイルである exp_file に書き込み、ACCESSへのインポート処理を行います。
exp_file.Write tmp_txt
exp_file.Close
'ACCESSへのインポート処理
DoCmd.TransferText acImportDelim, "インポート定義", "IMP_TBL", filepath & "\" & file_name & "_exp", False
以上、Replace関数で文字を置換する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。