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

时间:2016-07-26 23:57:28

标签: excel excel-formula excel-2010

这看起来非常简单,但我似乎无法理解它。所以我有两列。 A有名字,B有值。我想做的就是复制这个列表(进入D和E列),只排除B列中的0个值。(我在下面列举了一个我正在寻找的例子)

enter image description here

我在excel上并不是那么出色,所以这有点挑战。我正在尝试使用公式,因为我需要它在B列中的值更改时自动更新。 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

您可以使用数据透视表。将目标拖动到行,将值拖到值字段中。然后右键单击数据透视表中的任意目标,然后选择过滤器>值过滤器,并过滤值总计不为零。

enter image description here

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

答案 1 :(得分:1)

我相信我有一个应该有效的配方版本。将第一个非零行拉到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 + Enter输入它们。此外,如果您的列表超过99,则将公式中的所有99个更新为至少与列表长度一样大的数字。

这种方法的工作方式是使用OFFSET公式开始搜索前面列出的结果正下方的非零值。

答案 2 :(得分:0)

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

'Column D formula:
=IF(E1="","",A1)

'Column E Formula:
=IF(B1=0,"",B1)

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

我建议使用一个可以更加动态的宏。

    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中并为其指定一个命令按钮,并且应该适合您。

祝你好运!

答案 3 :(得分:0)

我的努力......

使用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”大到足以永远超出值列表。

下行:附加“”以防止零显示,使数字表现为文本。

enter image description here