根据左列单元格组合相邻的行单元格

时间:2016-04-04 12:53:43

标签: excel excel-vba parsing concatenation spreadsheet vba

我想根据左边的相邻单元格将右列中的单元格组合成一个单元格。我试过合并,但我只能到目前为止。在线搜索后,我找不到任何可以解析每一行并合并左侧单元格跨度长度的内容。我知道这是一个CONCATENATE函数,但是如何让它解析整个电子表格呢?

Adjacent Cells

这是我想要的结果的一个例子:

enter image description here

1 个答案:

答案 0 :(得分:1)

这可能太复杂了 - 在这种情况下,我会回到绘图板并完成一个完整的VBA版本,但最初我正在寻找一个挑战,只使用公式构建解决方案。不幸的是,似乎没有标准的基于公式的方法来连接可变数量的细胞。

所以,为了做到这一点,我添加了一个功能:

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

假设:

  • 您的数据位于名为“YourData”
  • 的工作表中
  • 您的合并数据是A列
  • 您的“单行”数据是B列
  • 第1行是某种标题行。

your data

接下来,在新工作表上设置四列(我称之为“Collapsed”)

A - 开始行=(第一行)数据开始的任何行(2,在我们的例子中)

A - 开始行=(所有其他人)A2+B2

B - 偏移= {IFERROR(MATCH(FALSE,ISBLANK(INDIRECT(ADDRESS(A2+1,1,,,"YourData")&":A200")),0),0)}

请注意,这是一个数组函数,因此您需要在输入时执行shift + Enter

C - 等级1 = =INDEX(YourData!A:A,A2)

D - 合并等级2 = =IF(B2<=1, INDIRECT(ADDRESS(A2,2,,,"YourData")), CombineRange(INDIRECT(ADDRESS(A2,2,,,"YourData")&":"&ADDRESS(A2+B2-1,2)),"; "))

enter image description here