2011年2月3日木曜日

電話番号データから局番区切りで文字列取得

人生初、VBAでユーザー定義関数を作りました。
内容はとても簡単なもの。
Excel関数レベルです。

別にユーザー定義関数にしなくてもプログラム的には問題なかったのですが、それだと書くのが面倒なのと、ソースがごちゃっとしてしまうのとでこうして関数を作りました。

関数が果たす要件は
・電話番号データから市外局番、市内局番、加入者番号をそれぞれ取得する
というもので、インプットされる値は
・半角数字と半角ハイフンで入力された電話番号
という前提をおいています。

プログラムを書く前に、A4用紙にざざっと構造を書きました。
直接開発環境に向かうと私の頭はとっちらかってしまうので、こうして手書きで構造を見える形にすることが多いです。

以下ソースです。
-----------------------------------------------------------------
'--------------------
Function GetTelNum1(TelNum1 As String) As String
'引数に与えられた電話番号(99-9999-9999)から市外局番を取得する
        GetTelNum1 = Left(TelNum1, InStr(1, TelNum1, "-", vbTextCompare) - 1)
      
End Function
'----------< end of Function >----------


'--------------------
Function GetTelNum2(TelNum2 As String) As String
'引数に与えられた電話番号(99-9999-9999)から市内局番を取得する
        GetTelNum2 = Mid(TelNum2, InStr(1, TelNum2, "-", vbTextCompare) + 1, _
            InStrRev(TelNum2, "-", , vbTextCompare) - InStr(1, TelNum2, "-", vbTextCompare) - 1)
      
End Function
'----------< end of Function >----------


'--------------------
Function GetTelNum3(TelNum3 As String) As String
'引数に与えられた電話番号(99-9999-9999)から加入者番号を取得する
        GetTelNum3 = Right(TelNum3, Len(TelNum3) - InStrRev(TelNum3, "-", , vbTextCompare))
      
End Function
'----------< end of Function >----------

-----------------------------------------------------------------

Excel関数でも似たような文字列の取得をよくやります。
この場合、Excel関数だったら
市外局番 = Left(A1,Search("-",A1,1)-1)
市内局番 = Mid(A1,Search("-",A1,1)+1,Search("-",A1,Search("-",A1,1)+1)-Search("-",A1,1)-1)
加入者番号 = Right(A1,Len(A1)-Search("-",A1,Search("-",A1,1)))
となりますかね。

もっと簡単な取得アルゴリズムがあるのかもしれませんが、私が今の知識で思いついたのは上記の内容でした。

ユーザー定義関数って、ちょっと一手間必要な処理に大活躍しそうですね。
今回は簡単な内容でしたが、できあがったものを使うのはとても楽しかったです。

これからもっといろんな関数を作ってみたいなと思いました。

0 件のコメント:

コメントを投稿