Excel VBAのApplication.Matchを使用して、大文字と小文字を区別する一致を取得しようとしています。
INDEX、MATCH、EXACTを使用して数式を参照する多数の投稿を読みましたが、VBAで機能させるにはこれが必要です... WorksheetFunction.Matchを使用することもできませんでした。大文字と小文字を区別するために変更する必要のあるコードは次のとおりです。敏感。前もって感謝します
Sub Validate_Values2()
Dim i As Long, f As Variant
With Worksheets("Company")
For i = 2 To .Cells(.Rows.Count, "M").End(xlUp).Row
f = Application.Match(.Cells(i, "M").Value2, Worksheets("Lookups").Columns("U"), 0)
If IsError(f) Then
.Cells(i, "M").Interior.ColorIndex = 33
End If
Next i
End With
End Sub
VBAでの文字列間の直接比較は、vbBinaryCompareでは大文字と小文字が区別されます。VBAがFilter関数でネイティブに答えを持っているのに、なぜ間違ったワークシート関数を思い通りに曲げようとするのですか?
Option Explicit
Sub Validate_Values3()
Dim i As Long, f As Long, comps As Variant, lookups As Variant
With Worksheets("Lookups")
'skips a header row in Lookups!:U:U
'creates a zero-based 1-D array
lookups = Application.Transpose(.Range(.Cells(2, "U"), .Cells(.Rows.Count, "U").End(xlUp)).Value2)
End With
With Worksheets("Company")
'skips a header row in Company!:M:M
'creates a one-based 2-D array
comps = .Range(.Cells(2, "M"), .Cells(.Rows.Count, "M").End(xlUp)).Value2
For i = LBound(comps, 1) To UBound(comps, 1)
'Debug.Print comps(i, 1) & " " & UBound(Filter(lookups, comps(i, 1), True, vbBinaryCompare))
f = UBound(Filter(lookups, comps(i, 1), True, vbBinaryCompare))
If f < 0 Then
'shift down one row to account for skipped header
.Cells(i + 1, "M").Interior.ColorIndex = 33
End If
Next i
End With
End Sub
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加