如何根据此条件筛选excel中的行

时间:2016-06-29 17:17:46

标签: excel excel-formula autofilter

我有8行像这样用逗号分隔:

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  

3 个答案:

答案 0 :(得分: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)),"")

将单元格 B2 C2 D2 复制到第9行。< / p>

您想要的输出位于 D 列中 - 隐藏 B 列和 C 如果需要的话。

答案 1 :(得分: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

答案 2 :(得分:0)

好的,因为每个数据都在不同的单元格中,假设1在A2中,X在B2中,20在C2中,

输入D2:

= IF(OR(B2&LT;&GT;&#34;&#34;和(B2 =&#34;&#34;,B1&LT;&GT;&#34;&#34)),MAX (d $ 1:D1)1&#34;&#34)

输入E2:

= IF(COUNTBLANK($ D2)= 0,IF(A2 =&#34;&#34;&#34;&#34;,A2),&#34;&#34)

输入F2:

= IF(COUNTBLANK($ D2)= 0,IF(B2 =&#34;&#34;&#34;&#34;,B2)&#34;&#34)

输入G2:

= IF(COUNTBLANK($ D2)= 0,IF(C2 =&#34;&#34;&#34;&#34;,C2),&#34;&#34)

Ctrl + Shift +在H2中输入:

= IFERROR(INDEX(E $ 2:E $ 9 MATCH(ROW() - ROW(H $ 1),$ d $ 2:$ d $ 9,0)),#34;&#34)

Ctrl + Shift +在I2中输入:

= IFERROR(INDEX(F $ 2:F $ 9 MATCH(ROW() - ROW(I $ 1),$ d $ 2:$ d $ 9,0)),#34;&#34)

Ctrl + Shift +在J2中输入:

= IFERROR(INDEX(G $ 2:G $ 9 MATCH(ROW() - ROW(j $ 1),$ d $ 2:$ d $ 9,0)),#34;&#34)

将D2:J2向下拖动到第9行并隐藏D到G列。