DBへの住所データの取り込みで悩んでいます。
電話番号の取り込み時に「電話番号:xxx-xxx-xxx」という
データがあり、このデータの「xxx-xxx-xxx」のみを
取り出したいのです。
上記以外のケースも考えられるので数値とハイフンのみを
取り出したいのですが方法が分かりません。
開発環境はVB6+XPです。
宜しくお願い致します。
Left関数やRight関数又はMid関数を使えば可能と思われます。
上記の場合だと、Right$("電話番号:xxx-xxx-xxx", 11)
とすればxxx-xxx-xxxだけが取得出来ます。
splitで区切りを:にすればいいのでは?
編集 削除InStr関数で:の位置を取得してMidで取り出すって手もある。
編集 削除>上記以外のケースも考えられるので数値とハイフンのみを
>取り出したいのですが方法が分かりません。
その『上記以外のケース』にどんなものがあるかが重要なんですが?(^^;)
数値とハイフンのみ取り出す方法は 初心者999さんのあげてくれた
関数なんかを使えば可能ですが、例えば
○○区△△マンション301
の 301 とか
郵便番号:999-8877
○○町333-11番地
の 999-8877 とか 333-11 も数値とハイフンのみなんですが?
電話番号と識別できる必要がありますよね?そのあたりをもっと
考えていただかないと誰にも実現できないと思います。
みなさんありがとうございます。
具体的にはCSVデータの取り込みになりますので、電話番号のみが
入っていることが前提となります。
ただ、電話番号以外のゴミが入っているケースがありましたので
電話番号だけを取り出したいのです。
そこで、以下のような方法でやってみたのですが、
電話番号 = "tel xxx-xxxx-xxxx"
'0〜9と-()以外は除去
For liCnt = 1 To Len(電話番号)
Select Case Mid(電話番号, liCnt, 1)
Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "(", ")"
電話番号 = 電話番号
Case Else
電話番号 = Replace(電話番号, Mid(電話番号, liCnt, 1), "")
End Select
Next liCnt
結果は「e xxx-xxxx-xxxx」になってしまいます。
liCntの値が一つ前の処理よりも少なくなるとFor文ではダメなんでしょうか??
削除したぶん引けばええやん??
[VB6.0]
Private Sub Command1_Click()
Dim 電話番号 As String
Dim wDeleteCount As Integer
Dim wMidIndex As Integer
電話番号 = "tel 111-2345-9999"
wDeleteCount = 0
'0〜9と-()以外は除去
For liCnt = 1 To Len(電話番号)
wMidIndex = liCnt - wDeleteCount
Select Case Mid(電話番号, wMidIndex, 1)
Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "(", ")"
電話番号 = 電話番号
Case Else
電話番号 = Replace(電話番号, Mid(電話番号, wMidIndex, 1), "")
wDeleteCount = wDeleteCount + 1
End Select
Next liCnt
MsgBox 電話番号
End Sub
特攻隊長まるるうさん、ありがとうございました。
よく考えれば仰るとおりですね。
Do〜Loopを使うって手もある。
Private Sub Command1_Click()
Dim sTel$, sBuff As String
Dim lPos As Long
sTel = "tel 111-2345-9999"
lPos = 1
Do Until (lPos > Len(sTel))
sBuff = Mid$(sTel, lPos, 1)
If Not (sBuff Like "[0-9()-]") Then
sTel = Left$(sTel, lPos - 1) & Mid$(sTel, lPos + 1)
Else
lPos = lPos + 1
End If
Loop
Debug.Print sTel
End Sub
※普段あんまりLike使わないから書き方間違ってるかも?
一応動きますが、詳しい方フォロー願いますm(__)m
過去 ListView の Item 削除なんかでサンプル載せたけど、
ループを逆に回すってのも定番ですよねぇw
[VB6.0]
Private Sub Command1_Click()
Dim 電話番号 As String
電話番号 = "tel 111-2345-9999"
'0〜9と-()以外は除去
For liCnt = Len(電話番号) To 1 Step -1
Select Case Mid(電話番号, liCnt, 1)
Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "(", ")"
電話番号 = 電話番号
Case Else
電話番号 = Replace(電話番号, Mid(電話番号, liCnt, 1), "")
End Select
Next liCnt
MsgBox 電話番号
End Sub
…解決したなら解決マークつけて欲しい(TT)