从电子表格X中读取一个值,比较电子表格X和Y之间的相邻值

我有一个基于macros的Excel文件,生成收到的项目列表和他们的状态(即接收,修复等)。 这个程序每天都运行,现在我已经捕获了前一天的列表,并将其放置在一个名为PreviousData的电子表格中,然后使用当天的列表进行更新,该列表放置在名为Data的电子表格中; 这是用来比较我们相信我们在前一天固定/更改状态。

我基本上在VBA自学,所以我不是超级有效或经验丰富。 我想要做的是以下几点:

  1. 在Data Spreadsheet上,从J2开始获取订单号

  2. 切换到PreviousData电子表格,并从第1步search订单号

schemeA:如果在PreviousData上find订单号,则比较两张订单号旁边的状态值; 如果不同,则运行一些代码,否则什么也不做

schemeB:如果在PreviousData上找不到订单号,则不执行任何操作

  1. 重复数据电子表格中遇到的第一个空白单元格

我做了一些search周围的网站,发现了一些东西(实际上可能是从这个论坛),将逐行进行比较单元格的值,但如果情况B来了function将失败,“超出范围”。 以下是我尝试过的代码,并已修改以尝试工作:

Sub output() Dim varSheetA As Variant Dim varSheetB As Variant Dim varSheetRMA As Variant Dim strRangeToCheck As String Dim strRangeRMA As String Dim Variable As String Dim iRow As Long Dim iCol As Long Dim Count As Integer strRangeToCheck = "K2:L1000" strRangeRMA = "J2:J1000" ' If you know the data will only be in a smaller range, reduce the size of the ranges above. Debug.Print Now varSheetA = Worksheets("PreviousData").Range(strRangeToCheck) varSheetB = Worksheets("Data").Range(strRangeToCheck) ' or whatever your other sheet is. varSheetRMA = Worksheets("Data").Range(strRangeRMA) Debug.Print Now Sheets("Data").Select Range("J2").Select Selection.Copy Sheets("PreviousData").Select Cells.Find(What:=Variable, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1) For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2) If varSheetA(iRow, iCol) = varSheetB(iRow, iCol) Then ' Cells are identical. ' Do nothing. Else ' Cells are different. ' Code goes here for whatever it is you want to do. End If Next iCol Next iRow End Sub 

请帮忙 :)

这个代码应该比较容易理解,而且是完成这个工作的。

 Option Explicit Sub CompareStatuses() Dim ws1 As Worksheet, ws2 As Worksheet, rng1 As Range, rng2 As Range Dim lr1&, lr2&, i&, j& Set ws1 = ThisWorkbook.Sheets("Data") Set ws2 = ThisWorkbook.Sheets("PreviousData") lr1 = ws1.Range("J" & Rows.Count).End(xlUp).Row lr2 = ws2.Range("J" & Rows.Count).End(xlUp).Row For i = 2 To lr1 For j = 2 To lr2 Set rng1 = ws1.Range("J" & i) Set rng2 = ws2.Range("J" & j) If StrComp(CStr(rng1.Value), CStr(rng2.Value), vbTextCompare) = 0 And _ StrComp(CStr(rng1.Offset(0, 1).Value), CStr(rng2.Offset(0, 1).Value) _ ,vbTextCompare) <> 0 Then ' found a matching Order + both statuses are different ' this is where you wanted to run some code End If Set rng1 = Nothing Set rng2 = Nothing Next j Next i End Sub