根据左列单元组合相邻行单元格
我想根据左侧的相邻单元格将右侧列中的单元格合并到一个单元格中。 我尝试合并,但我只能得到这么多。 而在网上search后,我找不到任何可以parsing每一行,并结合左侧单元格跨度的长度。 我知道这是一个CONCATENATE函数,但我怎样才能parsing整个电子表格?
这是我想为上面的结果的一个例子:
这可能太复杂 – 在这种情况下,我会回到绘图板,并做一个完整的VBA版本,但最初我正在寻找一个挑战,只使用公式构build一个解决scheme。 不幸的是,似乎没有标准的基于公式的方法来连接可变数量的单元。
所以,为了做到这一点,我添加了一个function:
Function CombineRange(ByRef rng As Range, ByVal delim As String) Dim arr Dim i As Long arr = rng.Value CombineRange = "" For i = 1 To UBound(arr) If i > 1 Then CombineRange = CombineRange & delim End If CombineRange = CombineRange & arr(i, 1) Next i End Function
假设:
- 你的数据在名为“你的数据”
- 您的合并数据是A列
- 你的“单行”数据是B列
- 第1行是某种标题行。
接下来,在一张新纸上设置四列(我称之为“折叠”)
A – 开始行=(第一行)你的数据开始的任何行(在我们的例子中是2)
A – 开始行=(所有其他) A2+B2
B – Offset = {IFERROR(MATCH(FALSE,ISBLANK(INDIRECT(ADDRESS(A2+1,1,,,"YourData")&":A200")),0),0)}
注意这是一个数组函数,所以在input时需要做shift + Enter
C – Level1 = =INDEX(YourData!A:A,A2)
=IF(B2<=1, INDIRECT(ADDRESS(A2,2,,,"YourData")), CombineRange(INDIRECT(ADDRESS(A2,2,,,"YourData")&":"&ADDRESS(A2+B2-1,2)),"; "))
组合级别2 = =IF(B2<=1, INDIRECT(ADDRESS(A2,2,,,"YourData")), CombineRange(INDIRECT(ADDRESS(A2,2,,,"YourData")&":"&ADDRESS(A2+B2-1,2)),"; "))