これは私のデータのサンプルで、name
はセルA1
に入っています。列Cはデータの一部ではなく、必要なものを説明するためだけにあります。文字列内の特定の番号を見つけるか?
name cod should be detected?
aa no
aa 14;15 no
aa 1;13;7 yes
bb 8;9;1 yes
bb 1;17 yes
bb 11;21 no
cz 7;8 no
cz 7;21 no
cz 8;1;20 yes
db 1 yes
db 13;1 yes
私はコラムcod
数1が表示されますに検出するマクロを記述しようとしています。たとえば、私は10,13,21が見つからないようにしますが、1
を探しています。この列の数字は1から21までです。
すべてcod
の値は文字列ですが、1
の文字列内に他の数字が混在していても、その場所を探したいと思います。この列の数値は常に;
で区切られ、間に空白はありません。
次のコードが生成されます偽陽性:
Dim N As Range
Dim msg As String
Sub cod1()
msg = ""
For Each N In Range("A2", Range("A2").End(xlDown))
If InStr(1, N.Offset(, 1), 1, vbTextCompare) > 0 Then
msg = msg & "Code 1 was not supposed to be in Cod column." & vbLf
Exit For
End If
Next N
If Len(msg) > 1 Then
MsgBox msg
Else: MsgBox "There are no code 1 values in Cod column."
End If
End Sub
を参照してください。結果:
name cod should be detected? problem
aa no
aa 14;15 no false positive
aa 1;13;7 yes
bb 8;9;1 yes
bb 1;17 yes
bb 11;21 no false positive
cz 7;8 no
cz 7;21 no false positive
cz 8;1;20 yes
db 1 yes
db 13;1 yes
次のコードは、がネガ偽生成されます。
Dim N As Range
Dim msg As String
Sub cod2()
msg = ""
For Each N In Range("A2", Range("A2").End(xlDown))
If InStr(1, N.Offset(, 1), 1, vbTextCompare) > 0 And _
InStr(1, N.Offset(, 1), 10, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 11, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 12, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 13, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 14, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 15, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 16, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 17, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 18, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 19, vbTextCompare) = 0 And _
InStr(1, N.Offset(, 1), 21, vbTextCompare) = 0 Then
msg = msg & "Code 1 was not supposed to be in Cod column." & vbLf
Exit For
End If
Next N
If Len(msg) > 1 Then
MsgBox msg
Else: MsgBox "There are no code 1 values in Cod column."
End If
End Sub
の結果を参照してください:だから
name cod should be detected? problem
aa no
aa 14;15 no
aa 1;13;7 yes false negative
bb 8;9;1 yes
bb 1;17 yes false negative
bb 11;21 no
cz 7;8;10 no
cz 7;21 no
cz 8;1;20 yes false negative
db 1 yes
db 13;1 yes false negative
を、どのように1は、メッセージボックスを作ることができます*数1
が文字列内に検出された場合にのみ表示されますか?
*コード1はコードの列には含まれていませんでした。 Excel 2007の以降のバージョンで動作するソリューションを探してい
。いずれかを使用して、あなたは、セル内の任意の値の存在を検出し、一般的なUDF(ユーザー定義関数)を持つことができ、また
Dim N As Range
Dim msg As String
Sub cod1()
Dim expression As String
msg = ""
For Each N In Range("A2", Range("A2").End(xlDown))
expression = ";" & N.Offset(, 1) & ";"
If expression Like "*;1;*" Then
msg = msg & "Code 1 was not supposed to be in Cod column." & vbLf
End If
Next N
If Len(msg) > 1 Then
MsgBox msg
Else
MsgBox "There are no code 1 values in Cod column."
End If
End Sub
3つの回答(ThunderFrame、A.S.H、EEM)は、それぞれ異なるアプローチで、サンプルと実際のデータ(すべて+1)でうまく機能しました。そして、コードの構造が私がすでに使っていたものと似ていたので、私はこれを受け入れています。 –