2017-05-18 14 views
-1

特定の要件がいくつかあるセルを検証する必要があります。 LEN(A1)= 6および入力値の構成は、大文字のテキスト文字、数値(1桁)、大文字のテキスト文字、数値(1桁)、大文字のテキスト文字、数値(1桁)を入力します。 A1B2C1の例を次に示します。データ検証を使用して、数値、テキストの混合文字をExcelで検証する

私はこの欄を使用して、ストックテイクのビン番号を検証し、手動で入力しています。私は入力の長さと、それがテキストか数値かを検証することができますが、必要な特定のミックスは検証できません。

ありがとう

+0

LEN、MID、ISNUMBER&ISTEXTがこれを担当しているようです。 VBAが必要な場合は、正規表現を試してみてください。 – Jeeped

+0

@Jeeped数字が文字列の一部であるため、ISTEXTは機能しませんので、真と表示されます。 – Hocus

+0

@Hocus - '= ISNUMBER( - MID(A2、ROW(2:2)、1))'それを行う必要があります。私はOPからの元々の努力を見たいと思っていました。何か...何でも。 – Jeeped

答えて

0

これは別のオプションです。それをあなたのシートモジュールに入れ、あなたのセルが変更されるといつでもあなたのために$#$#$#形式を検証します。私はセル "A1"で動作するように設定していますが、必要なセルに変更することができます。または、特定の列または特定の行のすべてのセルに変更できます。役に立ったら嬉しいです。

Private Sub Worksheet_Change(ByVal Target As Range) 
'' Choose any one of these three range methods 
' By Individual Cell 
If Replace(Target.Address, "$", "") = "A1" Then GoTo validate ' Change this to your cell range 
'' By Any Cell in Column 1 
'If Target.Column = 1 Then GoTo validate ' Change this to your Column 
'' By Any Cell in Column 1 
'If Target.Row = 10 Then GoTo validate ' Change this to your Row 

Exit Sub 


validate: 
If Len(Target) <> 6 Then GoTo errorMsg 
For i = 1 To 6 
    abc = Asc(Mid(Target, i, 1)) 
     If i Mod 2 = 0 Then 
      If Asc(Mid(Target, i, 1)) < 48 Or Asc(Mid(Target, i, 1)) > 57 Then GoTo errorMsg 
     End If 
    If i Mod 2 <> 0 And Asc(Mid(Target, i, 1)) > 49 And Asc(Mid(Target, i, 1)) < 58 Then GoTo errorMsg 
Next i 

Exit Sub 

errorMsg: 
Target.Interior.ColorIndex = 3 
MsgBox "Incorrect Format for this cell" 
Application.EnableEvents = False 
    Target = "" 
    Target.ClearFormats 
Application.EnableEvents = True 
End Sub 
+0

@ John-Mugginsありがとうございましたこれは私が必要としていたものであり、完璧に動作していました。 –

0

VBAを使用する予定がある場合は、ASCIIコードのチェックがオプションです。あなたはASCIIコードを取得し、あなたが期待するものにそれを比較するために

ASC([Character to Check]) 

を使用し、各文字を取得するには

Left([String] , [Amount of Chars]) 

Mid([String] , [Starting Char] , [Amount of Chars]) 

Right([String] , [Amount of Chars]) 

を使用することができ、これを行うに

だから、60等の大文字のための95の

以下のいくつかのサンプルコードを参照してください、クリーンしかし、それは動作しません。

If Asc(Mid(StringToTest, 1, 1)) >= 60 And Asc(Mid(StringToTest, 1, 1)) <= 95 And _ 
    Asc(Mid(StringToTest, 2, 1)) >= 48 And Asc(Mid(StringToTest, 2, 1)) <= 57 And _ 
    Asc(Mid(StringToTest, 3, 1)) >= 60 And Asc(Mid(StringToTest, 3, 1)) <= 95 And _ 
    Asc(Mid(StringToTest, 4, 1)) >= 48 And Asc(Mid(StringToTest, 4, 1)) <= 57 And _ 
    Asc(Mid(StringToTest, 5, 1)) >= 60 And Asc(Mid(StringToTest, 5, 1)) <= 95 And _ 
    Asc(Mid(StringToTest, 6, 1)) >= 48 And Asc(Mid(StringToTest, 6, 1)) <= 57 Then 
    Debug.Print "Pass" 
Else 
    Debug.Print "Fail" 
End If 
+0

ありがとうございます。私はVBAへのエクスポージャーを制限していますが、それを行ってあなたに知らせるでしょう。 –

+0

こんにちは@Hocus。あなたのソリューションも同様に機能しました。それは理解するのがはるかに複雑だったが、私はそれを働かせることができた。ありがとうございました。 –

関連する問題