【问题标题】:Concatenate value in each column based on cell value根据单元格值连接每列中的值
【发布时间】:2022-01-19 09:06:27
【问题描述】:

您好,我需要根据行是否为空或具有任何值来连接列。
IE。我有这样的数据

我需要这样的数据

问题是我要加入的列将超过 50 列,我必须检查每一列和行中是否有空白或数字。

你能帮我解决这个问题吗?

【问题讨论】:

标签: excel vba concatenation


【解决方案1】:

如果您要求 VBA 解决方案,请尝试下一个代码。它将处理尽可能多的Value 列,并在最后一列之后的两列返回处理结果。使用数组,即使是大范围的代码也会非常快:

Sub ConcatenateWithValues()
   Dim sh As Worksheet, lastR As Long, lastCol As Long, arr, arrH, arrFin
   Dim strConc As String, i As Long, j As Long
   
   Set sh = ActiveSheet   'use here the sheet you need
   lastR = sh.Range("A" & sh.Rows.count).End(xlUp).row          'last row on column A:A
   lastCol = sh.cells(1, sh.Columns.count).End(xlToLeft).Column 'last column on the first row
   
   arr = sh.Range("A1", sh.cells(lastR, lastCol)).Value         'place the whole range in an array, for faster iteration
   arrH = sh.Range("A1", sh.cells(1, lastCol)).Value            'Place headers in an array
   ReDim arrFin(1 To UBound(arr), 1 To 2)                       'Redim the array to contain the processing result
   arrFin(1, 1) = arrH(1, 1): arrFin(1, 2) = "Concatenate_Value"'Place the headers in the array
   For i = 2 To UBound(arr)
        For j = 2 To lastCol 'build the necessary concatenation
            If arr(i, j) <> "" Then strConc = strConc & arrH(1, j) & ":" & arr(i, j) & ";"
        Next
        arrFin(i, 1) = arr(i, 1): arrFin(i, 2) = left(strConc, Len(strConc) - 1) 'remove the last ";" character
        strConc = ""         'reinitialize the string keeping row concatenation
   Next i
   'Drop the processed array content at once:
   sh.cells(1, lastCol + 2).Resize(UBound(arrFin), 2).Value = arrFin
End Sub

【讨论】:

  • @Kateřina Chábová 很高兴我能帮上忙!我添加了更多的 cmets 以便于理解代码的作用......
【解决方案2】:

使用 Microsoft-365 您可以尝试-

=TEXTJOIN("; ",TRUE,FILTER(IF($B$2:$D$5<>"",$B$1:$D$1&":"&$B$2:$D$5,""),$A$2:$A$5=F2))

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多