复制多个范围并在Excel中连接它们

时间:2011-12-21 12:37:02

标签: excel vba excel-vba concatenation

我的Excel工作表有多个使用范围。我想复制每个范围值并连接它们。我做的是

Set tempRange = Union(SrcWkb.Worksheets("mysheet").Range("F1:H1"), SrcWkb.Worksheets("mysheet").Range("I1:J1"), SrcWkb.Worksheets("NWP").Range("K1:L1"))

For Each eachRange In tempRange
  tempString = tempString & eachRange & "/"
  MsgBox tempString
Next eachRange

我想复制合并单元格F1:H1中的值并连接“/”和I1:J1(也合并)和K1到L1的值。但是,Excel会抛出“下标超出范围”错误。我怎么能做到这一点?

screenshot

2 个答案:

答案 0 :(得分:2)

从您的原始帖子中不太清楚您需要什么输出。这是一个可以帮助您入门的选项:

Sub ConcatRanges()
    Dim rangeOne As Range, rangeTwo As Range, rangeAll As Range, cl As Range, str As String

    Set rangeOne = Worksheets("mysheet").Range("I27:K27")
    Set rangeTwo = Worksheets("mysheet").Range("L27:N27")
    Set rangeAll = Union(rangeOne, rangeTwo)

    For Each cl In rangeAll
        str = str & cl & " / "
    Next cl

    Debug.Print str //Output: 1 / 2 / 3 / 4 / 5 / 6 /
End Sub

更新帖子

处理合并范围可能很棘手。例如,合并范围F1:H1的值为36M。要访问该值,您必须引用合并范围中的第一个单元格。例如:

Sub MergedRangeDemo()
    Dim rng As Range, cl As Range
    Set rng = ActiveSheet.Range("F1:H1")

    For Each cl In rng
        Debug.Print cl.Value, cl.Address
    Next cl

    //Output: 36M    $F$1  <-- Only first cell contains the value
    //               $G$1
    //               $H$1
End Sub

鉴于此,您可以使用范围的rowindex (1)连接值:

Sub ConcatRangesUpdated()
    Dim rangeOne As Range, rangeTwo As Range, rangeThree As Range, str As String

    Set rangeOne = ActiveSheet.Range("F1:H1")
    Set rangeTwo = ActiveSheet.Range("I1:J1")
    Set rangeThree = ActiveSheet.Range("K1:L1")

    str = rangeOne(1) & " / " & rangeTwo(1) & " / " & rangeThree(1)

    Debug.Print str 'Output: 36M / 40M / 36M
End Sub

答案 1 :(得分:1)

看起来您希望在I27和L27之间使用正斜杠连接并将结果放在不同的工作表上。这个例子就是这样:连接I27&amp; L27,J27&amp; M27,K27&amp; N27并将结果放在目标表单上的单元格A27:C27中。请注意,公式使用R1C1表示法和相对列位置;根据需要进行调整。

Sub ConcatCells()
Dim sSource As String
sSource = "'" & SrcWkb.Worksheets("mysheet").Name & "'!"
DstWks1.Range("A27:C27").FormulaR1C1 = "=" & sSource & "RC[8] & " _
    & Chr$(34) & "/" & Chr$(34) & " & " & sSource & "RC[11]"
End Sub