将Excel表转换为跳过空白值的列表

时间:2015-02-26 12:39:55

标签: excel list filter transform

不幸的是我没有在网上找到解决方案 - 希望有人可以帮我解决以下问题:

我的输入是一个excel表,如下所示:

|         |   Jan   |  Feb    |  Mar    |  Apr    | 
| Topic 1 |   yes   |         |  yes    |         | 
| Topic 2 |         |  yes    |         |         | 
| Topic 3 |   yes   |         |         |  yes    | 
| Topic 4 |         |         |         |  yes    | 

我想要的输出是一个列表,其中所有空白元素都被删除。它应该是这样的:

|         |   Jan   |  Feb    |  Mar    |  Apr    | 
|         | Topic 1 | Topic 2 | Topic 1 | Topic 3 | 
|         | Topic 3 |         |         | Topic 4 | 

任何人都明白如何做到这一点?我想到了一个关于数据透视表的第二个但是无法做到这一点。

PS:我可以轻松处理中间步骤,用相应的yes替换输入表中的Topic *,但我无法执行跳过空白的第二步。

3 个答案:

答案 0 :(得分:2)

对于公式解决方案,假设您的数据位于A1:E5中,首先将月份复制到新的水平范围,然后在Jan下方的单元格中输入以下公式作为数组 - 通过在点击ctrl+shift时按住enter来确定公式。 (如果您正确执行此操作,Excel将在公式栏中的公式周围放置大括号{...}

=IFERROR(INDEX($A$1:$A$5,SMALL((B$2:B$5="yes")*ROW($A$2:$A$5),ROWS($1:1)+COUNTBLANK(B$2:B$5))),"")

根据需要调整单元格引用,但保持寻址方法如公式所示。

然后向下拖动到右边。

答案 1 :(得分:1)

如果我们开始:

enter image description here

我们可以先取代"是" s。然后删除空白。然后清除第一列。我们运行宏 MAIN

Sub MAIN()
    Call step1
    Call step2
    Call step3
End Sub

Sub step1()
    For Each r In ActiveSheet.UsedRange
        If r.Value = "yes" Then
            r.Value = Cells(r.Row, 1).Value
        End If
    Next r
End Sub

Sub step2()
    Dim r As Range
    Set r = ActiveSheet.UsedRange.Cells.SpecialCells(xlCellTypeBlanks)
    r.Delete (xlShiftUp)
End Sub

Sub step3()
    Range("A:A").Clear
End Sub

生产:

enter image description here

答案 2 :(得分:0)

选择合适的范围,HOME>编辑,查找&选择,转到特殊...,空白,选择其中一个选择,删除...,向上移动单元格,确定。