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

不幸的是,我还没有find一个解决scheme在networking上 – 希望有人可以帮助我以下几点:

我的input是一个像下面这样的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:我可以很容易地处理中间步骤,用相应的Topic *代替input表中的yes ,但是我不能执行跳过空白的第二步。

对于公式解决scheme,假设您的数据在A1:E5中,首先将月份复制到一个新的水平范围内,然后在Jan下面的单元格中,按下ctrl+shift并按下Enter键,将下列公式input为数组公式 。 (如果正确执行此操作,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))),"") 

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

然后向下拖动到右侧。

如果我们从以下开始:

在这里输入图像描述

我们可以先replace“是”。 然后删除空白。 然后清除第一列。 我们运行macrosMAIN

 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 

生产:

在这里输入图像说明

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