MS Access Tips/Sample and VBA and Blog customize etc...

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

区切りなしの電話番号に適切な位置に区切り文字を挿入する関数(汎用版)

タイトル画像

前の記事で電話番号に区切り文字を挿入する関数を紹介しましたが、Accessでしか使えないものでしたが、ExcelやWordなどでも共通で使える関数を作成しましたので公開します。

難易度:

概要

前記事の関数は総務省が公開している市外局番の一覧をダウンロードしてAccessのテーブルに取り込んでそれをもとに市外局番の桁数を取得するというものでした。で、テーブルのデータを見てると388件と大した量でなかったので、テーブルにしなくてもコード内で定数などに格納して検索してもできそうな気がしてきました。

で、作成してみたら、意外とシンプルでかつAccess版より高速なものができました。ExcelやWordなどでも使えて高速なので、前の関数はもう用済みですね。

ただ、定数データを作成するときは、クエリを使って簡単に生成できたので、テーブルデータは役にはたちました。

SplitTelNumber関数

下記の関数をコピーして標準モジュールに貼り付けてください。

2017/06/01追記: コードに間違いがありましたので修正しました。

2017/07/19 追記: コードを改修しました。改修内容は こちらを参照

使用例

追記

下記で、総務省のサイトの市外局番一覧が更新されてたら、データをダウンロードして、関数に取り込んでアップデイトするツールを紹介していますので、ご利用ください。

電話番号の適切な位置に区切り文字を挿入する関数+市外局番データ自動アップデイトツール

-10 Comments

Hachi56 says..."ありがとうございました。"

hatena様
ピンポイントの解決策で大変助かりました!ありがとうございました。
スキルのなさやコピー方法の不手際で時間がかかりましたが、うまくいきました。   

その際、****-**-****形式がうまくいかなかったので、下記の記述

ElseIf InStr(1, AreaCode4, TelNo, vbBinaryCompare) > 0 Then
SplitTelNumber = _
Format(Mid(TelNo, 2, 3), "&&&&" & Demiliter & "&&" & Demiliter & "&&&&")



ElseIf InStr(1, AreaCode4, Mid(TelNo, 2, 3), vbBinaryCompare) > 0 Then
SplitTelNumber = _
Format(TelNo, "&&&&" & Demiliter & "&&" & Demiliter & "&&&&")
のように変更しました(前後の記述を参考に)。
問題ないですよね?

2017.05.31 21:12 | URL | #2XwI6hG6 [edit]
hatena says..."re:ありがとうございました。"

Hachi56 様
> その際、****-**-****形式がうまくいかなかったので、下記の記述
中略
> のように変更しました(前後の記述を参考に)。
> 問題ないですよね?

あっ、記事のコード間違ってますね。そちらのコードが正しいです。
記事の方のコードを正しいものに修正しておきました。
ご指摘ありがとうございました。

2017.06.01 02:27 | URL | #5uE6dEgY [edit]
よろずや says..."市外局番の桁数について"

現役中は大変お世話になりました。
現在はリタイアし暇つぶしをしています。
さて、市外局番の桁数ですが、市外局番の数字だけではなく
市内局番まで見ないと決まらないのです。
例)
0293-2x-xxxx:高萩
029-30x-xxxx:水戸
ht tp://www.denpa-data.com/annex/telephone/02.htm

2018.05.25 10:11 | URL | #TXvl0E4U [edit]
hatena says..."re:市外局番の桁数について"

> さて、市外局番の桁数ですが、市外局番の数字だけではなく市内局番まで見ないと決まらないのです。

あら、本当ですね。これらも考慮すると、なかなか難しそうですね。
市内局番も含めた最新のデータはどこで入手できるのだろう。

貴重な情報ありがとうございました。

2018.05.25 10:36 | URL | #ofj98f56 [edit]
市内局番一覧 says...""

下記にありますね。pdf or Excel
かなり膨大に件数になるので、完璧に対応させるとなると大変そう(-_-;)

http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/number_shitei.html#kotei-denwa

2018.05.25 14:50 | URL | #ofj98f56 [edit]
よろずや says..."Re:市外局番の桁数について"

こんにちは。
台風の影響はどうでしたか。
そんな中ですが、暇つぶしのプログラムができました。
総務省の9本のエクセルファイルから、223件の市外局番データの抽出に成功しました。
Excelからmdbファイルを作りクエリで抽出するのに、下記マシンで64分かかりました。
Celeron 1.1GHz 4GB Win10 64bit Excel365 32bit
メモリ8GB の Win7 だと 20分 程です。
あんまり遅いので進行状況の表示が必要でした。
どこからUPすればよろしいでしょうか?

2018.10.01 09:34 | URL | #TXvl0E4U [edit]
hatena says..."よろずやさん"

> そんな中ですが、暇つぶしのプログラムができました。総務省の9本のエクセルファイルから、223件の市外局番データの抽出に成功しました。

おおっ!!素晴らしいです。

> どこからUPすればよろしいでしょうか?

ファイルサイズが1MB以下なら、下記のメールフォームに添付して送付してください。
https://form1ssl.fc2.com/form/?id=ec50d05cbf37b286

2018.10.02 14:05 | URL | #5uE6dEgY [edit]
よろずや says..."Re:市外局番の桁数について"

こんにちは。
ImportAreacode2.xlsm ですが、Win10, Excel356 及び Win7, Excel2010
で動作確認してあります。
また、拡張子.xls で保存して、WinXP, Excel2003 でも動作確認しています。

ImportAreacode2.xlsm で作った、modSplitAreacode.bas のテストですが
総務省の9つのエクセルファイルにインポートし、全数テストしてあります。
備考欄に、=SplitTelNumber($C3&TEXT(ROW(),"0000"))
条件付き書式に、=$D3&"-"&$E3<>LEFT(H3,7) で着色、
色フィルターで天気予報以外抽出されないことを確認。
っとぉーーー、#Value 発見。
ElseIf InStr(AreaCode6, Mid(TelNo, 2, 5)) Then
Dgt = Mid(AreaCode6, InStr(AreaCode6, Mid(TelNo, 2, 5)) + 5, 1)
SplitTelNumber = Format(TelNo, String(Dgt, "&") & Delimiter _
& String(6 - Dgt, "&") & Delimiter & "&&&&")
の2行目の +5を +6に修正して下さいませ。
ElseIf InStr(AreaCode6, Mid(TelNo, 2, 5)) Then
Dgt = Mid(AreaCode6, InStr(AreaCode6, Mid(TelNo, 2, 5)) + 6, 1)
SplitTelNumber = Format(TelNo, String(Dgt, "&") & Delimiter _
& String(6 - Dgt, "&") & Delimiter & "&&&&")
ごめんなさい。

2018.10.08 12:37 | URL | #TXvl0E4U [edit]
hatena says..."よろずやさん"

ファイル送付ありがとうございます。
時間が取れなくて、まだ、動作確認してないのですが、
確認取れたら、ブログにアップロードさせていただきたいと思います。
よろしいでしょうか。

2018.10.09 15:22 | URL | #5uE6dEgY [edit]
よろずや says..."Re:市外局番の桁数について"

良しなに、お取り計らい下さい。

2018.10.09 15:31 | URL | #TXvl0E4U [edit]

Leave a reply






Trackbacks

trackback URL
https://hatenachips.blog.fc2.com/tb.php/503-50e30e53
該当の記事は見つかりませんでした。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。