2016-09-29 133 views
-2

我有表格中的數據,我想獲取其他表格中的數據,但是有條件。這是我的源數據的模樣:根據excel中的一個單元格狀態從一張表格中獲取數據到其他表格中。

------------------------------------------------- 
| Cell A | Cell B | Cell C | Cell D|Cell E |   
|------------------------------------------------| 
| Sku  |Order_ID|Customer_ID | Price |Status | 
|------------------------------------------------| 
| TW22  | 123 | 1  |221 | D | 
|------------------------------------------------| 
| TS44  | 124 |  2  |221 | D | 
|------------------------------------------------| 
| Ts11-ab | 33 |  3  |211 | D | 
|------------------------------------------------| 
| Ts11  | 231 |  4  |231 | D | 
|------------------------------------------------| 
| Ts11-ab | 33 |  3  |211 | R | 
|------------------------------------------------| 
| Ts11  | 231 |  4  |231 | R | 
|------------------------------------------------| 

如果有兩行相同的順序ID我想刪除的第一行(具有狀態d),並只保留第二行(狀態R)。對於上述數據所需的輸出爲:

-------------------------------------------------- 
| Cell A | Cell B | Cell C | Cell D|Cell E |   
|------------------------------------------------| 
| Sku  |Order_ID|Customer_ID | Price |Status | 
|------------------------------------------------| 
| TW22  | 123 | 1  |221 | D | 
|------------------------------------------------| 
| TS44  | 124 |  2  |221 | D | 
|------------------------------------------------| 
| Ts11-ab | 33 |  3  |211 | R | 
|------------------------------------------------| 
| Ts11  | 231 |  4  |231 | R | 
|------------------------------------------------| 

這是我試過的公式:

=IFERROR(INDEX(Sheet1!E$2:E$5,(MATCH($B2,Sheet1!B$2:B$5,0)))‌​,-1) 
+0

你試過什麼了嗎?聽起來這可以通過刪除重複項來完成。 – arcadeprecinct

+0

@arcadeprecinct我試過vba和vlookup公式。刪除重複使用的工具,但沒有得到結果我想要的,如果我刪除重複的「R」值數據刪除,但我需要的數據。你能否解釋他們是否有辦法做這件事情,因爲我需要。謝謝 – biz

+0

投下來不是任何問題的答案。無論如何,如果有人認爲它不是一個問題,在這個網站上要求可以投票下來。 – biz

回答

0

得到了阿迪亞答案..感謝這裏是他提供

Sub copy_sheet() 

Dim raw_data, new_data As Worksheet 

Set raw_data = ThisWorkbook.Sheets("raw_data") 
Set new_data = ThisWorkbook.Sheets("new_data") 

raw_data.Activate 
Range("A1:E1").Select 
Range(Selection, Selection.End(xlDown)).Copy 
new_data.Activate 
Range("A1").PasteSpecial xlPasteValues 
Range("A1").Sort key1:=Range("E1"), order1:=xlDescending, Header:=xlYes 
Range("A1:E1").Select 
Range(Selection, Selection.End(xlDown)).RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes 
Range("A1").Sort key1:=Range("E1"), order1:=xlAscending, Header:=xlYes 
Range("A1").Activate 
End Sub 
+0

這是非常好的,你找到了你自己的解決方案,並在這裏發佈。您可以在此解決方案中改進幾件事情。 [documentation]中有一些指針(http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9292/avoid-using-select-or-activate#t=20160929083602128133) – arcadeprecinct

0

我不知道你已經試過了什麼,但據我所知,帶「R」的那一行總是跟在「D」的那一行之後,對吧?你可以通過相反的順序通過你的表,並記住所有的行與R。在僞代碼類似:

size = yourTable.Rows.Count 
Dim col As New Collection 
For column = size To 1 Step -1 
    If StatusOfCurrentRow = "R" Then 
     Copy Row to Sheet2 
     col.Add Value of Sku 
    Else 
     If SkuOfCurrentRow not in col 
      Copy Row to Sheet2    
     End If 
    End If 
Next 
相關問題