创build一个不包含0值的两列列表

这似乎非常容易,但我似乎无法让我的头靠近它。 所以我有两列。 A有名字,B有值。 我想要做的就是复制这个列表(列D和E),但不包括列B中的0值(我把下面的例子放在了我的头上)

在这里输入图像说明

我不擅长excel,所以这是一个挑战。 我试图让它与公式一起工作,因为我需要它来自动更新列B中的值更改时。 任何帮助将不胜感激。

我相信我有一个应该工作的公式版本。 将第一个非零行拖到D2:E2(手动或使用简单索引公式),然后在D3和E3中使用以下内容:

D3=IFERROR(INDEX(OFFSET($A$1,MATCH(D2&E2,$A$1:$A$99&$B$1:$B$99,0),0,99),MATCH(TRUE,(OFFSET($B$1,MATCH(D2&E2,$A$1:$A$99&$B$1:$B$99,0),0,99)<>0),0)),"") E3=IFERROR(INDEX(OFFSET($B$1,MATCH(D2&E2,$A$1:$A$99&$B$1:$B$99,0),0,99),MATCH(TRUE,(OFFSET($B$1,MATCH(D2&E2,$A$1:$A$99&$B$1:$B$99,0),0,99)<>0),0)),"") 

然后自动填充到列表的底部。

请注意,这些是数组公式,因此必须使用Ctrl + Shift + Enterinput。 此外,如果您的列表长度超过99,则将公式中的所有99更新为至less与列表长度一样大的数字。

这种工作方式是通过使用OFFSET公式来开始search刚刚在前面列出的结果下面的非零值。

你可以使用数据透视表。 将目标拖到行,值到值字段。 然后,右键点击数据透视表中的任何目标,然后select“filter”>“数值filter”,然后过滤总数不为零。

在这里输入图像说明

当更多的数据被添加到工作表时,只需刷新数据透视表,这可以通过VBA实现自动化。

你可以简单地使用公式来检查像这样的值…

 'Column D formula: =IF(E1="","",A1) 'Column E Formula: =IF(B1=0,"",B1) 

虽然我怀疑这是你在找什么,因为如果列B中的值是0,那么只留下D和E列中的空白单元格。

我会build议使用一个可以更加dynamic的macros。

  Sub Check_Values() Application.ScreenUpdating = False Range("D:E").Select Selection.ClearContents Dim name As Integer, val As Integer Dim name1 As Integer, val1 As Integer Dim Emptyrw As Long, Emptyrw1 As Long, Emptyrw2 As Long Dim i As Integer name = 1 val = 1 name1 = 1 val1 = 1 Emptyrw = WorksheetFunction.CountA(Range("B:B")) + 1 Emptyrw1 = WorksheetFunction.CountA(Range("D:D")) + 1 Emptyrw2 = WorksheetFunction.CountA(Range("E:E")) + 1 i = 1 Do While val < Emptyrw If Cells(val, 2) <> 0 Then Range(Cells(name, 1), Cells(val, 2)).Select Selection.Copy Range(Cells(Emptyrw1, 4), Cells(Emptyrw2, 5)).Select Selection.PasteSpecial Application.CutCopyMode = False End If name = name + 1 val = val + 1 name1 = name1 + 1 val1 = val1 + 1 Emptyrw1 = Emptyrw1 + 1 Emptyrw2 = Emptyrw2 + 1 Loop Do While i < Emptyrw1 If Cells(i, 4) = "" Then Range(Cells(i, 4), Cells(i, 5)).Select Selection.Delete Shift:=xlUp End If i = i + 1 Loop End Sub 

您可以将这些代码复制到您的VBA中,并为其分配一个命令button,并且应该为您工作。

祝你好运!

我的努力…

使用Ctrl + Shift + Enter键进入D2:

 =INDEX(A:A,SMALL(IF($B$2:$B$20<>0,ROW($A$2:$A$20),999),ROWS(A$2:A2)),1)&"" 

然后填写并跨过。

使“999”足够大,始终超出价值清单。

缺点:追加“”防止零显示使数字performance为文字。

在这里输入图像说明