2017-07-16 128 views
-1

我想将一张纸(Shipment)中的QTYUID与另一张纸(Record)进行比较。我想比较,如果该UID等于再比较QTY,如果QTY等于然后输出“完成”其他“未完成”除了在Record表中的记录。vba宏比较excel中的两列?

Record

UID qty Shipped 
234 2 incomplete 
335 5 
453 6 
664 3 complete 
787 13 

Shipment

UID qty 
664 3 
234 1 
+0

您需要考虑的一件事:您必须在分批装运后更新“记录”,否则,其余货物也将被视为“不完整” – jsotola

回答

0

您不能在同一单元格中同时存在值和公式。 您需要使用VBA来实现您的目标。

试试这个..

Sub GetQtyStatus() 
Dim sws As Worksheet, dws As Worksheet 
Dim Rng As Range, Cell As Range 
Dim lr As Long, r As Long 

Application.ScreenUpdating = False 

Set sws = Sheets("Shipment") 
Set dws = Sheets("Record") 
lr = dws.Cells(Rows.Count, 1).End(xlUp).Row 
Set Rng = dws.Range("A2:A" & lr) 

For Each Cell In Rng 
    If Application.CountIf(sws.Columns(1), Cell.Value) > 0 Then 
     r = Application.Match(Cell.Value, sws.Columns(1), 0) 
     If Cell.Offset(0, 1) = sws.Cells(r, 2) Then 
      Cell.Offset(0, 2) = "Complete" 
     Else 
      Cell.Offset(0, 2) = "Incomplete" 
     End If 
    End If 
Next Cell 

Application.ScreenUpdating = True 
End Sub 

如何实现代码:

  1. 打开工作簿,然后按Alt + F11,打开VB编辑器。
  2. 在VB编辑器 - >插入 - >模块并将上面的代码粘贴到打开的代码窗口中。
  3. 关闭VB编辑器并将您的工作簿保存为启用宏的工作簿。

如何运行代码:

  1. 按Alt + F8打开宏窗口。
  2. 选择宏GetQtyStatus并单击运行。

该代码假定在工作簿中有两张名为“记录”和“装运”的工作表,并且在两张工作表上的A和B列分别列出了UID和Qty。

+0

非常感谢,这正是我所期待的! – GrandeurH

+0

不客气!乐于帮助。 – sktneer

2

假设你的表Shipment如下

enter image description here

然后,在表RecordCell C2输入以下公式

=IFERROR(IF(INDEX($A$2:$A$6,MATCH(1,(A2=Shipment!$A$2:$A$3)*1,0)),IFERROR(IF(INDEX($A$2:$A$6,MATCH(1,(B2=Shipment!$B$2:$B$3)*1,0)),"Complete"),"Incomplete"),""),"") 

这是阵列式按Ctrl键 + + 输入所以提交它。根据需要拖放/复制。请参阅图像。

enter image description here

+0

感谢您抽出宝贵时间回答问题,我期待,公式将取代之前发货的意见,如果UID不匹配 – GrandeurH

1

非阵列式,可实现全面列引用和输入为正常:

=IF(ISNUMBER(MATCH(A2,Shipment!A:A,0)),IF(COUNTIFS(Shipment!A:A,A2,Shipment!B:B,B2),"Complete","Imcomplete"),"") 

enter image description here


或者该较短版本:

=IFERROR(IF(INDEX(Shipment!B:B,MATCH(A2,Shipment!A:A,0)) = B2,"Complete","Imcomplete"),"") 
+0

谢谢你的公式,但是,有没有人有一个公式,如果UID不匹配,然后什么都不做,因为一些UIDs将有评论从前几个星期和公式将用空白取代注释? (当我说评论我的意思是“完整”“不完整”) – GrandeurH

+2

是的,你会需要vba然后。堆栈溢出不是我网站的代码。我只是回答了一个更好的替代数组公式。 –