将多列中的值合并为一列

cpl*_*lus 3 excel vba excel-vba excel-formula

我有以下数据结构:

数据+预期结果+我得到的

正如您在第J列中看到的,我正在尝试将数据合并到A&CE&G列中一列中.

我正在使用这个公式:

=IF(ROW()<=COUNTA($A:$A);INDEX($A:$C;ROW();COLUMN(A1));INDEX($A:$C;ROW()-COUNTA($A:$A)+1;COLUMN(C1)))
Run Code Online (Sandbox Code Playgroud)

如你所见,我在K列中得到了值.目前这个公式只合并了两列.如何修改它以合并所有四列?


以及如何从第5行开始获取这些值?
柱高将不断变化:有时在A列中有10个值,有时有2个值.


任何excel公式或任何VBA代码都是可以接受的.

小智 7

有一种相当标准的方法可以从列中检索唯一值,但不能从多列中检索.要实现从多个列的检索,您需要将多个公式一起堆叠,并将处理传递给连续的列,前面的公式错误输出.

      从多列收集唯一

J5中的数组公式 ¹是,

=IFERROR(INDEX($A$5:$A$99, MATCH(0, IF(LEN($A$5:$A$99), COUNTIF(J$4:J4, $A$5:$A$99), 1), 0)),
 IFERROR(INDEX($C$5:$C$99, MATCH(0, IF(LEN($C$5:$C$99), COUNTIF(J$4:J4, $C$5:$C$99), 1), 0)),
 IFERROR(INDEX($E$5:$E$99, MATCH(0, IF(LEN($E$5:$E$99), COUNTIF(J$4:J4, $E$5:$E$99), 1), 0)),
 IFERROR(INDEX($G$5:$G$99, MATCH(0, IF(LEN($G$5:$G$99), COUNTIF(J$4:J4, $G$5:$G$99), 1), 0)),
 ""))))
Run Code Online (Sandbox Code Playgroud)

我只包括A,C,E和G列,因为您的样本数据仅显示B,D,F和H列中的重复项.


¹ 数组公式需要用Ctrl+ Shift+ 完成Enter↵.如果输入正确,Excel将公式括在大括号中(例如{}).您不要自己键入大括号.一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们.尝试并减少对更接近表示实际数据范围的范围的全列引用.数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯.有关更多信息,请参阅数组公式的指南和示例.