/ / VBA - セル値(String)が名前付き範囲内の値(String)と一致するかどうかを判別します - excel、excel-vba、range、文字列一致、named、vba

VBA - セル値(文字列)が名前付き範囲の値(文字列)と一致するかどうかを調べる - excel、excel-vba、range、string-matching、named、vba

すでに回答済みの場合は謝罪私は検索して運が悪いのですが。一言で言えば、そのセル値が名前付き範囲内の値と一致しない場合、セルの色を変更しようとしています。

どれも私のために働いていないが、私は多くの方法を試した、vbaの達人からのどんな助けでも大いに感謝されるでしょう。

基本的に私はsheet1(Create)G2:G5000の値のリストを持っています。それらがsheet2(lists)の値と一致しないときに知る必要があります

以下の私の現在のコードのコピーを見てください


Sub testMake()

Dim MkData As Range, MkVal As Range
Dim MKArray As Variant

Set MkData = Worksheets("Create").Range("G2:G5000")
Set MkVal = Worksheets("Lists").Range("Make")

For Each MyCell In MkData
If MyCell.Value <> Range("MkVal") Then
MyCell.Interior.ColorIndex = 6
Else
MyCell.Interior.ColorIndex = xlNone
End If

Next


End Sub

前もって助けてくれてありがとう、私は今数日間これを見てきました、そして私が始めたときより近くにはないようです。

回答:

回答№1は0

ワークシート関数Vlookupを使って2つの範囲を比較することができます。

Sub testMake()

Dim MkData As Range, MkVal As Range
Dim MKArray As Variant
Dim result  As Variant

Set MkData = Worksheets("Create").Range("G2:G5000")
Set MkVal = Worksheets("Lists").Range("Make")

For Each MyCell In MkData
On Error Resume Next
result = Application.WorksheetFunction.VLookup(MyCell, MkVal, 1, False)

If Err <> 0 Then
result = CVErr(xlErrNA)
End If

If Not IsError(result) Then
MyCell.Interior.ColorIndex = xlNone
Else
MyCell.Interior.ColorIndex = 6
End If
Next

End Sub

回答№2の場合は1

私は条件付き書式を使用しますが、プログラム的にこれを行うために以下のようにあなたのコードをわずかに適応させることができます:

Sub testMake()

Dim MkData As Range
Dim MkVal As Range
Dim MKArray As Variant
Dim lngRow As Long
Dim rng1 As Range
Dim rng2 As Range


MKArray = Worksheets("Create").Range("G2:G5000").Value2
Set rng1 = Worksheets("Create").Range("G2")

Set MkVal = Range("Make")

For lngRow = 1 To UBound(MKArray)
If IsError(Application.Match(MKArray(lngRow, 1), MkVal, 0)) Then
If Not rng2 Is Nothing Then
Set rng2 = Union(rng2, rng1.Offset(lngRow - 1, 0))
Else
Set rng2 = rng1.Offset(lngRow - 1, 0)
End If
End If
Next

If Not rng2 Is Nothing Then rng2.Interior.ColorIndex = 6

End Sub