• ベストアンサー

Access:電話番号を検索する方法ですが…

Access2002で、住所録を作りました。 1つのテーブルに郵便番号、住所、氏名、ふりがな、電話番号があります。 全部テキスト型で、それぞれに定型入力を指定してあります。 このとき、電話番号をフルに入力して検索できるようにしたいのですが、  Private Sub テキスト23_AfterUpdate()  Me.Filter = "自宅TEL='" & Me!テキスト23 & "'"  Me.FilterOn = True  End Sub とイベントプロシージャーを指定しても、検索出来ません。 検索対象の電話番号は、 ##-####-####、###-###-####、####-##-#### のどれでも出来るようにしたいと思います。 AccessのVBAで出来る範囲で、どなた様かご存知でしたら、ご教示お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

定型入力の式がわかりませんので推測になりますが 定型入力で電話番号のデータにスペース(その他の記号も?)が含まれていると思われます。 数値だけを取り出して検索するようにします。  Private Sub テキスト23_AfterUpdate()  Me.Filter = "PickNum(自宅TEL)='" & PickNum(Me!テキスト23) & "'"  Me.FilterOn = True  End Sub 標準モジュールに Public Function PickNum(wkNum As Variant) As String Dim org As String Dim dst As String Dim ch As String Dim i As Integer If IsNull(wkNum) Then Exit Function End If org = wkNum For i = 1 To Len(org) ch = Mid(org, i, 1) If IsNumeric(ch) Then dst = dst & ch End If Next PickNum = dst End Function

azarachi
質問者

お礼

bonaron様 ご解説いただきありがとうございます。 電話番号はAccess上では文字列で、Excelにエクスポートすると数値でした。 「-(ハイフン)」も一緒に出力されたので、ご教示のとおり、数値だけを取り出す方法が的確と思われます。 このとおりにやって、試させていただきたいと思います。

その他の回答 (2)

  • 007MUKADE
  • ベストアンサー率41% (286/694)
回答No.2

> Me.Filter = "自宅TEL='" & Me!テキスト23 & "'"   ***************** この表記では Me!テキスト23 コントロールの 数値を参照してます。 ここは テキスト(文字)型ですので 文字で参照しないとなりません。 Me.Filter = "[自宅TEL] =" & "'" & Me![テキスト23] & "'" と念のためフィールド名(コントロール名)は [ ]括弧で括ってみてください。 尚、簡単なデバッグ方法として プロシージャーの画面で ストップを掛けて 変数がどの様に変るのか? を確認しながら確かめて下さい。 私はプロシージャーのなかに Msgbox "TEL = " [自宅TEL] と埋込んで変数饒辺かを確かめてます。

azarachi
質問者

お礼

007MUKADE様 丁寧なご回答ありがとうございます。御礼が遅くなりまして失礼いたしました。さっそく試したいと存じます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

Filterを使うやり方ではないが テーブル例 電話帳 ID 電話番号 氏名 1 03-2345-2345 大村 2 072-234-3567 中村 3 04-2345-2345 木下 4 04-4445-2345 山野 5 051-345-2345 緒方 ーーーーー フォーム例 テキストボックス テキスト0 検索する電話番号入力用 テキストボックス テキスト2 該当氏名・電話番号表示用 コマンドボタン  コマンド4 検索実行用 を貼り付ける。 --- コマンドボタンのクリック・イベント Private Sub コマンド4_Click() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim mySQL As String テキスト0.SetFocus t = テキスト0.Text mySQL = "SELECT 氏名,電話番号 FROM 電話帳 WHERE 電話番号 LIKE '*" & t & "';" s = "" Set DB = CurrentDb Set RS = DB.OpenRecordset(mySQL) Do Until RS.EOF s = s & RS!電話番号 & RS!氏名 & vbCrLf RS.MoveNext Loop テキスト2.SetFocus テキスト2.Text = s Set RS = Nothing Set DB = Nothing End Sub 条件の電話番号をテキストボックスに入れると 例 345-2345 テキストボックスに 051-345-2345緒方 03-2345-2345大村 04-2345-2345木下 と表示されました。 応用が広いと思う。

azarachi
質問者

お礼

imogasiさま 大変ご丁寧な解説を頂きまして、ありがとうございます。 とても勉強になりました。試しましたところ、実に汎用性が高いプロシージャーでした。 本当にどうもありがとうございます。