「電話番号」や「郵便番号」といった項目は、ハイフン付きで入力されていることがあります。
アクセスのテーブルにデータを登録するだけならハイフンがあっても問題ないのですが、登録されたデータの中から「電話番号」や「郵便番号」で検索を行う際には、ハイフンがない状態で検索を行いたいですよね。
そこで今回は
・アクセスのテーブルに登録済のデータからハイフンを削除する方法
・フォームのテキストボックスに入力するタイミングでハイフンを除外する方法
この2つの手順を解説します。
この仕組みが理解できれば、会社名から「株式会社」を削除したり、ハイフン以外の文字列も自由に制御できるようになります。
非常に簡単なので、この機会にぜひマスターしておきましょう!
Replace関数を使用してハイフンを削除する
エクセルを使い慣れている人でしたら、ハイフンの除外は「SUBSTITUTE関数」が思いつくかも知れませんね!
SUBSTITUTE関数
SUBSTITUTE(文字列,検索文字列,置換文字列)

ですがアクセスの関数には「SUBSTITUTE」が存在しません。
アクセスで電話番号からハイフンを削除する時は「Replace関数」を使用するのが正解です。
Replace関数
Replace(文字列,検索文字列,置換文字列)
顧客TBL(ハイフンあり)
ハイフンを削除するクエリを作成
クエリのフィールドに「電話番号(ハイフン削除)」という項目を定義。
Replace関数で、電話番号のハイフンを除外しています。
1 |
電話番号(ハイフン削除): Replace([電話番号],"-","") |
クエリ実行結果
電話番号の場合、ハイフンが入力される場所はさまざまですが、Replace関数ならどの位置のハイフンでも除外することが可能となります。
ただし「電話番号」が必ず入力されているとは限りません。
試しに顧客テーブルより電話番号を削除して、再度クエリを実行してみます。
電話番号が未入力の状態だと、Replace関数で対象の文字列が見つけることができず、エラーと表示されてしまいます。
これを回避するためには、NZ関数を利用します。
NZ関数
Nz(データ, Nullの代替値)
データがNull値でない場合はデータをそのまま返し、Null値の場合はNullの代替値を返します。
※Nullとは、その項目に何も設定されていない、長さを持たない文字列のことです。
1 |
電話番号ハイフン削除: Replace(Nz([電話番号],""),"-","") |
電話番号が空白の場合でもエラーとならずにクエリが実行できました。

テキストボックスに入力されたハイフンを削除する
アクセスで登録用のフォームを作成している場合は、データを登録する前にハイフンを除外することも可能です。
「電話番号1」というテキストボックスから他のテキストボックスにカーソルが移動するタイミングで、ハイフンを削除しています。
これはテキストボックスの「フォーカス喪失イベント」に、次のVBAを記述すれば実現可能です。
1 2 3 4 5 6 7 8 9 10 11 |
Private Sub 注文者_電話番号1_Exit(Cancel As Integer) '=== 電話番号のハイフンを除外する === Dim tel1 As String tel1 = Replace(Nz([注文者_電話番号1], ""), "-", "") Me.注文者_電話番号1 = tel1 End Sub |
テキストボックスのフォーカスが失われるタイミングでハイフンが削除されるので、テーブルに登録されるデータにはハイフンが入りません。
フォームを使っている人は、こちらの方法が便利ですよ!