Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 复制多个范围并在Excel中连接它们_Vba_Excel_Concatenation - Fatal编程技术网

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

Vba 复制多个范围并在Excel中连接它们,vba,excel,concatenation,Vba,Excel,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

我的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抛出“下标超出范围”错误。我怎样才能做到这一点


您似乎希望在I27和L27之间加一个正斜杠,并将结果放在不同的工作表上。这个例子就是这样做的:连接I27和L27、J27和M27、K27和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

从您最初的帖子中不太清楚您需要什么输出。这里有一个选项可以帮助您开始:

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

连接它们是什么意思?看起来您正在尝试创建一个将范围1除以范围2的新范围。“下标超出范围”表示没有工作表“mysheet”。tempString不是对象,因此不需要设置。您不能用这种方式拾取范围。是否要将单元I27、J27和K27连接起来?如果是这样,请分别挑选。如果它们被合并,将它们称为I27。解决方案有效,但对于合并的单元格,我得到的结果是36 M///40 M//36 M//,因此它在单元格中循环移动。因此“/”的数量等于单元格的数量:(你能更新你的原始帖子来显示你的数据样本和你希望达到的输出吗?我不清楚你的数据是如何构造的……要清楚的是,你希望输出是:36M/40M/36M。对吗?得到了解决方案:)一个问题做$F$1,$G$1访问范围单元格的每个组件?不太可能。在合并范围内,只有$F$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