Excel VBA質問箱 IV

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

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


11146 / 13646 ツリー ←次へ | 前へ→

【17753】禁止文字 KAME 04/9/7(火) 10:23 質問[未読]
【17755】Re:禁止文字 IROC 04/9/7(火) 10:32 回答[未読]
【17758】Re:禁止文字 こもれび 04/9/7(火) 10:54 発言[未読]
【17766】Re:禁止文字 KAME 04/9/7(火) 14:59 質問[未読]
【17768】Re:禁止文字 こもれび 04/9/7(火) 15:10 発言[未読]
【17772】Re:禁止文字 KAME 04/9/7(火) 15:37 質問[未読]
【17778】Re:禁止文字 IROC 04/9/7(火) 16:39 回答[未読]
【17783】Re:禁止文字 Kein 04/9/7(火) 17:49 回答[未読]
【17793】Re:禁止文字 KAME 04/9/7(火) 21:59 お礼[未読]
【17795】Re:禁止文字 ちゃっぴ 04/9/7(火) 23:22 回答[未読]
【17801】Re:禁止文字 IROC 04/9/8(水) 8:37 回答[未読]
【17802】Re:禁止文字 ちゃっぴ 04/9/8(水) 9:06 回答[未読]
【17803】Re:禁止文字 IROC 04/9/8(水) 9:32 回答[未読]
【17841】Re:禁止文字 KAME 04/9/8(水) 18:16 質問[未読]
【17843】Re:禁止文字 KAME 04/9/8(水) 18:20 発言[未読]
【17850】Re:禁止文字 ちゃっぴ 04/9/8(水) 19:16 回答[未読]
【17853】Re:禁止文字 KAME 04/9/8(水) 19:39 質問[未読]
【17869】Re:禁止文字 ちゃっぴ 04/9/9(木) 9:30 回答[未読]
【17870】Re:禁止文字 KAME 04/9/9(木) 11:13 お礼[未読]

【17753】禁止文字
質問  KAME  - 04/9/7(火) 10:23 -

引用なし
パスワード
   お世話になっております。
セルに入力する文字で、英数字とアンダーバー以外は使えない。
ということをしたいのですが、どのようにすればよろしいでしょうか?
タブや、スペースも使えなくしたいです。

宜しくお願いいたします。

【17755】Re:禁止文字
回答  IROC  - 04/9/7(火) 10:32 -

引用なし
パスワード
   全角半角についてはどうなりますか?

【17758】Re:禁止文字
発言  こもれび  - 04/9/7(火) 10:54 -

引用なし
パスワード
   こもれびです

入力した後でのチェックで引っかかればよいのか、それとも
文字入力の時点で引っかけなければならないのかそのあたりも
教えてほしいですね。

【17766】Re:禁止文字
質問  KAME  - 04/9/7(火) 14:59 -

引用なし
パスワード
   全角、半角は判別しません。特殊文字(アンダーバー以外)とスペース、タブの入力を禁止したいです。判別は入力後にコマンドボタンを押して行います。

皆様、宜しくお願いいたします。

【17768】Re:禁止文字
発言  こもれび  - 04/9/7(火) 15:10 -

引用なし
パスワード
   こもれびです

先に確認しておきたいのですが、判別するセルは複数あるのですか?
それとも1個のみなのでしょうか?

【17772】Re:禁止文字
質問  KAME  - 04/9/7(火) 15:37 -

引用なし
パスワード
   ▼こもれび さん:
>先に確認しておきたいのですが、判別するセルは複数あるのですか?
>それとも1個のみなのでしょうか?
判別するセルは複数あります。
シート1のD列にある文字について判別をかけます。

【17778】Re:禁止文字
回答  IROC  - 04/9/7(火) 16:39 -

引用なし
パスワード
   これで如何でしょうか?

アルファベットは大文字・小文字とも許可してあります。


Private Sub Worksheet_Change(ByVal Target As Range)
Dim myStr As String
Dim i As Long
  
  If Target.Count <> 1 Then Exit Sub
  If Target.Column <> 4 Then Exit Sub
  If Target.Value = "" Then Exit Sub

  myStr = StrConv(Target.Value, vbNarrow)

  For i = 1 To Len(myStr)
    If IsNumeric(Mid(myStr, i, 1)) = True Then
    ElseIf Mid(myStr, i, 1) = "_" Then
    ElseIf Asc(Mid(myStr, i, 1)) >= 65 And Asc(Mid(myStr, i, 1)) <= 90 Then
    ElseIf Asc(Mid(myStr, i, 1)) >= 97 And Asc(Mid(myStr, i, 1)) <= 122 Then
    Else
      MsgBox "X"
      Target.Value = ""
      Target.Select
      Exit Sub
    End If
  Next i
End Sub

【17783】Re:禁止文字
回答  Kein  - 04/9/7(火) 17:49 -

引用なし
パスワード
   Sub Check_CellSt()
  Dim MyR As Range, C As Range
  Dim ObjRE As Object, Match As Object, Matches As Object
  Dim CkSt As String, Ck As Boolean
 
  On Error GoTo ErLine
  Set MyR = Range("D:D").SpecialCells(2)
  On Error GoTo 0
  Set ObjRE = CreateObject("VBScript.RegExp")
  With ObjRE
   .Pattern = "\W"
   .Global = True
  End With
  For Each C In MyR
   CkSt = StrConv(C.Text, vbNarrow)
   If ObjRE.Test(CkSt) Then
     Ck = False: Set Matches = ObjRE.Execute(CkSt)
     For Each Match In Matches
      If Match.Value <> "_" Then
        Ck = True: Exit For
      End If
     Next
     Set Matches = Nothing
     If Ck = True Then C.Interior.ColorIndex = 3
   End If
  Next
ErLine:
  Set MyR = Nothing: Set ObjRE = Nothing
End Sub

で、どうでしょーか ? 英数とアンダースコア以外の文字が入力されたセルを、
赤で塗りつぶしてます。
正規表現で「かつ(And)」というPatternが設定できれば、\W にアンダースコア抜きの
意味を含ませることが出来るのですが、私には分かりません。どなたかご存知の方は、
レスをお願いします。m(_ _)m

【17793】Re:禁止文字
お礼  KAME  - 04/9/7(火) 21:59 -

引用なし
パスワード
   皆さんありがとう御座いました。
おかげさまで、思い通りのものが作れました。
また、質問したときは宜しくお願いいたします。

【17795】Re:禁止文字
回答  ちゃっぴ  - 04/9/7(火) 23:22 -

引用なし
パスワード
   >正規表現で「かつ(And)」というPatternが設定できれば、\W にアンダースコア抜きの
>意味を含ませることが出来るのですが、私には分かりません。どなたかご存知の方は、
>レスをお願いします。m(_ _)m

解決した後でなんですが・・・

Sub sdaf()
  If Range("a1").Value Like "*[!0-9A-Z_a-zA-Za-z]*" Then
    MsgBox "err"
  End If
End Sub

こんな感じで簡単にまとまるかと・・・

RegExpの場合

Pattern = "[^0-9A-Z_a-zA-Za-z]"

こんな感じになるのかな?
あと、MatchではなくTestメソッドですみそうです。

【17801】Re:禁止文字
回答  IROC  - 04/9/8(水) 8:37 -

引用なし
パスワード
   >Sub sdaf()
>  If Range("a1").Value Like "*[!0-9A-Z_a-zA-Za-z]*" Then
>    MsgBox "err"
>  End If
>End Sub

試させていただいたところ
全角数字でエラーになってしまったのですけど・・

【17802】Re:禁止文字
回答  ちゃっぴ  - 04/9/8(水) 9:06 -

引用なし
パスワード
   ▼IROC さん:
>>Sub sdaf()
>>  If Range("a1").Value Like "*[!0-9A-Z_a-zA-Za-z]*" Then
>>    MsgBox "err"
>>  End If
>>End Sub
>
>試させていただいたところ
>全角数字でエラーになってしまったのですけど・・

失礼、追加してやればいいです。

"*[!0-9A-Z_a-z0-9A-Z_a-z]*"

【17803】Re:禁止文字
回答  IROC  - 04/9/8(水) 9:32 -

引用なし
パスワード
   >失礼、追加してやればいいです。
>
>"*[!0-9A-Z_a-z0-9A-Z_a-z]*"


参考になります。どうも有り難う御座いました。

【17841】Re:禁止文字
質問  KAME  - 04/9/8(水) 18:16 -

引用なし
パスワード
   ▼ちゃっぴ さん:
>Sub sdaf()
>  If Range("a1").Value Like "*[!0-9A-Z_a-zA-Za-z]*" Then
>    MsgBox "err"
>  End If
>End Sub
>
>こんな感じで簡単にまとまるかと・・・

[]←この記号はエラーとしない場合は、どうすれば良いでしょうか?

【17843】Re:禁止文字
発言  KAME  - 04/9/8(水) 18:20 -

引用なし
パスワード
   ▼KAME さん:
>▼ちゃっぴ さん:
>>Sub sdaf()
>>  If Range("a1").Value Like "*[!0-9A-Z_a-zA-Za-z]*" Then
>>    MsgBox "err"
>>  End If
>>End Sub
>>
>>こんな感じで簡単にまとまるかと・・・
>
>[]←この記号はエラーとしない場合は、どうすれば良いでしょうか?
       ↑「も」でした。。

【17850】Re:禁止文字
回答  ちゃっぴ  - 04/9/8(水) 19:16 -

引用なし
パスワード
   >>[]←この記号はエラーとしない場合は、どうすれば良いでしょうか?
>       ↑「も」でした。。

なんか、正規表現勉強会の様相を呈してきましたね・・・

とりあえずこれでできるみたいです。

"*[![]0-9A-Z_a-z0-9_A-Za-z]*"

なんか、頭が混乱してきた・・・( ̄o ̄;)ボソッ

【17853】Re:禁止文字
質問  KAME  - 04/9/8(水) 19:39 -

引用なし
パスワード
   ▼ちゃっぴ さん:
>とりあえずこれでできるみたいです。
>
>"*[![]0-9A-Z_a-z0-9_A-Za-z]*"
試したのですが、
特殊文字に対してエラーを出さなくなってしまったみたいなんですが。。。

>なんか、頭が混乱してきた・・・( ̄o ̄;)ボソッ
すみません^^; ちょっと気になってしまったもので...

【17869】Re:禁止文字
回答  ちゃっぴ  - 04/9/9(木) 9:30 -

引用なし
パスワード
   >>"*[![]0-9A-Z_a-z0-9_A-Za-z]*"
>試したのですが、
>特殊文字に対してエラーを出さなくなってしまったみたいなんですが。。。

やっぱダメでしたか。。。。(( T_T)トボトボ

こういった場合、RegExpオブジェクト使用したほうが素直ですね。
(エスケープ文字使えますので・・・)

Sub ChkString()
  Dim objRegExp As Object
  
  Set objRegExp = CreateObject("VBScript.RegExp")
  
  With objRegExp
    .Pattern = "[^0-9A-Z_a-z0-9A-Z_a-z\[\]]"
    .Global = True
  End With
  
  MsgBox objRegExp.test(Range("a1").Value)
End Sub

【17870】Re:禁止文字
お礼  KAME  - 04/9/9(木) 11:13 -

引用なし
パスワード
   ▼ちゃっぴ さん:

>やっぱダメでしたか。。。。(( T_T)トボトボ
>
>こういった場合、RegExpオブジェクト使用したほうが素直ですね。
>(エスケープ文字使えますので・・・)
>
>Sub ChkString()
>  Dim objRegExp As Object
>  
>  Set objRegExp = CreateObject("VBScript.RegExp")
>  
>  With objRegExp
>    .Pattern = "[^0-9A-Z_a-z0-9A-Z_a-z\[\]]"
>    .Global = True
>  End With
>  
>  MsgBox objRegExp.test(Range("a1").Value)
>End Sub

何度もしつこくすみません。。。
ありがとうございました!!

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