vba - 将多列中的值合并为一列

标签 vba excel excel-formula

我有以下数据结构:

Data+Expected Results+What I get

正如您在J 列中看到的那样,我正在尝试将A列和C列和E列中的数据合并到一列中> & G

我正在使用这个公式:

=IF(ROW()<=COUNTA($A:$A);INDEX($A:$C;ROW();COLUMN(A1));INDEX($A:$C;ROW()-COUNTA($A:$A)+1;COLUMN(C1)))

我得到了K列中的值,如您所见。目前该公式仅合并两列。 如何修改它以合并所有四列?


如何只获取从第 5 行开始的值?
列高会不断变化:有时 A 列中有 10 个值,有时有 2 个值。


任何 Excel 公式或任何 VBA 代码都可以接受。

最佳答案

有一个相当标准的方法可以从列中检索唯一值,但不能从多个列中检索唯一值。要实现从多列检索,您需要将多个公式堆叠在一起,并将处理传递到后续列(其中较早的公式出错)。

       Collect Unique from multiple columns

J5 中的数组公式1 为,

=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)),
 ""))))

我只包含 A、C、E 和 G 列,因为您的示例数据仅显示 B、D、F 和 H 列中的重复项。

<小时/>

1 数组公式需要使用 Ctrl+Shift+Enter↵ 来完成。如果输入正确,Excel 会将公式括在大括号中(例如 {})。您不必自己输入大括号。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试将整列引用减少到更接近地代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将引用范围缩小到最小值。请参阅Guidelines and examples of array formulas了解更多信息。

关于vba - 将多列中的值合并为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30329189/

相关文章:

vba - 使用 VBA 在 Word 中创建另一个范围对象的副本

Excel VBA : Loop is working but not refreshing before printing to PDF file

excel - 在一系列具有相似公式的单元格中,如何使某些值变为绝对值而某些值保持变量?

arrays - 如何将 VBA 集合写入 Excel 工作表

excel - 与语言无关的方式来引用 "Sheet"?

excel - 带有嵌套 AND、OR 和不等式的 SUMIFS

excel - 根据每行中两个单元格中的值格式化行

excel - 需要帮助修复我的代码以通过 vba 发送自动电子邮件

ms-access - 更新一行后 MS Access 运行代码

excel - 如何通过宏更改工作表样式?