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

教えて下さい。

エクセルで電話番号にハイフンを入れたいと思ってます。
市外局番や間の桁数が違うのですが、いい方法を教えて下さい。

例)
092***1111 → 092-***-1111
03****3222 → 03-****-3222
0999**0000 → 0999-**-0000
01234*2222 → 01234-*-2222

という感じです。
いい方法があれば教えて下さい。

A 回答 (6件)

#4,#5をヒントにVBAで市外局番表をエクセルシートに作ってみました。


とりあえず報告。何かの参考になれば。
しかし中にはデータとして旧い(改定前)ようなのを見つけましたが。
’---
全国'http://zatugaku.jp/tel-j.htmの表をエクセルSheet1にコピー
'Sheet1第1行の見出し行を削除
'Sheet1柏のデータ全角スペースいれ(一部修正)
'Sheet1柏の直下のA,B列をDeleteで空白にする。
'Sheet1柏の直下のA,B列セル結合を解く
'Sheet2の書式を文字列に事前に設定する
'下記を実行
'--
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
j = 1
'---
For k = 2 To 8 Step 2
i = 1
Do While sh1.Cells(i, k) <> ""
s = sh1.Cells(i, k)
r = Split(s, " ")
sh2.Cells(j, "A") = r(0)
sh2.Cells(j, "B") = r(1)
j = j + 1
i = i + 1
Loop
Next k
'---
End Sub

その後
'C列に=Len(B1)を入れて下方向に式を複写
'A1:C165を、C列降順,B列昇順で並べる
ーー
上田002555
石垣098085
函館01384
釧路01544
帯広01554
旭川01664
弘前01724
八戸01784
大館01864
釜石01934
塩釜01934
・・・略
鹿児島0993
東京032
大阪062
守口062
豊中062

あとは、ハイフンを入れたい対象データ1行(個)に対し、この表の168行1つづつの市外局番で、先頭からの位置で、それを含んでいないか、総なめにしてチェック。
含んでいたらそこの桁までを市外局番としハイフンをいれ、右から5桁目にもーを入れる。
このコードはとりあえず略。
    • good
    • 0
この回答へのお礼

回答有難うございます。
今からしてみようと思います。

お礼日時:2007/07/02 12:12

追記。



ANo.2にもあるように、市外局番一覧は「降順」でソートしておきましょう。
そうすれば「長い方が先に見付かる」ようになります。

降順ソートした一覧の例
01232
01233
01234
0123
0124
0125
012
011

これで「0123456789」を処理すると「012」や「0123」より前に「01234」が見付かり「01234-5-6789」になります。

あと「決め打ち出来て、データの件数が多い市外局番」は「一覧の先頭に置いとく」のが良いです。例えば「東京」「大阪」の「03」「06」など。

一覧の最初の方で見付かる件数が多ければ多いほど、全体の処理速度が向上しますからね。
    • good
    • 0
この回答へのお礼

風邪で御礼が遅くなりましたが、chie65536さんのアドバイスを
努力と根性で頑張って試してみます。回答有難うございました。

お礼日時:2007/07/02 12:15

論理的に完全に正しい位置に"-"を入れるのは不可能です。

以下の市外局番一覧を見てください
http://zatugaku.jp/tel-j.htm

例えば青森市は017、弘前市は0172です。017222****を
017-222-****
0172-22-****
のどちらと見なせばよいでしょう。人が見ても分かりませんよね。

データ中の市外局番がある程度限られるなら、市外局番リストを作成しておいて、VBAもしくは関数式で「先頭n文字がリストに合致したら」という処理をすることは可能かもしれませんが…
    • good
    • 0
この回答へのお礼

回答有難うございます。
完全にとは難しいかもしれませんが、
頑張ってみます。

お礼日時:2007/07/02 12:17

やるとしたら結構大変です。



必要な物
・市外局番一覧表
・VBAプログラム知識
・努力と根性

方法
以下のプログラムをVBAマクロで作って下さい(努力が必要)

1.前6桁と後4桁に分離する。
 「<元データ>」は「必ず10桁」になってる事
 前6桁は「=left(<元データ>,6)」で
 後4桁は「=right(<元データ>,4)」で

2.前6桁の先頭が、市外局番一覧表に一致する物を検索し、それを市外局番にする。
 市外局番一覧表を1件目から順に見て行く
 if文で「feft(<前6桁>,len(<市外局番>)) = <市外局番>」が成り立てば「前6桁の先頭が、市外局番に一致」として検索終了
 市外局番一覧表を全件探して一致しなければ、不一致として検索終了

3.前6桁から市外局番を除いた番号を市内局番にする。
 市内局番は「=right(<前6桁>,6-len(<市外局番>))」で

4.市外局番、市内局番、後4桁をハイフンで繋ぐ
 「=<市外局番> & "-" & <市内局番> & "-" & <後4桁>」で

5.全件繰り返し
 電話番号が無くなるまで上記1~4を繰り返します

なお「市外局番一覧表」は、電子化した物が無いかも知れません。下手するとNTTの電話帳みたいな冊子から「全件、手入力」になるかも(根性が必要)
    • good
    • 0

市外局番はいろいろあって大変ですよね。



1.市外局番リストを別途用意して、現在あるリストと比較してやりますした。

この場合、桁数が多いパターンから検索していかないと、
053-XXX
0531-XXX
という形式があった場合に、0531XXXという電話番号を誤って判定します。

#市外局番のリストは、NTT東西のサイトにあります。

2.その次に、後ろ4桁の左に、「-」を付記する。

数年前に、これと似た作業をやった記憶があります。
    • good
    • 0
この回答へのお礼

回答有難うございます。
リストは用意できたので
今から頑張ります。

お礼日時:2007/07/02 12:19

セル列を5列使えばどうですか?


2列目と4列目に予めハイフンを入れておき、
数字のみ入力します。
ENTERキーの代わりに矢印キーでセル移動。
もちろん罫線は1つのセルのように。

でなきゃ、表示形式を文字列にして、
テンキーでそのまんまでしょう。
    • good
    • 0
この回答へのお礼

回答有難うございます。
セルは増やせないので
出来ないときは諦めて文字列テンキーしかないですね。
頑張ります。

お礼日時:2007/07/02 12:22

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