我有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
答案 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)
在:
运行此代码:
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
后:
答案 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列。