2016-09-29 120 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 
相关问题