2016-08-01 86 views
0

我試圖比較兩個不同工作簿上的兩個單元格。如果相等,腳本應該在這些(相同的)工作簿上進一步比較另外兩個不同的單元格,並突出顯示那些不相等的單元格。比較兩個單元格,如果相等,則比較兩個不同的單元格,如果不等於,則突出顯示結果

我已經試過如下:

Sub Compare() 
Dim mycell As Range 
Dim shtSheet1 As Worksheet 
Dim shtSheet2 As Worksheet 
Set shtSheet1 = Workbooks("100Series").Worksheets("Report") 
Set shtSheet2 = Workbooks("UserWorkbook").Worksheets("User") 
For Each mycell In shtSheet2.UsedRange 
    If Not mycell.Value = shtSheet1.Cells(mycell.Row, mycell.Column).Value Then 
    mycell.Interior.Color = vbRed 
    End If 
Next 
End Sub 

但是,這是行不通的。它會拋出Subscript out of range錯誤。我不確定什麼超出範圍。每張工作表都有3500行,2列寬。

我現在的代碼有什麼問題?

+1

是否想比較Worbook 1的Cell A1與Worbook 2等的Cell A1等(Cell B310與其他Workbook的Cell B310 ...)? –

+3

它在什麼時候會將下標超出範圍錯誤?如果它正在執行'Set shtSheet1 = Workbooks(「100Series」)。Worksheets(「Report」)'命令,可能是因爲工作簿被稱爲「100Series.xlsx」(或類似的東西)。 – YowE3K

+0

當出現錯誤消息時,消息框中應該有一個「調試」按鈕。如果你點擊那個按鈕,導致錯誤的行應該以黃色突出顯示 – barrowc

回答

0

這樣的事情?

Dim sht1 As Worksheet, sht2 As Worksheet 
Dim y As Integer, x As Integer 

Private Sub CompareStuff() 

    Set sht1 = Workbooks("Wb1.xlsm").Worksheets("Sheet1") 'Make sure to pick the right name. 
    Set sht2 = Workbooks("Wb2.xlsm").Worksheets("Sheet2") 
    y = 1 

    Do While y <= ActiveSheet.Columns("A").Cells.Find("*", _ 
        SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row 
     For x = 1 To 2 
      If sht1.Cells(y, x).Value <> sht2.Cells(y, x).Value Then 
       sht1.Cells(y, x).Interior.ColorIndex = 3 
       sht2.Cells(y, x).Interior.ColorIndex = 3 
      End If 
     Next x 
     y = y + 1 
    Loop 

End Sub 
+0

'Do While y <= ActiveSheet.Columns(「A」)。Cells.Find(「*」,_ SearchOrder:= xlByRows,LookIn:= xlValues,SearchDirection:= xlPrevious).Row' - 這是什麼意思? –

+0

這只是發現填充的最後一行。避免循環遍歷所有〜100萬行。你也可以把它寫在一行中,但是在我看來這樣做很長,所以我用'_'來繼續下一行的代碼。 –

+0

我如何遍歷整個行來找到匹配? –

0

謝謝,以及我想出了以下,它看起來工作正常。事情是我希望它停止前兩列(在兩個工作簿中),也忽略值中的空格。我該如何去做呢?

Sub Compare() 
    Dim shtSheet1 As Worksheet 
    Dim shtSheet2 As Worksheet 
    Set shtSheet1 = Workbooks("100Series").Worksheets("Report") 
    Set shtSheet2 = Workbooks("UserWorkbook").Worksheets("User") 
     For Each mycell In shtSheet1.UsedRange 
      If Not mycell.Value = shtSheet2.Cells(mycell.Row, mycell.Column).Value Then 
      mycell.Interior.Color = vbRed 
      ElseIf mycell.Value = shtSheet2.Cells(mycell.Row, mycell.Column).Value Then 
      If Not mycell.Offset(0, 1).Value = shtSheet2.Cells(mycell.Row, mycell.Column + 1).Value Then 
       mycell.Interior.Color = vbRed 
       End If 
      End If 
     Next 
    End Sub 
+0

任何人?我使用了修剪功能,希望能夠將前後的空格移開,但這並不起作用。 'Application.WorksheetFunction.Trim(「shtSheet1」) Application.WorksheetFunction.Trim(「shtSheet2」)' –

+0

'如果不是mycell.Value = shtSheet2.Cells(mycell.Row,mycell.Column).Value Then mycell.Interior .Color = vbRed'有沒有辦法讓mycell.Row值遍歷同一列中的所有行? –

+0

你是什麼意思「忽略價值觀中的空間?」 –

相關問題