Excel在没有VBA的情况下连接未知数量的单元格值

Excel在没有VBA的情况下连接未知数量的单元格值,excel,Excel,我需要发送一个Excel文件到第三方以捕获数据,我不能使用VBA 用户必须捕获至少一个字符串,默认情况下,最多可以捕获10个字符串,比如D23:D32范围内的字符串。 第33行是空行。 从第34行开始,必须捕获其他数据。我可以为D33或D34定义一个名称 如果用户需要捕获10个以上的字符串,则可以插入其他行 现在,我需要连接用户捕获的字符串,并用分号分隔它们。 澄清我的意思。如果用户无法插入行,则此公式将执行此操作: =D23 & IF(D24="","",";"&D24) &a

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

用户必须捕获至少一个字符串,默认情况下,最多可以捕获10个字符串,比如D23:D32范围内的字符串。 第33行是空行。 从第34行开始,必须捕获其他数据。我可以为D33或D34定义一个名称

如果用户需要捕获10个以上的字符串,则可以插入其他行

现在,我需要连接用户捕获的字符串,并用分号分隔它们。 澄清我的意思。如果用户无法插入行,则此公式将执行此操作:

=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用户定义函数将提供一个更简单、更健壮的解决方案

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

D22:  Data
E22: Concatenation

E23: =D23
E24: =CONCATENATE(E23,";",D24)
将E24填到表格底部

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

从D23到它下面的第一个空行,显示结果的公式是数组输入的

=ConcatLines(OFFSET($D$23,0,0,MATCH(TRUE,ISBLANK($D$23:$D$100),0)-1),";")
数组输入公式,请按住ctrl-shift,同时单击enter。如果操作正确,Excel将在公式周围放置大括号。

建议的方法

=查找(2,1/(右(表1[concatenation],1)”;”),表1[concatenation])

这是一个很好的例子。在没有Visual Basic/VBA的情况下,存在未知数量的单元格值。他的方法适用于有一组或多组要连接的单元格的情况,这很方便

让列A包含对单元格进行分组的唯一标识符

让列B包含要连接的项

A        B
--------|----------
Alice    The quick
Alice    brown
Alice    fox
Alice
Bruce    Fourscore
Bruce    and seven
Bruce    years ago
Bruce
Bruce
Carol    Yankee
Carol    doodle
Carol    dandy
列C用作辅助列。在C栏中,放置:

C1:=B1

C2:=IF(A2=A1,C1&“,”&B2,B2)

尽可能向下复制此文件

列D是结果列。在D栏中,放置:

D1:=IF(A1=A2,”,C1)

尽可能向下复制此文件。(这要感谢user@Krylose。)


列D将显示可以忽略的连接或空白。

假设公式有效,则可能存在的每一行都需要一个函数。由于插入行会打乱您的公式,所以您需要在某个地方有一个地址列表,并使用间接函数来引用行。但是您需要限制用户可能插入的行数。您可以使用公式生成地址数组,然后将索引函数应用于数组的不同元素,但这会显著延长公式的长度。谢谢,Ron。我不清楚如何使用公式生成地址数组。你能详细解释一下吗?非常感谢advanceRobert,数组公式=地址(行(间接(23&“:”&MATCH(TRUE,ISBLANK($D$23:$D$1004),0)+21)),4)将生成一个从D23到D列后第一个空白单元格的地址数组。但我在回答中有一个不同的可能解决方案。非常感谢,Ron,我需要检查一下,但可能在周五或周六之前无法完成。但是我当然会回来的,所以请耐心等待。再次非常感谢,罗伯蒂·罗恩,所以,我终于找到了一些时间。。。如果我能使用VBA,我会去的。使用Excel表格在插入行时复制单元格公式正是我所需要的。由于各种原因,我无法将该表放在D列旁边,因此我不得不将其放入P列。该表只有一列具有公式
=OFFSET(EthPOPIDs[[#此行],[Column1]],-1,0)&IF(ISBLANK(OFFSET(EthPOPIDs[#此行],[Column1]],0,-11)),“;”和OFFSET(EthPOPIDs[#此行],[Column1]],0,-11))
非常感谢你把我推向了正确的方向,罗恩@RobertBan很乐意为您提供帮助,其中一个解决方案对您有效。这假设连接总是比下一行长,但情况并非总是如此。D1更好的公式是=IF(A1=A2,“,C1),谢谢@Krylose。我已经根据你的评论更新了答案。请随意大胆地编辑别人的答案——我不会生气的!很好。
=ConcatLines(OFFSET($D$23,0,0,MATCH(TRUE,ISBLANK($D$23:$D$100),0)-1),";")
A        B
--------|----------
Alice    The quick
Alice    brown
Alice    fox
Alice
Bruce    Fourscore
Bruce    and seven
Bruce    years ago
Bruce
Bruce
Carol    Yankee
Carol    doodle
Carol    dandy