将 Excel table 转换为列表跳过空白值
Transform Excel table into list skipping blank values
很遗憾,我还没有在网上找到解决方案 - 希望有人可以帮助我解决以下问题:
我的输入是一个exceltable,如下所示:
| | 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 |
谁知道如何做到这一点?我考虑了一下枢轴 table 但没能做到。
PS:我可以轻松处理中间步骤,将输入 table 中的 yes
替换为相应的 Topic *
,但我无法执行跳过空格的第二步。
Select 适当的范围,主页 > 编辑,查找并 Select,转到特殊...,空白,select 其中之一 selected,删除...,向上移动单元格,确定。
对于公式解决方案,假设您的数据在 A1:E5 中,首先将月份复制到新的水平范围内,然后在 Jan
下面的单元格中输入以下公式作为 array-formula 通过按住 ctrl+shift
的同时点击 enter
。 (如果操作正确,Excel 将在公式栏中的公式周围放置大括号 {...}
:
=IFERROR(INDEX($A:$A,SMALL((B:B="yes")*ROW($A:$A),ROWS(:1)+COUNTBLANK(B:B))),"")
适当调整单元格引用,但保留公式中所示的寻址方法。
然后向右下方拖动。
如果我们开始于:
我们可以先替换"yes"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
生产:
很遗憾,我还没有在网上找到解决方案 - 希望有人可以帮助我解决以下问题:
我的输入是一个exceltable,如下所示:
| | 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 |
谁知道如何做到这一点?我考虑了一下枢轴 table 但没能做到。
PS:我可以轻松处理中间步骤,将输入 table 中的 yes
替换为相应的 Topic *
,但我无法执行跳过空格的第二步。
Select 适当的范围,主页 > 编辑,查找并 Select,转到特殊...,空白,select 其中之一 selected,删除...,向上移动单元格,确定。
对于公式解决方案,假设您的数据在 A1:E5 中,首先将月份复制到新的水平范围内,然后在 Jan
下面的单元格中输入以下公式作为 array-formula 通过按住 ctrl+shift
的同时点击 enter
。 (如果操作正确,Excel 将在公式栏中的公式周围放置大括号 {...}
:
=IFERROR(INDEX($A:$A,SMALL((B:B="yes")*ROW($A:$A),ROWS(:1)+COUNTBLANK(B:B))),"")
适当调整单元格引用,但保留公式中所示的寻址方法。
然后向右下方拖动。
如果我们开始于:
我们可以先替换"yes"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
生产: