将所有单元格的值合并到升序范围内

问题描述 投票:-1回答:1

我试图弄清楚如何在A列中设置的范围之间连接D列中的每个单元格(普通文本)。在搜索时,我遇到了串联,textjoin和其他函数的变体,但似乎找不到正确的选项。

我的文件中大约有8000个值(A列中的ID值),因此应自动填充而不是手动填充。因为需要数周才能完成...

我添加了问题的直观表示

enter image description here

解决方案是,在D列中选择A列中值“ 1”和“ 2”之间的所有单元格,并在A列中单元格不为空的行中的E列中加入Togheter。我希望有人可以帮助我解决这个问题。

excel vba excel-formula concat
1个回答
0
投票

请尝试此代码。它应该非常有用,使用数组并在最后一次返回构建的字符串:

Sub testJoinBetweenLimits()
  Dim sh As Worksheet, arrInit As Variant, arrFin As Variant
  Dim strInit As String, i As Long, j As Long, refRow As Long
    Set sh = ActiveSheet 'use here your sheet
    arrInit = sh.Range("A2:D" & sh.Range("D" & Cells.Rows.Count).End(xlUp).Row).value
    ReDim arrFin(1 To 1, 1 To UBound(arrInit, 1))
    For i = 1 To UBound(arrInit, 1)
        If arrInit(i, 1) <> "" Then strInit = arrInit(i, 4): refRow = i: j = i + 1
        Do While arrInit(j, 1) = ""

            If arrInit(j, 4) <> "" Then
                strInit = strInit & ", " & arrInit(j, 4)
            Else
                arrFin(1, j) = Empty
            End If
            j = j + 1
                If j >= sh.Range("D" & Cells.Rows.Count).End(xlUp).Row Then
                    arrFin(1, refRow) = strInit
                    ReDim Preserve arrFin(1 To 1, 1 To refRow)
                    GoTo Ending
                End If
        Loop
        i = j - 1
        arrFin(1, refRow) = strInit: strInit = "": j = 0
    Next i
Ending:
    sh.Range("E2").Resize(UBound(arrFin, 2), 1).value = WorksheetFunction.Transpose(arrFin)
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.