- 締切済み
accessで電話番号にハイフンを追加する
電話番号を識別してハイフンを追加したいです エクセルではこちらの方法が回答でありますがaccessでも可能でしょうか? http://soudan1.biglobe.ne.jp/qa2888873.html
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- NotFound404
- ベストアンサー率70% (288/408)
Accessで考えてみました。 市外局番のデータを質問文中のリンクを参考にAccessのテーブルに取り込みます。 これを『局番』テーブル コード テキスト型 番号区画 メモ型 市外局番 テキスト型 コード| 番号区画 |市外局番 1 |北海道江別市、札幌市、北広島市、空知郡南幌町|11 1000 | 携帯 |090 ・・・にします。 今回使用するフィールドは市外局番だけなので他のは削っても構いません。 『電話番号』テーブル 番号 テキスト型 氏名 ・・・ 番号 |氏名 |・・・| 030000xxxx|佐々木|・・・ ・・・ の様だとしたら、新たに2フィールドを追加します。 番号|氏名|・・・|番号改|確定 確定フィールドはYes/No型にしてください。 以下を標準モジュールにコピペし、chgPhoneを実行します。 Sub chgPhone() '電話番号をハイフン付きにします Dim DB As Database Dim RS As DAO.Recordset, rsFrom As DAO.Recordset Dim TelNo() As Variant, TelTemp As String, i As Long Dim t As Single t = Timer Set DB = CurrentDb Set rsFrom = DB.OpenRecordset("SELECT * FROM 電話番号", dbOpenDynaset) Set RS = DB.OpenRecordset("SELECT 市外局番 FROM 局番 ", dbOpenSnapshot) Do Until rsFrom.EOF RS.MoveFirst i = 0 ReDim TelNo(i) Do Until RS.EOF If RS!市外局番 = Mid(rsFrom!番号, 2, Len(RS!市外局番)) Then '市外局番の候補を配列に ReDim Preserve TelNo(i) TelNo(i) = "0" & RS!市外局番 i = i + 1 End If RS.MoveNext Loop Select Case i Case 0 ' Case 1 rsFrom.Edit rsFrom!番号改 = TelNo(0) & "-" _ & Mid(rsFrom!番号, Len(TelNo(0)) + 1, Len(rsFrom!番号) - Len(TelNo(0)) - 4) & "-" _ & Right(rsFrom!番号, 4) rsFrom!確定 = True rsFrom.Update Case Else TelTemp = myMax(TelNo()) rsFrom.Edit rsFrom!番号改 = TelTemp & "-" _ & Mid(rsFrom!番号, Len(TelTemp) + 1, Len(rsFrom!番号) - Len(TelTemp) - 4) & "-" _ & Right(rsFrom!番号, 4) rsFrom!確定 = False rsFrom.Update End Select rsFrom.MoveNext Loop RS.Close: Set RS = Nothing rsFrom.Close: Set rsFrom = Nothing Debug.Print (Timer - t) * 1000 End Sub Private Function myMax(aryX() As Variant) As Variant '市外局番が途中まで同じ場合は最長のものを採用 Dim v As Variant, i As Long For Each v In aryX If IsEmpty(myMax) Or IsNull(myMax) Or v > myMax Then myMax = v End If i = i + 1 Next End Function 確定フィールドについて。 総務省の一覧を見ると コード 番号区画 市外局番 20 北海道茅部郡鹿部町 1372 21 北海道茅部郡森町 1374 22 北海道二海郡八雲町() 137 23 北海道山越郡 1377 などのような市外局番の番号の振り方があります。 電話番号が、013723xxxx だとして 市外局番が0137-23-xxxx なのか あるいは、01372-3-xxxx にすべきなのか判断できないため付け足しました。 当方、市外局番/市内局番の番号の振り方の規則は不明です。
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
一番簡単なのは「Excelのブックを、Accessのデータベースとリンクして、変換(ハイフン追加)はExcelで行なう」です。 質問文にある、Excelでの方法をそのまま使って、作業用のExcelブックに「Sheet1のデータにハイフン追加する」と言うマクロを書いて、Sheet1をAccessのデータベースにリンクします。 Accessのマクロで「SQL文などでSheet1とリンクしたテーブルに変換前のデータを書き込む」→「Excelのマクロを呼び出す」→「SQL文などでSheet1とリンクしたテーブルのデータを、元データと置き換える」とすれば、目的が達成できます。