Excel VBA質問箱 IV

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

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


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

【31941】文字を判断 eriko 05/12/2(金) 18:10 質問[未読]
【31942】Re:文字を判断 やっちん 05/12/2(金) 19:03 回答[未読]
【31943】Re:文字を判断 ぱっせんじゃー 05/12/2(金) 19:37 発言[未読]
【31947】Re:文字を判断 ichinose 05/12/2(金) 20:35 発言[未読]
【31948】Re:文字を判断 ぱっせんじゃー 05/12/2(金) 20:46 発言[未読]
【31949】Re:文字を判断やっちんさん、失礼しました ichinose 05/12/2(金) 20:55 発言[未読]
【31959】Re:文字を判断やっちんさん、失礼しました やっちん 05/12/2(金) 22:51 発言[未読]
【31944】Re:文字を判断 だるま 05/12/2(金) 19:42 回答[未読]
【31945】Re:文字を判断 やっちん 05/12/2(金) 20:21 発言[未読]
【31946】Re:文字を判断 kobasan 05/12/2(金) 20:31 回答[未読]
【31985】Re:文字を判断 eriko 05/12/3(土) 16:28 お礼[未読]

【31941】文字を判断
質問  eriko  - 05/12/2(金) 18:10 -

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

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

よろしくお願いいたします。

(スミマセン、お礼や再質問は明日17:00になります。)

【31942】Re:文字を判断
回答  やっちん  - 05/12/2(金) 19:03 -

引用なし
パスワード
   ▼eriko さん:
こんにちは。

もっと簡単な方法があるかもしれませんがとりあえず。
前後のスペースは除いた文字列を1文字づつ判断するようにしています。
OK_CHARにない文字があればエラーメッセージを表示します。


Option Explicit
Const OK_CHAR = "0123456789-"
Sub test()
  
'未入力
  Call CheckNo("")
'スペースのみ
  Call CheckNo(" ")
'数字のみ
  Call CheckNo("123")
'前にスペース + 数字
  Call CheckNo(" 123")
'前にスペース + 数字 + 後にスペース
  Call CheckNo(" 123 ")
'間にスペース
  Call CheckNo(" 12 3 ")
'数字以外入力
  Call CheckNo("12a3")
'数字以外入力
  Call CheckNo("12d3")
'数字、'-'混在
  Call CheckNo("123-456-789")
''-'のみ
  Call CheckNo("----")
End Sub

Sub CheckNo(ByVal pStr As String)
  Dim sT As String
  Dim nI As Integer
  sT = Trim(pStr)
  
  For nI = 1 To Len(sT)
    If InStr(OK_CHAR, Mid(sT, nI, 1)) = 0 Then
      MsgBox pStr & Chr(10) & "数字または'-'以外が入力されています。"
      Exit For
    End If
  Next nI
End Sub

【31943】Re:文字を判断
発言  ぱっせんじゃー  - 05/12/2(金) 19:37 -

引用なし
パスワード
   横から失礼します。

単純に考えれば、
前に"="を付けて、数値が返ってきたら正しい、とすればいいと思うのですが、
"="を付けたらエラーになる場合の処理がわかりません。
たとえば、

(03)1234-5678
のように()を使ってる場合や、
03 1234 5678
のようにスペースを使っている場合は
前に"="を付けたらエラーになります。
このエラーになる、というのを利用できると思うのですが。

識者の回答をお待ちください。

【31944】Re:文字を判断
回答  だるま WEB  - 05/12/2(金) 19:42 -

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

こんな関数ではいかがでしょうか。^d^

Sub test()
  Const S As String = "123-4567あ"
  
  If Not IsNum(S) Then
    MsgBox "数字以外があります。", vbExclamation
  Else
    MsgBox "OK"
  End If
End Sub

Function IsNum(S As String) As Boolean
  If S = "" Then
    IsNum = False
  Else
    If Not S Like "*[!-0-9]*" Then
      IsNum = True
    Else
      IsNum = False
    End If
  End If
End Function

【31945】Re:文字を判断
発言  やっちん  - 05/12/2(金) 20:21 -

引用なし
パスワード
   ▼だるま さん:
こんにちは。
シンプルできれいですね。
Like 演算子覚えておきます。

ぱっせんじゃーさんが言われているのは多分
IsError(Application.Evaluate(st))
ではないでしょうか?間違ってたらごめんなさい。
IsNumeric(st)もそうですが、
すり抜けるパターンがあるので難しいですね。

【31946】Re:文字を判断
回答  kobasan  - 05/12/2(金) 20:31 -

引用なし
パスワード
   皆さん 今晩は。

正規表現の簡単な練習材料としてやってみました。

A列にこのようなデータがあるとして。
271-1111
13
27-33g
32
2223
4888-2k
733-0851

標準モジュールに貼り付けて、試してみてください。

Sub test()
  Dim regEx As Object
  Dim r As Range
   
  '正規表現を作成
  Set regEx = CreateObject("VBScript.RegExp")
  regEx.Pattern = "[^0-9-]" '0123456789-以外の文字にマッチ
  '
  For Each r In Range("A1", Range("A65536").End(xlUp))
    If regEx.test(r.Text) Then
      r.Select
      MsgBox "0123456789-以外の文字"
    End If
  Next
  '
  Set regEx = Nothing
End Sub

【31947】Re:文字を判断
発言  ichinose  - 05/12/2(金) 20:35 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
こんばんは。
文字列のマッチングは色んな方法がありますよねえ。
やっちん や だるまさんの方法で良いとおもいます。


>単純に考えれば、
>前に"="を付けて、数値が返ってきたら正しい、とすればいいと思うのですが、
>"="を付けたらエラーになる場合の処理がわかりません。
>たとえば、
>
>(03)1234-5678
>のように()を使ってる場合や、
>03 1234 5678
>のようにスペースを使っている場合は
>前に"="を付けたらエラーになります。
>このエラーになる、というのを利用できると思うのですが。
これもすごい発想ですねえ!!
気が付きませんでした・・。
おっしゃっているのは、

'===================================
Sub test()
  MsgBox chknum("(20)121-21")
End Sub
'============================================
Function chknum(mystr As String) As Boolean
  chknum = True
  If IsError(Evaluate("=" & mystr)) Then
    chknum = False
    End If
End Function


こんな方法ですね?
でもね・・・。

sub test2()
 msgbox chknum("d23")
 msgbox chknum("222e33")
end sub

これが通っちゃうんだよね!!

でも、すごくおもしろいですけどね!!

【31948】Re:文字を判断
発言  ぱっせんじゃー  - 05/12/2(金) 20:46 -

引用なし
パスワード
   皆さんの回答、おおいに勉強させていただいております!!

私もいろいろ試してみるのですが
"-"でSplitしたものが数値であるか判定したり・・・。
そもそも電話番号は書式が文字列だったり前に"'"が付いていたり
となかなかいいコードが考え付きません。
このスレッドは今後ROMさせていただきます。

【31949】Re:文字を判断やっちんさん、失礼しました
発言  ichinose  - 05/12/2(金) 20:55 -

引用なし
パスワード
   やっちんさん
>文字列のマッチングは色んな方法がありますよねえ。
>やっちん や だるまさんの方法で良いとおもいます。
敬称の付け忘れです。
大変失礼しました。。

【31959】Re:文字を判断やっちんさん、失礼しました
発言  やっちん  - 05/12/2(金) 22:51 -

引用なし
パスワード
   ▼ichinose さん:
>敬称の付け忘れです。
>大変失礼しました。。

こんにちは。
全然OKですよ。
お心遣いありがとうございます。

【31985】Re:文字を判断
お礼  eriko  - 05/12/3(土) 16:28 -

引用なし
パスワード
   みなさま。

ありがとうございました。
いろんな方法があって、思っていたより難しい!?ですね。
(初心者なので‥)

とりあえず、試してみたいと思います。
また、分からないときはよろしくお願いします。

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