2016-08-18 91 views
1

嗨,我知道有很多問題要求在同一主題,因爲我在這裏,他們似乎並沒有解決我的問題在這裏。 我有一個任務是根據兩張紙的D列比較兩張紙(A和B),我想查找並突出顯示A中不存在的行。 代碼如下所示:找到並突出顯示差異

Dim i As Long 
Dim data As Range 
Dim ref As Range 
Dim lastRow As Long 
Worksheets("B").UsedRange 
Set ref = Worksheets("test").Columns("D:D").Value 
lastRow = Worksheets("B").UsedRange.Rows.Count 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

'  check if data exist in both shts 
     For i = 10 To lastRow 
      Set data = Worksheets("B").Columns("D:D").Find(ref,LookIn:=xlValues, _ 
     LookAt:=xlWhole) 

      If data Is Nothing Then 
       data.EntireRow.Interior.ColorIndex = 36 
       Exit For 
      Else 
      End If 
    Next 

現在的問題是,設置ref的行出現所需對象的錯誤,並且行未突出顯示。

screenupdating函數被關閉了一個較短的運行時間,但它仍然需要一些時間來運行我的代碼,這是文件或代碼的問題?

意見將非常感激。

UPDATE使用下面的代碼任務解決:

With Worksheets("test") 
    For i = 4 To lastRow 
     For j = 4 To lastnewRow 
      If Worksheets("test").Cells(i, 9) = Worksheets("B").Cells(j, 9) Then 
       Exit For 
      Else 
       If j = lastnewRow Then 
        Worksheets("test").Cells(i,9).EntireRow.Interior.ColorIndex = 36 
       End If 
      End If 
     Next 
    Next 
End With 
+0

只有在數據不是沒有任何意義的情況下,才嘗試訪問數據的屬性。 –

+0

這是因爲我試圖解決僅存在於表B中的行,代碼是否不正確呢? –

+0

*找到並突出顯示*聽起來像條件​​格式可能是合適的。 – pnuts

回答

0

試試這個代碼:

Dim shtARng As Range, cell As Range 

With Worksheets("A") '<--| change "A" with your actual sheet name 
    Set shtARng = .Range("D1", .Cells(.Rows.Count, 4).End(xlUp))) '<--| change "D1" to the column D actual initial row to start your check from 
End With 

With Worksheets("B") '<--| change "B" with your actual sheet name 
    For Each cell in .Range("D1", .Cells(.Rows.Count, 4).End(xlUp))) 
     If shtARng.Find(What:=cell.Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) Is Nothing Then cell.EntireRow.Interior.ColorIndex = 36 
    Next cell 
End With 
+0

謝謝!代碼解決了突出問題,但它似乎突出了我的整個Excel表...任何建議? –

+0

我不是通過我的電腦,所以你只需在你的代碼中放置一些斷點,然後用F8單步執行,看看發生了什麼! – user3598756

+0

單步執行代碼時使用立即窗口查詢變量值(例如:「?shtARng.Address」,「?cell.Address,cell。值「) – user3598756

0

您可以輕鬆地做到這一點沒有VBA。您將在Excel中使用的功能稱爲條件格式。

所以,如果你想突出Sheet 2不在Sheet 1 A列所有單元格,可以在Sheet 1選擇單元格,在條件格式窗口中創建一個新的規則,並選擇

「使用公式確定格式細胞」

然後插入下面的公式

=ISNA(MATCH(A1,Sheet1!A:A,0)) 

,並在格式中,選擇要應用到細胞中的風格,符合這個標準。

  • MATCH搜索在細胞A1的值(而且所有其它已選擇的細胞),並檢查是否它們在陣列Sheet1!A:A存在這是整個列,如果沒有找到該值,則返回
  • #N/A ,因此我們希望表達是真實的。這就是爲什麼我們使用函數ISNA(expression),在這種情況下返回true。
+0

謝謝你的詳細答案:)我知道這個功能,但我只是試圖自動化這個過程,因爲在數據突出顯示之後,我想將它複製到第三張工作表,所以如果可以在vb編輯器中的同一個模塊內完成,那將很棒,但是用於回答;) –