- ベストアンサー
VBAでの電話番号表示について教えてください
- VBA初心者ですが、TextBoxに電話番号を入力した場合の表示と、セルにそのまま入力する方法を教えてください。
- 特定の条件に一致した場合のみ、指定した表示形式でTextBoxに電話番号を表示し、セルにもそのままの表示形式で繁栄したいです。
- VBAに詳しい方、ぜひご教示ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足:"00-1111-2222"は、入力された値に相当します。 ですから、"00-1111-2222"部分は、値を代入した変数に置き換えてください。
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
先の回答のように強引に1行に書くのを好まないのであれば・・・。 素直に Select Case文を使用。 その目的は、フォーマットの書式を確定すること。 Format関数では、Replace関数で電話番号から"-"を消して引数にセット。 Public Function XferPNumber(ByVal pNumber As String) As String Dim fString As String Select Case InStr(1, pNumber, "-") Case 3 fString = "(00)0000-0000" Case 4 fString = "(000)000-0000" Case 5 fString = "(0000)00-0000" Case Else fString = "" End Select XferPNumber = IIf(Len(fString) > 0, Format(Replace(pNumber, "-", ""), fString), pNumber) End Function ※XferPNumberは、手続きを示しているだけです。 ※添付のPRTSCは、XferPNumberのテスト結果です。 ※これだと、"(0000)00-0000"はいかようにも・・・。
お礼
f_a_007 さん 親切に再度、ご提案して頂き有難う御座います。 VBA、初心者の私に有難う御座います。 ご提案、頂いた回答も反映されません。 何が悪いのか分かりません。もう少し、頑張ってみます。 質問の仕方が悪いのでしょうか? 一つのTextboxで複数の条件の電話番号を条件に合わせ 入力すると その条件に合う形式の電話番号がまずTextBoxに 変換表示され、 そんままセルに反映できるようにしたいのですが…。 継続して頑張ります。初心者で解読力が悪くて ご迷惑をお掛けしてすいません。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
xx-xxxx-xxxx=>(xx)xxxx-xxxx xxx-xxx-xxxx=>(xxx)xxx-xxxx xxxx-xx-xxxx=>(xxxx)xx-xxxx ということであれば・・・。 ? Format(CutStr("00-1111-2222","-",1),"(00)") & CutStr("00-1111-2222", "-", 2, 3) (00)1111-2222 ? Format(CutStr("000-111-2222","-",1),"(000)") & CutStr("000-111-2222", "-", 2, 3) (000)111-2222 ? Format(CutStr("0000-11-2222","-",1),"(0000)") & CutStr("0000-11-2222", "-", 2, 3) (0000)11-2222 Format()の2番目の引数を可変にすればOK。 ? Format(CutStr("00-1111-2222","-",1),"(" & String(Instr(1, "00-1111-2222", "-") - 1,"0") &")") & CutStr("000-111-2222", "-", 2, 3) (00)111-2222 ? Format(CutStr("000-111-2222","-",1),"(" & String(Instr(1, "000-111-2222", "-") - 1,"0") &")") & CutStr("000-111-2222", "-", 2, 3) (000)111-2222 ? Format(CutStr("0000-11-2222","-",1),"(" & String(Instr(1, "0000-11-2222", "-") - 1,"0") &")") & CutStr("0000-11-2222", "-", 2, 3) (0000)11-2222 なお、次の CutStr関数をモジュールに追加する必要があります。 Public Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer, Optional M As Integer) As String Dim strDatas() As String strDatas = Split("" & Separator & Text, Separator, , 0) If M > 0 Then CutStr = strDatas(N * Abs(N <= UBound(strDatas))) & _ Separator & strDatas(M * Abs(M <= UBound(strDatas))) Else CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End If End Function ■利用方法 CutStr("00-1111-2222","-",1)・・・・"-"で分割した1番目を戻す。 CutStr("00-1111-2222","-",2, 3)・・・"-"で分割した2番目と3番目とを戻す。 ※複数戻す時は、"-"も含む。
お礼
f_a_007 さん お礼の入力、大変遅くなりまして申し訳御座いません。 f_a_007 さんのご提案、有難う御座います。 自分なりにしてみましたが 何だか旨く行きません。 一つのTextBox(同じTextBox1)内で複数の電話番号 (市外局番から)を処理をしましたが複数の条件が 処理されません。 (例 03-1234-5678)を入力した電話番号が ご提案頂いた構文記載の(00)111-2222としか 表示されません。 もう少し、ご提案頂いた構文を研究してみます。 本当にありがとうございました。
お礼
f_a_007 さん 何度も、親切に有難う御座いました。 wdを置き換えたら出来ました。 大変助かります、有難う御座います。