检查不同工作表中的重复项,然后打印值

我已经搜查,但我似乎无法弄清楚如何打印指定的值旁边的列中find我的副本。 我早些时候的代码是首先指定不同的范围,然后查看是否在表单Y中find表单Y中的副本。表单Le是本周的信息,表单是最后一周的信息。

如果我发现指定范围内的副本,我希望在我的传递表打印旁边的列A旁边的副本交付或不交付取决于如果我的输出从函数compareAEO打印真或假。

我正在寻找的条件是,如果我们可以find在工作表(Be)的工作表(Le)中的列B中相同的值,则它将检查列F中的文本是否已经改变。 如果是这样,那么它应该在表格(Le)=已交付的栏A中打印。 否则不交付。

然后检查列M中的date是否相同。 如果没有,那么它将打印在表格(Le)上的A栏中重新计划。

单元格B中单元格中的IF值很短,单元格(Le)=单元格B中的值,单元格(Be)然后单元格中的值Le =“已交付”否则“未交付”。

然后

如果M列中单元格中的值,则表单(Le)<>如果M列中的单元格中的值,则表单(Be)然后是A列中的值,表单(Le)=“重新规划”

这是我的数据如何,Sheet(Le)

Col B Col F Col M PZ2408 X13 2017-02-13 PZ2345 X30 2017-02-23 PZ2463 X45 2017-02-25 PZ2513 X13 2017-02-10 PZ2533 X70 2017-02-05 PZ2561 X60 2017-02-20 

对于表单(Be),我的数据看起来像这样

 Col B Col F Col M PZ2408 X30 2017-02-13 PZ2345 X30 2017-02-23 PZ2463 X30 2017-02-25 PZ2513 X13 2017-02-05 PZ2533 X13 2017-02-10 PZ2561 X60 2017-02-17 

代码完成后,我希望它能显示例如,

表(Le)

  col A Col B Col F Col M Delivered PZ2408 X13 2017-02-13 Not Delivered PZ2345 X30 2017-02-23 Delivered PZ2463 X45 2017-02-25 replanned PZ2513 X13 2017-02-10 Delivered PZ2533 X70 2017-02-05 replanned PZ2561 X60 2017-02-20 

基本上我没有交付,交付和重新计划的声明不起作用,我的大脑不工作。

可以帮助拯救我的一天吗?

 Sub checkASMT() Dim rng1 As Range Dim rng2 As Range Dim lastRowSource As Long Dim lastRowTarget As Long Dim row As Long Dim ASMT As String 'Looping trough Range With ThisWorkbook.Worksheets("Le") lastRowTarget = .Range("B" & .Rows.Count).End(xlUp).row For i = 29 To lastRowTarget ASMT = .Range("b" & i).value 'Define range and see if we can find duplicates With ThisWorkbook.Worksheets("Be") lastRowSource = .Range("B" & .Rows.Count).End(xlUp).row Set rng1 = .Range("B3", "B" & lastRowSource) row = findValueInRangeReturnRow(rng1, ASMT) 'Check FAX If compareAEO(i, row, "FAX") = True Then 'Debug.Print compareASMT(i, row, "FAX") Worksheets("Le").Cells(i, ASMT).value = "Not Delivered" Else .Worksheets("Le").Cells(i, ASMT).value = "delivered" 'Check if dax are correct If compareAEO(i, row, "DAX") = False Then .Worksheets("Le").ASMT.Offset(0, 1).value = "Replan" End If End With Next i End With End Sub 

这是我的第一个function

  Function findValueInRangeReturnRow(rng As Range, value As Variant) As Long Set c = rng.Find(value, LookIn:=xlValues) If Not c Is Nothing Then findValueInRangeReturnRow = c.row End If End Function 

我的第二个函数,检查是否在指定的范围内find重复。

 Function compareAEO(rad1 As Variant, rad2 As Variant, typeCOMPARE As String) As Boolean Dim col1 As String Dim col2 As String Select Case typeCOMPARE Case "FAX" col1 = "F" col2 = "F" Case "DAX" col1 = "M" col2 = "M" End Select If ThisWorkbook.Worksheets("Le").Range(col1 & rad1).value = ThisWorkbook.Worksheets("Be").Range(col2 & rad2).value Then compareAEO = True Else compareAEO = False End If End Function 

你得到每个循环中两页的最后一行。 只需要把它们放在循环的最前面。 您设定的范围相同。 你可以看到,我把它们放在顶部,在循环之前。

我真的不知道你在用什么ASMT。 它看起来像你正在尝试使用它作为范围在你的一些编码,而不是范围(“B”和我)。 我在Le的“B”列使用string来比较Be的“B”列,当我testing它时。

这个对我有用。 你必须改变它以适应你的需求。 你不需要所有的function,他们完成的都在这个子程序中。

 Sub checkASMT() Dim rng1 As Range Dim rng2 As Range Dim lastRowLE As Long Dim lastRowBe As Long Dim row As Long Dim ASMT As String Dim LEws As Worksheet Dim tmpRng As Range Set LEws = Worksheets("Le") lastRowLE = Sheets("Le").Cells(ActiveSheet.Rows.Count, "B").End(xlUp).row lastRowBe = Sheets("Be").Cells(ActiveSheet.Rows.Count, "B").End(xlUp).row Set rng1 = Sheets("Be").Range("B3", "B" & lastRowBe) For i = 29 To lastRowLE Set tmpRng = Sheets("Le").Range("b" & i) ASMT = tmpRng.Value Set c = rng1.Find(ASMT, LookIn:=xlValues) If Not c Is Nothing Then row = c.row If ThisWorkbook.Worksheets("Le").Range("F" & i).Value = ThisWorkbook.Worksheets("Be").Range("F" & row).Value Then ' Worksheets("Le").Cells(i, ASMT).Value = "Not Delivered" ' Did you intend to use ASMT as the column number? ' I'm going to hard code that as column 27 for my purposes. You can change it if you need to LEws.Cells(i, 27).Value = "Not Delivered" ' column 27 is "AA" Else LEws.Cells(i, 27).Value = "Delivered" End If If ThisWorkbook.Worksheets("Le").Range("M" & i).Value = ThisWorkbook.Worksheets("Be").Range("M" & row).Value Then ' .Worksheets("Le").ASMT.Offset(0, 1).Value = "Replan" ' again I don't understand the reference to ASMT. That is a string value - unless it is a numeric value in the string ' I'm going to assume that you intended for "Replan" to go into column C on row i Else LEws.Range("C" & i).Value = "Replan" End If End If Next i End Sub 

尝试这个; 将数据放在从B到G的单张(Le然后Be); 将此公式放在列H中

 =IF(VLOOKUP(E2,B$2:D$7,2,FALSE)=F2,IF(G2<D2,"replanned","Not Delivered"),"delivered") 

调整这个公式,以适应您的需要,使其跨表工作