2016-05-24 34 views
1

私は運がないまま検索して検索しましたが、これに既に回答していれば謝罪します。そのセルの値が名前付き範囲の値と一致しない場合、セルの色を変更しようとしています。VBA - セル値(文字列)が名前付き範囲の値(文字列)と一致するかどうかを調べる

私は何も私のために働いていますが、私はいくつかの方法を試してきました、vbaの指導者からの助けが大いに感謝されるでしょう。

基本的に私はsheet1(Create)の値のリストを持っています。G2:G2000はsheet2(list)の値と一致しないときに知る必要があります。S238:S64 < - これはMakeの名前付き範囲です。

あなたのすべてが事前に任意の助けのために、私は今、数日間、このを見て、あるように思われてきた


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 

おかげで以下の私の現在のコードのコピーを参照してください。私が始めたときよりも近くにいない。私は条件付き書式を使用することになりますが

+0

これには条件付き書式設定(非vba)を使用しないのはなぜですか? – brettdj

答えて

0
あなたは二つの範囲の間で比較するために、ワークシート関数VLOOKUPを使用することができ

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 
+0

YAYそれは完全に動作します。名前が付けられた範囲名(現在は "Make"に設定されています)を左側(同じ行)の列のセルの値に依存させたい場合は、私はこれがオフセット関数を介して行われると仮定しますが、私はそれが働くように見えることはできません。 私は範囲として 薄暗いMkDataのようなものを考えていた、バリアント 設定MkData =ワークシートとしてバリアント 薄暗いnrangeとしてバリアント 薄暗い結果範囲 薄暗いMKArrayとしてMkValは、(「作成」)の範囲(「G2:G5000」)。 Nrange = MkData.Offset(0、1).Value Set MkVal =ワークシート( "リスト")。範囲( "nrange") – Jb86

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 
関連する問題