Excel连接未知数量的单元格值而不使用VBA

我需要发送Excel文件到第三方来捕获数据,我不能使用VBA。

用户必须捕获至less一个string,默认情况下,最多可以捕获10个string,例如D23:D32。 第33行是一个空行。 从第34行开始,其他数据必须被捕获。 我可以为D33或D34定义一个名称。

如果用户需要捕获10个以上的string,他可以插入额外的行。

现在我需要连接用户捕获的string用分号分隔。 澄清我的意思。 如果用户不能插入行这个公式会做到这一点:

=D23 & IF(D24="","",";"&D24) & IF(D25="","",";"&D25) & IF(D26="","",";"&D26)&IF(D27="","",";"&D27)&IF(D28="","",";"&D28)&IF(D29="","",";"&D29)&IF(D30="","",";"&D30)&IF(D31="","",";"&D31)&IF(D32="","",";"&D32) 

有没有办法来包含用户可能添加的行?

一个简单的VBA用户定义函数将提供一个更简单,更强大的解决scheme。

如果您可以确保您的用户只在列表底部插入行,则可以使用表格和隐藏列。

 D22: Data E22: Concatenation E23: =D23 E24: =CONCATENATE(E23,";",D24) 

将E24填充到桌子的底部。

显示结果的公式(在下面的屏幕截图的D19中):

 =LOOKUP(2,1/(RIGHT(Table1[concatenation],1)<>";"),Table1[concatenation]) 

因为这是一个表格,所以在插入行和添加其他条目时,公式将会扩展。 然而,该方法将需要用户方面的纪律,因为该结构可以容易地搞砸。

以下是它可能的样子,列E 隐藏,公式显示在相邻的单元格中:

在这里输入图像说明

另一方面,可以devise一个简单的用户定义函数,将D23中的所有数据返回到第一个空白行,并连接起来; 或者如果范围内可能有空白,可以用某种其他方式select范围。

由范围空白 ,我的意思是可能有在D23:D32范围内的项是空白的,有效数据低于。 例如。 D23,D24和D30中的有效数据,在D25:D29中没有任何内容

以下是UDF的样子:

 Function ConcatLines(rg As Range, Optional Delimiter As String = " ") As String Dim C As Range For Each C In rg ConcatLines = ConcatLines & Delimiter & C Next C ConcatLines = Mid(ConcatLines, 2) End Function 

显示结果的公式,从D23到它下面的第一个空白行,将被数组input

 =ConcatLines(OFFSET($D$23,0,0,MATCH(TRUE,ISBLANK($D$23:$D$100),0)-1),";") 

数组input公式,请按住Ctrl键并按Enter键 。 如果你这样做是正确的,Excel将把括号{…}放在公式的周围。