プロが教えるわが家の防犯対策術!

はじめまして、表題の通りですが、なかなか難しくてうまく解決できませんので、ここで質問させていただきます。

電話番号に半角のハイフン(-)を入れて見やすくしたいと考えています。

電話番号には090などで始まる携帯の番号、大阪のように06で始まる番号、京都のように075で始まる番号、西宮市のように0798で始まる番号といろいろ入力されています。それぞれの市外局番の後にハイフンを入れて、残りの番号が8桁なら4桁+ハイフン+4桁、7桁なら3桁+4桁、6桁なら2桁+ハイフン+4桁のようにハイフンを入れていくにはどうしたらよいでしょうか?

(例)
09012345678→090-1234-5678
0612345678→06-1234-5678
0751234567→075-123-4567
0798123456→0798-12-3456

A 回答 (1件)

これはちょっと難解ですね。

とりあえず市外局番の一覧を作らなければなりません。
まず、下記のURLにアクセスしてください。

<市外局番の一覧>
http://www.soumu.go.jp/joho_tsusin/top/tel_numbe …

ブラウザでこのページを開いた状態で、
「編集」>「全て選択」
「編集」>「コピー」
でページをコピーします。

そして、エクセルのSheet2(と仮にします)のA1セルを選択し、「編集」>「貼り付け」でブラウザの内容を貼り付けます。

よけいな行(1~21行目)を削除し、さらにA列とB列を削除します。「市外局番の一覧」という文字も図形として入っているので選択して削除します。一番下のデータ(593行目辺り)の下20行くらいもまとめて削除します。(矢印みたいな記号は右クリック>切り取り で消してください)

これでA列に全国の市外局番の一覧から頭の0を抜いた表ができます。しかし、これには携帯やIP電話の市外局番が入ってないので、一番下の行の下に、以下を追加します。
90
80
70
50
これで市外局番一覧はできあがりです。

ここから先は関数ではしんどいのでマクロを作りました。

Alt+F11でVBAの画面を開き、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。

その際、注釈として入れている箇所(シート名、列名)は、実際のシート構成にあわせて書き換えてください。このマクロではA列の電話番号を変換してA列に書き込む(つまりA列を上書き)するようになっていますが、念のために列を挿入して、B列に変換結果を書き込むようにもできます。

Sub 電話番号変換()
 Dim WS1 As Worksheet, WS2 As Worksheet
 Set WS1 = Worksheets("Sheet1") '電話番号が入っているシート名
 Set WS2 = Worksheets("Sheet2") '市外局番一覧が入っているシート名
 Const C1 As String = "A" '元の電話番号が入っている列名
 Const C2 As String = "A" 'ハイフンを挿入した電話番号を記入する列名
 
 Dim i As Integer
 Dim Tel1 As String, Tel2 As String

 With WS1
  For i = 2 To .Cells(Rows.Count, C1).End(xlUp).Row
   Tel1 = .Cells(i, C1)
   If Not WS2.Columns(1).Find(What:=Mid(Tel1, 2, 4), LookAt:=xlWhole) Is Nothing Then
    '市外局番が5桁のとき
    Tel2 = Left(Tel1, 5) & "-" & Mid(Tel1, 6, 1) & "-" & Mid(Tel1, 7, 4)
   ElseIf Not WS2.Columns(1).Find(What:=Mid(Tel1, 2, 3), LookAt:=xlWhole) Is Nothing Then
    '市外局番が4桁のとき
    Tel2 = Left(Tel1, 4) & "-" & Mid(Tel1, 5, 2) & "-" & Mid(Tel1, 7, 4)
   ElseIf Not WS2.Columns(1).Find(What:=Mid(Tel1, 2, 2), LookAt:=xlWhole) Is Nothing Then
    If Mid(Tel1, 3, 1) = "0" Then
     '市外局番が3桁で0x0の場合(11桁)
     Tel2 = Left(Tel1, 3) & "-" & Mid(Tel1, 4, 4) & "-" & Mid(Tel1, 8, 4)
    Else
     '市外局番が3桁で0x0でない場合(10桁)
     Tel2 = Left(Tel1, 3) & "-" & Mid(Tel1, 4, 3) & "-" & Mid(Tel1, 7, 4)
    End If
   ElseIf Not WS2.Columns(1).Find(What:=Mid(Tel1, 2, 1), LookAt:=xlWhole) Is Nothing Then
    '市外局番が2桁のとき
    Tel2 = Left(Tel1, 2) & "-" & Mid(Tel1, 3, 4) & "-" & Mid(Tel1, 7, 4)
   Else
    'それ以外の時はハイフンを入れずそのままにする
    Tel2 = Tel1
   End If
   .Cells(i, C2) = Tel2
  Next
 End With
End Sub

マクロを貼り付けたら、その画面でF5キーを押すか、Alt+F11でExcelの画面に戻ってAlt+F8からマクロを実行してみてください。電話番号がハイフンつきに変換されます。(元には戻せないため、念のためファイルかシートのバックアップをとっておいた方がよいでしょう)
    • good
    • 0
この回答へのお礼

ありがとうございます!!ちゃんとできました。

実際に入力されている電話番号の市外局番は限られているのですが、新たに入力される市外局番をどうするかが解決できませんでした。

関数では無理だろうと思い、私もマクロを組んだのですが、できませんでした。

3月半ばから悩んでいたことが、たった1日で解決でき、本当に感謝しております。忙しい中、時間を割いてマクロまで作成していただき、本当にありがとうございました。m(__)m

お礼日時:2007/04/03 05:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!