• 締切済み

accessで電話番号にハイフンを追加する

電話番号を識別してハイフンを追加したいです エクセルではこちらの方法が回答でありますがaccessでも可能でしょうか? http://soudan1.biglobe.ne.jp/qa2888873.html

みんなの回答

回答No.2

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 にすべきなのか判断できないため付け足しました。 当方、市外局番/市内局番の番号の振り方の規則は不明です。

回答No.1

一番簡単なのは「Excelのブックを、Accessのデータベースとリンクして、変換(ハイフン追加)はExcelで行なう」です。 質問文にある、Excelでの方法をそのまま使って、作業用のExcelブックに「Sheet1のデータにハイフン追加する」と言うマクロを書いて、Sheet1をAccessのデータベースにリンクします。 Accessのマクロで「SQL文などでSheet1とリンクしたテーブルに変換前のデータを書き込む」→「Excelのマクロを呼び出す」→「SQL文などでSheet1とリンクしたテーブルのデータを、元データと置き換える」とすれば、目的が達成できます。