【问题标题】:Join function not working for horizontal ranges?加入功能不适用于水平范围?
【发布时间】:2015-07-01 18:22:59
【问题描述】:

我想使用 Join 函数将范围转换为带有自定义分隔符的字符串,虽然这适用于垂直范围,但我无法对水平范围执行此操作。这适用于列/垂直范围:

Join(Application.Transpose(Workbooks("Book3").Sheets(1).Range("A1:A5").value), ";")

现在,当我在水平范围内尝试相同操作时,我收到错误“无效的过程调用或参数”

Join(Application.Transpose(Workbooks("Book3").Sheets(1).Range("A1:D1").value), ";")
Join(Workbooks("Book3").Sheets(1).Range("A1:D1").value, ";")

如何做到这一点?

【问题讨论】:

    标签: excel vba delimiter


    【解决方案1】:
    Join(Application.Transpose(Application.Transpose( _
          Workbooks("Book3").Sheets(1).Range("A1:D1").value)), ";")
    

    【讨论】:

      【解决方案2】:

      只要你不遇到可以转置的单元格数量限制,你可以试试这样的函数:

      Function JoinRange(rg As Range, Optional Delim As String = " ")
      Dim V As Variant
      
      V = rg
      If UBound(V, 1) = 1 Then 'One Row
          JoinRange = Join(WorksheetFunction.Index(V, 1, 0), Delim)
      Else
          JoinRange = Join(WorksheetFunction.Transpose(V), Delim)
      End If
      End Function
      

      【讨论】:

      • 这是一个很好的答案,但我建议使用 ElseIf 检查是否存在单列: ElseIf (UBound(arr, 2)) = 1 Then
      • @Jane 我来回考虑是否测试多行/多列。如所写,如果有多个列或行,它将返回#VALUE! 错误。我不知道这是否足以满足 OP 的目的,但它很容易改变。
      猜你喜欢
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2020-11-27
      • 2015-11-27
      • 2021-02-03
      • 2022-01-04
      相关资源
      最近更新 更多