【问题标题】:Concatenate a column of data (ignoring blanks) and separating data with line break连接一列数据(忽略空格)并用换行符分隔数据
【发布时间】:2017-08-18 03:05:04
【问题描述】:

希望将 A 列中的数据连接到 C 列,如附图所示。 (注意:C 列目前是硬编码的)

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: excel excel-formula concatenation


    【解决方案1】:

    使用 TEXTJOIN()

    =TEXTJOIN(char(10),TRUE,A1:A6)
    

    文本连接是在 Office 365 Excel 中引入的。如果没有,则将此代码放在附加到工作簿的模块中,并使用上述公式:

    Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
        Dim d As Long
        Dim c As Long
        Dim arr2()
        Dim t As Long, y As Long
        t = -1
        y = -1
        If TypeName(arr) = "Range" Then
            arr2 = arr.Value
        Else
            arr2 = arr
        End If
        On Error Resume Next
        t = UBound(arr2, 2)
        y = UBound(arr2, 1)
        On Error GoTo 0
    
        If t >= 0 And y >= 0 Then
            For c = LBound(arr2, 1) To UBound(arr2, 1)
                For d = LBound(arr2, 1) To UBound(arr2, 2)
                    If arr2(c, d) <> "" Or Not skipblank Then
                        TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                    End If
                Next d
            Next c
        Else
            For c = LBound(arr2) To UBound(arr2)
                If arr2(c) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c) & delim
                End If
            Next c
        End If
        TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
    End Function
    

    【讨论】:

      【解决方案2】:

      或者

      Function TEXTJOIN(arr, Optional sDelim As String = ", ", Optional blSkipBlank As Boolean = True)
      Dim lPos As Long, sResult As String
      
      arr = Application.Transpose(arr)
      
      sResult = Join(arr, sDelim)
      
      If blSkipBlank = True Then
          sResult = Replace(sResult, sDelim & sDelim, sDelim)
      
          Do
              sResult = Replace(sResult, sDelim & sDelim, sDelim)
              lPos = InStr(1, sResult, sDelim & sDelim, vbTextCompare)
              If lPos = 0 Then Exit Do
          Loop
      End If
      
      If Right(sResult, Len(sDelim)) = sDelim Then
          TEXTJOIN = Left(sResult, Len(sResult) - Len(sDelim))
      Else
          TEXTJOIN = sResult
      End If
      
      End Function
      

      =TEXTJOIN(A1:A16)

      或者

      =TEXTJOIN(A1:A16,CHAR(10))

      【讨论】:

        猜你喜欢
        • 2022-08-15
        • 2021-05-26
        • 2015-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 1970-01-01
        • 2014-03-05
        相关资源
        最近更新 更多