Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8187 / 13644 ツリー ←次へ | 前へ→

【34664】インプットボックスの入力文字制限 ERIKO 06/2/9(木) 15:07 質問[未読]
【34665】Re:インプットボックスの入力文字制限 Kein 06/2/9(木) 15:29 回答[未読]
【34714】Re:インプットボックスの入力文字制限 ERIKO 06/2/10(金) 14:06 質問[未読]
【34718】Re:インプットボックスの入力文字制限 Kein 06/2/10(金) 15:14 回答[未読]
【34731】Re:インプットボックスの入力文字制限 ERIKO 06/2/10(金) 16:55 お礼[未読]

【34664】インプットボックスの入力文字制限
質問  ERIKO  - 06/2/9(木) 15:07 -

引用なし
パスワード
   こんにちは。

以前↓の質問でお世話になったのですが、

『名前や住所が入力されているデータシートから
納品書を作って印刷する、という作業をしているのですが、
電話番号・郵便番号のセルに「数字」と「-」以外が入力されていたら、
警告メッセージを表示するにはどうすればよいでしょうか?』

さらに、質問させてください。

上記の場合に、インプットボックスを表示して、正しい電話番号・郵便番号を入力し、シートに反映させようと思っています。

その際、インプットボックスに「数字」と「-」以外が入力されていたら、「文字が不適切です」というようなメッセージを表示して、もう一度インプットボックスを表示するようにしたいのですが、どうすればよいでしょうか?

どうか、よろしくお願いいたします。

【34665】Re:インプットボックスの入力文字制限
回答  Kein  - 06/2/9(木) 15:29 -

引用なし
パスワード
   正規表現を使うのが最も確実ですが、あえて簡単にやるなら

Sub Get_TelNumber()
  Dim TelNum As String
 
  Do
   TelNum = InputBox("電話番号を入力して下さい")
   If TelNum = "" Then Exit Sub
   If Len(TelNum) <> 9 Then GoTo NLine
   If IsNumeric(Left(TelNum, 4)) And _
   Mid(TelNum, 5, 1) = "-" And _
   IsNumeric(Right(TelNum, 4)) Then Exit Do
NLine:
   MsgBox "入力した値は電話番号として認識できません", 48
  Loop
  MsgBox TelNum
End Sub

4桁の局番 & "-" & 4桁の番号 という値のみを、電話番号として扱ってます。

【34714】Re:インプットボックスの入力文字制限
質問  ERIKO  - 06/2/10(金) 14:06 -

引用なし
パスワード
   Kein さん

ありがとうございます。

この場合、「4桁の局番 & "-" & 4桁の番号」ということは
****-****という形のみということになるのでしょうか?

できれば、「***-***-****」の形でしかも、***部分の桁数を限定しないようにしたいのですが・・・

たとえば、「03-1234-5678」や「092-123-4567」のどちらにも対応できるような形にできますか?

すみません。よろしくお願いいたします。


▼Kein さん:
>正規表現を使うのが最も確実ですが、あえて簡単にやるなら
>
>Sub Get_TelNumber()
>  Dim TelNum As String
> 
>  Do
>   TelNum = InputBox("電話番号を入力して下さい")
>   If TelNum = "" Then Exit Sub
>   If Len(TelNum) <> 9 Then GoTo NLine
>   If IsNumeric(Left(TelNum, 4)) And _
>   Mid(TelNum, 5, 1) = "-" And _
>   IsNumeric(Right(TelNum, 4)) Then Exit Do
>NLine:
>   MsgBox "入力した値は電話番号として認識できません", 48
>  Loop
>  MsgBox TelNum
>End Sub
>
>4桁の局番 & "-" & 4桁の番号 という値のみを、電話番号として扱ってます。

【34718】Re:インプットボックスの入力文字制限
回答  Kein  - 06/2/10(金) 15:14 -

引用なし
パスワード
   いちおう、このように変更すればよいでしょう。

Sub Get_TelNumber()
  Dim TelNum As String
  Dim x As Integer, y As Integer
 
  Do
   TelNum = InputBox("電話番号を入力して下さい")
   If TelNum = "" Then Exit Sub
   If Not IsNumeric(Right(TelNum, 4)) Then GoTo NLine
   x = InStr(1, TelNum, "-")
   y = InStrRev(TelNum, "-", -1)
   If x = 0 Or y = 0 Or x = y Then GoTo NLine
   If Not IsNumeric(Left(TelNum, x - 1)) Then
     GoTo NLine
   ElseIf Not IsNumeric(Mid(TelNum, x + 1, y - 1 - x)) Then
     GoTo NLine
   Else
     Exit Do
   End If
NLine:
   MsgBox "入力した値は電話番号として認識できません", 48
  Loop
  MsgBox TelNum
End Sub

ただし、123456-78910-3333 というような値も電話番号として認識してしまいます。
これを防ぐには
>If x = 0 Or y = 0 Or x = y Then GoTo NLine
を、Select Case 構文に変更して、"x や y が特定の位置範囲にあったときのみ
処理を進める。それ以外は NLine に飛ばす" というコードに書き直します。
そこはあなたが努力して、やってみて下さい。

【34731】Re:インプットボックスの入力文字制限
お礼  ERIKO  - 06/2/10(金) 16:55 -

引用なし
パスワード
   どうもありがとうございました。

自社システムに取り込むのに、数字と”-”以外が入っていなければ
(少々変な電話番号であっても)エラーは発生しないので、ぜひ使わせていただきます。

とっても助かりました!!

▼Kein さん:
>いちおう、このように変更すればよいでしょう。
>
>Sub Get_TelNumber()
>  Dim TelNum As String
>  Dim x As Integer, y As Integer
> 
>  Do
>   TelNum = InputBox("電話番号を入力して下さい")
>   If TelNum = "" Then Exit Sub
>   If Not IsNumeric(Right(TelNum, 4)) Then GoTo NLine
>   x = InStr(1, TelNum, "-")
>   y = InStrRev(TelNum, "-", -1)
>   If x = 0 Or y = 0 Or x = y Then GoTo NLine
>   If Not IsNumeric(Left(TelNum, x - 1)) Then
>     GoTo NLine
>   ElseIf Not IsNumeric(Mid(TelNum, x + 1, y - 1 - x)) Then
>     GoTo NLine
>   Else
>     Exit Do
>   End If
>NLine:
>   MsgBox "入力した値は電話番号として認識できません", 48
>  Loop
>  MsgBox TelNum
>End Sub
>
>ただし、123456-78910-3333 というような値も電話番号として認識してしまいます。
>これを防ぐには
>>If x = 0 Or y = 0 Or x = y Then GoTo NLine
>を、Select Case 構文に変更して、"x や y が特定の位置範囲にあったときのみ
>処理を進める。それ以外は NLine に飛ばす" というコードに書き直します。
>そこはあなたが努力して、やってみて下さい。

8187 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free