vba宏比较excel中的两列?
我想将一张纸(Shipment
)中的QTY
和UID
与另一张纸(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
您不能在同一单元格中同时存在值和公式。 您需要使用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
如何实现代码:
- 打开工作簿,然后按Alt + F11,打开VB编辑器。
- 在VB编辑器 - >插入 - >模块并将上面的代码粘贴到打开的代码窗口中。
- 关闭VB编辑器并将您的工作簿保存为启用宏的工作簿。
如何运行代码:
- 按Alt + F8打开宏窗口。
- 选择宏GetQtyStatus并单击运行。
该代码假定在工作簿中有两张名为“记录”和“装运”的工作表,并且在两张工作表上的A和B列分别列出了UID和Qty。
假设你的表Shipment
如下
然后,在表Record
的Cell 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键 + 移 + 输入所以提交它。根据需要拖放/复制。请参阅图像。
感谢您抽出宝贵时间回答问题,我期待,公式将取代之前发货的意见,如果UID不匹配 – GrandeurH
非阵列式,可实现全面列引用和输入为正常:
=IF(ISNUMBER(MATCH(A2,Shipment!A:A,0)),IF(COUNTIFS(Shipment!A:A,A2,Shipment!B:B,B2),"Complete","Imcomplete"),"")
或者该较短版本:
=IFERROR(IF(INDEX(Shipment!B:B,MATCH(A2,Shipment!A:A,0)) = B2,"Complete","Imcomplete"),"")
谢谢你的公式,但是,有没有人有一个公式,如果UID不匹配,然后什么都不做,因为一些UIDs将有评论从前几个星期和公式将用空白取代注释? (当我说评论我的意思是“完整”“不完整”) – GrandeurH
是的,你会需要vba然后。堆栈溢出不是我网站的代码。我只是回答了一个更好的替代数组公式。 –
您需要考虑的一件事:您必须在分批装运后更新“记录”,否则,其余货物也将被视为“不完整” – jsotola