使用公式将两列或更多列数据合并到一列中

时间:2014-10-29 08:48:39

标签: excel-vba excel-formula vba excel

我需要将不同列中的Sch Code收集到一列中,如下所示。

如果可能,首要的是通过公式或UDF函数。

我的数据

Column A    Column B    Column C    Column D    Column E    Column F    Column G  
SCH Code    Value       SCH Code    Value       Rating      SCH Code    Value
C01-3-1     4           C01-4-1     8           300         C02-3-1     8
                                                300         C02-3-5     9
C01-3-2     5           C01-4-2     12          300         C02-3-2     12
C01-3-3     6           C01-4-3     21          300         C02-3-3     21
                                                300         C02-3-6     10
C01-3-4     7           C01-4-4     4           300         C02-3-4     4

必填结果(摘要表中只需要Sch代码,但公式或VBA UDF函数需要它):

Column A

C01-3-1                     
C01-3-2                     
C01-3-3                     
C01-3-4                     
C01-4-1                     
C01-4-2                     
C01-4-3                     
C01-4-4                     
C02-3-1                     
C02-3-5                     
C02-3-2                     
C02-3-3                     
C02-3-6                     
C02-3-4 

2 个答案:

答案 0 :(得分:1)

您可以使用数组公式从A列收集唯一的非空白值,例如=INDEX($A$2:$A$99,MATCH(0, IF(LEN($A$2:$A$99),COUNTIF(I$1:I1,$A$2:$A$99),1),0))。由于这会返回#N/A,其中没有更多值可从其列返回,因此您可以将控制权转移到引用具有IFERROR的其他列的类似公式。

enter image description here

要从三列SCH代码中进行选择,您需要将此深度叠加3。 I2中的公式是:

=IF(LEN(I1),IFERROR(INDEX($A$2:$A$99,MATCH(0, IF(LEN($A$2:$A$99),COUNTIF(I$1:I1,$A$2:$A$99),1),0)),IFERROR(INDEX($C$2:$C$99,MATCH(0, IF(LEN($C$2:$C$99),COUNTIF(I$1:I1,$C$2:$C$99),1),0)),IFERROR(INDEX($F$2:$F$99,MATCH(0, IF(LEN($F$2:$F$99),COUNTIF(I$1:I1,$F$2:$F$99),1),0)),""))),"")

数组公式需要 Ctrl + Shift + Enter ,而不仅仅是 Enter 。一旦输入正确,可以填充它以捕获所有可能的值。我会填充至少三倍于你的行,以便如果空白在以后填写它们就会占有一席之地。

从理论上讲,你可以把它叠得更深,但是出于实际目的,我不会比这更深入。数组公式以对数速率消耗计算资源,因此数据大小将成为决定这是否是合适解决方案的关键因素。

答案 1 :(得分:0)

一个解决方案:

复制并粘贴A列数据下方C列中的所有值。突出显示列A并转到数据>删除重复项,然后选择数据>排序。