- ベストアンサー
エクセルで電話番号にハイフンを入れるには?
教えて下さい。 エクセルで電話番号にハイフンを入れたいと思ってます。 市外局番や間の桁数が違うのですが、いい方法を教えて下さい。 例) 092***1111 → 092-***-1111 03****3222 → 03-****-3222 0999**0000 → 0999-**-0000 01234*2222 → 01234-*-2222 という感じです。 いい方法があれば教えて下さい。
- みんなの回答 (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列昇順で並べる ーー 上田 00255 5 石垣 09808 5 函館 0138 4 釧路 0154 4 帯広 0155 4 旭川 0166 4 弘前 0172 4 八戸 0178 4 大館 0186 4 釜石 0193 4 塩釜 0193 4 ・・・略 鹿児島 099 3 東京 03 2 大阪 06 2 守口 06 2 豊中 06 2 あとは、ハイフンを入れたい対象データ1行(個)に対し、この表の168行1つづつの市外局番で、先頭からの位置で、それを含んでいないか、総なめにしてチェック。 含んでいたらそこの桁までを市外局番としハイフンをいれ、右から5桁目にもーを入れる。 このコードはとりあえず略。
その他の回答 (5)
- chie65536
- ベストアンサー率41% (2512/6032)
追記。 ANo.2にもあるように、市外局番一覧は「降順」でソートしておきましょう。 そうすれば「長い方が先に見付かる」ようになります。 降順ソートした一覧の例 01232 01233 01234 0123 0124 0125 012 011 これで「0123456789」を処理すると「012」や「0123」より前に「01234」が見付かり「01234-5-6789」になります。 あと「決め打ち出来て、データの件数が多い市外局番」は「一覧の先頭に置いとく」のが良いです。例えば「東京」「大阪」の「03」「06」など。 一覧の最初の方で見付かる件数が多ければ多いほど、全体の処理速度が向上しますからね。
お礼
風邪で御礼が遅くなりましたが、chie65536さんのアドバイスを 努力と根性で頑張って試してみます。回答有難うございました。
- zap35
- ベストアンサー率44% (1383/3079)
論理的に完全に正しい位置に"-"を入れるのは不可能です。以下の市外局番一覧を見てください http://zatugaku.jp/tel-j.htm 例えば青森市は017、弘前市は0172です。017222****を 017-222-**** 0172-22-**** のどちらと見なせばよいでしょう。人が見ても分かりませんよね。 データ中の市外局番がある程度限られるなら、市外局番リストを作成しておいて、VBAもしくは関数式で「先頭n文字がリストに合致したら」という処理をすることは可能かもしれませんが…
お礼
回答有難うございます。 完全にとは難しいかもしれませんが、 頑張ってみます。
- chie65536
- ベストアンサー率41% (2512/6032)
やるとしたら結構大変です。 必要な物 ・市外局番一覧表 ・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の電話帳みたいな冊子から「全件、手入力」になるかも(根性が必要)
- norakuma
- ベストアンサー率29% (293/977)
市外局番はいろいろあって大変ですよね。 1.市外局番リストを別途用意して、現在あるリストと比較してやりますした。 この場合、桁数が多いパターンから検索していかないと、 053-XXX 0531-XXX という形式があった場合に、0531XXXという電話番号を誤って判定します。 #市外局番のリストは、NTT東西のサイトにあります。 2.その次に、後ろ4桁の左に、「-」を付記する。 数年前に、これと似た作業をやった記憶があります。
お礼
回答有難うございます。 リストは用意できたので 今から頑張ります。
- dec02
- ベストアンサー率36% (578/1602)
セル列を5列使えばどうですか? 2列目と4列目に予めハイフンを入れておき、 数字のみ入力します。 ENTERキーの代わりに矢印キーでセル移動。 もちろん罫線は1つのセルのように。 でなきゃ、表示形式を文字列にして、 テンキーでそのまんまでしょう。
お礼
回答有難うございます。 セルは増やせないので 出来ないときは諦めて文字列テンキーしかないですね。 頑張ります。
お礼
回答有難うございます。 今からしてみようと思います。