2017-07-16 169 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然後。堆棧溢出不是我網站的代碼。我只是回答了一個更好的替代數組公式。 –