不幸的是我没有在网上找到解决方案 - 希望有人可以帮我解决以下问题:
我的输入是一个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 *
,但我无法执行跳过空白的第二步。
答案 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)
如果我们开始:
我们可以先取代"是" 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
生产:
答案 2 :(得分:0)
选择合适的范围,HOME>编辑,查找&选择,转到特殊...,空白,选择其中一个选择,删除...,向上移动单元格,确定。