2016-06-29 83 views
1

我有8行這樣由逗號分隔:在Excel中如何過濾行基於該標準

ID Code Cost  
1  X  20 
2    20 
3    50 
4    50 
5  Y  10 
6    10 
7    70 
8    70 

的標準是:

如果在代碼列中的值存在,打印行和行之後否則什麼都不做。

你怎麼能在excel中做任何數量的行?

請注意,訂單總是相同,因此您可以假設一個代碼被發現的行和後面的一個將始終打印。在上面的例子中,輸出我得到的是:

ID Code Cost  
1  X  20 
2    20 
5  Y  10 
6    10 
+1

你的意思是打印的行和之後的行?另外,你需要證明你所做的工作。然後人們會幫助你解決問題。 – Brian

+0

就是這個意思。對不起,我說記錄應該有說的行。我編輯了我的帖子以反映這一點。 – Icebreaker

回答

1

假設1,X,20是細胞A2

在單元格B2複製以下代碼:

=IF(OR(IF(RIGHT(LEFT(A2,SEARCH(",",A2,1)),1)=MID(A2,SEARCH(",",A2,1)+1,1),FALSE,TRUE),AND(B1=A1,B1<>"",IF(A1<>"",IF(RIGHT(LEFT(A1,SEARCH(",",A1,1)),1)=MID(A1,SEARCH(",",A1,1)+1,1),FALSE,TRUE),FALSE))),A2,"") 

在細胞C2輸入以下代碼:

=IF(B2="","",MAX(C$1:C1)+1) 

在細胞D2輸入,而不是擊中輸入下面的代碼和,擊中Ctrl + Shift + 輸入

=IFERROR(INDEX($B$2:$B$9,MATCH(ROW()-ROW(D$1),C$2:C$9,0)),"") 

複製細胞B2C2,並D2到行9

所需輸出將在列D - 隱藏列B and C如果需要。

+0

我在他們自己的細胞中擁有所有的價值,你說是把所有的東西放到一個細胞裏?無論如何要把所有東西放在自己的牢房裏去做? – Icebreaker

0

好的,因爲每個數據是在不同的小區,並且假定圖1是A2,X是在B2,和20是在C2,

在D2輸入:

= IF(OR( B2 <> 「」,和(B2 = 「」,B1 <> 「」)),MAX(d $ 1:D1)+1 「」)

輸入E2:

= IF(COUNTBLANK ($ D2)= 0,IF(A2 =「」,「」,A2),「」)

En叔在F2:

= IF(COUNTBLANK($ D2)= 0,IF(B2 = 「」, 「」,B2), 「」)

在G2輸入:

= IF( COUNTBLANK($ D2)= 0,IF(C2 = 「」, 「」,C2), 「」)

CTRL + SHIFT +輸入H2:

= IFERROR(INDEX(E $ 2:E $ 9 ,MATCH(ROW() - ROW(H $ 1),$ D $ 2:$ D $ 9,0)),「」)

Ctrl + Shift + Enter in I2:

= IFERROR(INDEX(F $ 2:F $ 9 MATCH(ROW() - ROW(I $ 1),$ d $ 2:$ d $ 9,0)), 「」)

CTRL + SHIFT +輸入在J2:

= IFERROR(INDEX(G $ 2:G $ 9 MATCH(ROW() - ROW(j $ 1),$ d $ 2:$ d $ 9,0)), 「」)

將D2:J2下降到第9行和隱藏列到Gð

+0

在您的代碼周圍添加代碼標籤 - 會使閱讀起來更容易 – dbmitch

1

前:

autofilter_before

運行這段代碼:

Option Explicit 

Sub specialFilter() 
    Dim a As Long, aARRs As Variant, dKEYs As Object 

    Set dKEYs = CreateObject("Scripting.Dictionary") 
    dKEYs.CompareMode = vbTextCompare 

    With Worksheets("Sheet2") 
     If .AutoFilterMode Then .AutoFilterMode = False 
     With .Cells(1, 1).CurrentRegion 
      'build a dictionary so the keys can be used as the array filter 
      aARRs = .Range(.Cells(2, 1), .Cells(.Rows.Count, 2)).Value2 
      For a = LBound(aARRs, 1) To UBound(aARRs, 1) 
       If CBool(Len(aARRs(a, 2))) Then 
        dKEYs.Add Key:=CStr(aARRs(a, 1)), Item:=aARRs(a, 1) 
        If a < UBound(aARRs, 1) Then _ 
         dKEYs.Add Key:=CStr(aARRs(a + 1, 1)), Item:=aARRs(a + 1, 1) 
       End If 
      Next a 

      'filter on column B if dictionary keys exist 
      If CBool(dKEYs.Count) Then _ 
       .AutoFilter Field:=1, Criteria1:=dKEYs.Keys, _ 
             Operator:=xlFilterValues 

      'data is filtered in column A for any value in column B (and the subsequent row) 
      'Perform work on filtered data here 

     End With 
     If .AutoFilterMode Then .AutoFilterMode = False 
    End With 

    dKEYs.RemoveAll: Set dKEYs = Nothing 
End Sub 

後:

autofilter_after