2017-08-02 13 views
1

私はvbaでExcelを学習しています。私はここで問題を抱えている。シート1 ColumnCが空になったとき、私はここで達成しようとしています何VBAセルが横にあるときに値を選択する方法と、その値を別のシートの別の列と比較してハイライトする方法

はSheet1のColumnBで

  1. 値を選択しています。
  2. これらの値をとって、それらをsheet2 ColumnOと比較してください。
  3. Sheet1 Column2の値と共通する場合、Column1の値は緑色になります。
  4. Sheet1 Column1の値と共通しない場合、Sheet1のColumnBの値はsheet1で黄色になります。
  5. sheet2 Column1の値は、sheet1に含まれていない場合はsheet2の赤です。ここ

サンプルファイルには、これは私がこれまでに得たものである

https://a.uguu.se/tkGV68TzIGwR_testtt111.xlsx

です。 columnCが空の場合にColumnBの値を選択し、別の列にコピーすることができます。

Sub compareWR() 
Dim emptyI As Long   
Dim emptyJ As Long   
lastrow = ws1.Cells(Rows.Count, "B").End(xlUp).Row 
emptyJ = 2 
For emptyI = 2 To lastrow 
If Cells(emptyI, "C").Value = "" Then 
Cells(emptyJ, "AA").Value = Cells(emptyI, "B").Value 
     emptyJ = emptyJ + 1 
End If 
Next emptyI 
End Sub 
+0

「これらの値をとり、それらをSheet2 ColumnOと比較してください。」 - その列のどこかを意味しますか?その列の同じ行ですか? – BruceWayne

+1

これまで#1だけ試したようです。最初に#2-5を試して、どこに止まっているか教えてください。もっと答えが出ると思います。 – puzzlepiece87

+0

定義:* '...共通の場合...' * – Jeeped

答えて

0

条件付き書式設定のルールは、必要なすべてを処理する必要があります。ここで彼らはVBAにあります。

Option Explicit 

Sub CFRs() 
    Dim addr1 As String, addr2 As String 
    With Worksheets("sheet1") 
     With .Range(.Cells(1, "B"), .Cells(.Rows.Count, "B").End(xlUp)) 
      addr1 = .Cells(1).Address(False, True) 
      addr2 = .Cells(1).Offset(0, 1).Address(False, True) 
      .FormatConditions.Delete 
      With .FormatConditions.Add(Type:=xlExpression, _ 
       Formula1:="=AND(" & addr2 & "=TEXT(,), ISNUMBER(MATCH(" & addr1 & ", Sheet2!$O:$O, 0)))") 
       .Interior.ColorIndex = 10 
      End With 
      With .FormatConditions.Add(Type:=xlExpression, _ 
       Formula1:="=NOT(LEN(" & addr2 & "))") 
       .Interior.ColorIndex = 6 
      End With 
     End With 
    End With 
    With Worksheets("sheet2") 
     With .Range(.Cells(1, "O"), .Cells(.Rows.Count, "O").End(xlUp)) 
      addr1 = .Cells(1).Address(False, True) 
      .FormatConditions.Delete 
      With .FormatConditions.Add(Type:=xlExpression, _ 
       Formula1:="=ISNA(MATCH(" & addr1 & ", Sheet1!$B:$B, 0))") 
       .Interior.ColorIndex = 3 
      End With 
     End With 
    End With 
End Sub 
+0

ご協力いただきありがとうございます。このコードは、少量のデータに対して機能します。大量のデータでは機能しません。ここにサンプルワークシートがありますか、それを調べますか? https://a.uguu.se/tkGV68TzIGwR_testtt111.xlsx –

+0

Sheet1!B:Bの値は真数値ですが、Sheet2!O:Oの値は見た目に似た数字です。 TextToColumnsを使用してO:Oを真の数値に変換し、B:Bの値をテキストに変更するか、補正する式を変更します。 – Jeeped

+0

sheet2のcolumnOの数字の間に空のセルがたくさんあるので、それが理由です。どのように私はsheet2 columnOの空のセルを無視することができます任意のアイデア。 –

関連する問題