像这样用逗号分隔的行有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
发布于 2016-06-29 12:11:49
在此之前:
运行以下代码:
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
之后:
发布于 2016-06-29 11:22:59
好的,因为每个数据都在一个不同的单元格中,假设1在A2中,X在B2中,20在C2中,
输入D2:
=IF(OR(B2<>“,AND(B2=”,B1<> "") ),最大值(D$1:D1)+1,“”)
输入E2:
=IF(COUNTBLANK($D2)=0,IF(A2="","",A2),"")
输入F2:
=IF(COUNTBLANK($D2)=0,IF(B2="","",B2),"")
输入G2:
=IF(COUNTBLANK($D2)=0,IF(C2="","",C2),"")
Ctrl+Shift+Enter in H2:
=IFERROR(索引(E$2:e$9,MATCH(行)-ROW(H$1,$D$2:$D$9,0)),"")
Ctrl+Shift+Enter in I2:
=IFERROR(索引(F$2:F$9,MATCH(行)-ROW(I$1,$D$2:$D$9,0)),"")
Ctrl+Shift+Enter in J2:
=IFERROR(索引(G$2:G$9,MATCH(行)-ROW(J$1,$D$2:$D$9,0)),"")
将D2:J2向下拖动到第9行,并隐藏D列到G。
https://stackoverflow.com/questions/38106229
复制