Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 合并两个不同范围VBA时出错_Excel_Vba_Range - Fatal编程技术网

Excel 合并两个不同范围VBA时出错

Excel 合并两个不同范围VBA时出错,excel,vba,range,Excel,Vba,Range,我在通过VBA合并一些动态范围时遇到了一个问题。 一旦它是标准范围,比如范围(“A3:E4”),一切都很好,我有两行范围值 屏幕从添加手表 但一旦我想要合并不同的范围,比如范围(“A3:E3,A4:E4”),我只接收第一个范围的值。谁知道如何修复它,以及如何在VBA中正确合并不同的范围,以便以后使用它们的值? 提前感谢每个区域都有一个名为区域的属性,其中包含单元格的子表 考虑下面的代码 Dim r As Range Set r = Union(Range("F2:F6&quo

我在通过VBA合并一些动态范围时遇到了一个问题。 一旦它是标准范围,比如范围(“A3:E4”),一切都很好,我有两行范围值

屏幕从添加手表

但一旦我想要合并不同的范围,比如范围(“A3:E3,A4:E4”),我只接收第一个范围的值。谁知道如何修复它,以及如何在VBA中正确合并不同的范围,以便以后使用它们的值?
提前感谢

每个
区域
都有一个名为
区域
的属性,其中包含单元格的子表

考虑下面的代码

Dim r As Range    
Set r = Union(Range("F2:F6"), Range("H2:H6"))    
Dim a As Range
For Each a In r.Areas
    Debug.Print a.Address
Next
打印出来的

$F$2:$F$6
$H$2:$H$6
因此,每个区域将用于定义自己的值数组

Dim a_vals as Variant, b_vals as Variant
a_vals = r.Areas(1).Value2
b_vals = r.Areas(2).Value2

我不是处理数组的专家,但这两种方法帮助我处理范围并将它们合并到由字符分隔的一维数组中

方法1:定义单独的范围并将其内容合并到1D数组中

Public Sub MergeTwoRangesIntoArray()
    
    ' Get range 1 values into 1d array
    Dim range1Values As Variant
    range1Values = WorksheetFunction.Transpose(Application.Index(Range("A1:A10"), 0, 1))

    ' Get range 2 values into 1d array
    Dim range2Values As Variant
    range2Values = WorksheetFunction.Transpose(Application.Index(Range("B1:B10"), 0, 1))
    
    ' Define and redimension an array to hold the concatenated area and category values
    Dim mergedRangeValues() As Variant
    ReDim mergedRangeValues(1 To UBound(range1Values))
    
    ' Concatenate the area and category values and store them in an array
    Dim counter As Long
    For counter = 1 To UBound(range1Values)
        mergedRangeValues(counter) = range1Values(counter) & "|" & range2Values(counter)
    Next counter
    
    Stop
    
End Sub
Public Sub MergeTwoAreasIntoArray()

    Dim multiRange As Range
    Set multiRange = Range("A1:A10,B1:B10,C1:C11")
    
    Dim totalAreas As Long
    totalAreas = multiRange.Areas.Count
    
    Dim rangeValues() As Variant
    ReDim rangeValues(1 To totalAreas)
    
    Dim areaCounter As Long
    For areaCounter = 1 To totalAreas
    
        ' Get range 1 values into 1d array
        rangeValues(areaCounter) = WorksheetFunction.Transpose(Application.Index(multiRange.Areas(areaCounter), 0, 1))
    
    Next areaCounter
    
    ' Get the upper bound of the range values (first range)
    Dim totalRangeValues As Long
    totalRangeValues = UBound(rangeValues(1))
    
    Dim resultArray As Variant
    ReDim resultArray(1 To totalRangeValues)

    Dim itemCounter As Long
    For itemCounter = 1 To totalRangeValues
    
        Dim rangeCounter As Long
        For rangeCounter = 1 To totalAreas
        
            resultArray(itemCounter) = resultArray(itemCounter) & "|" & rangeValues(rangeCounter)(itemCounter)
        Next rangeCounter
    
    Next itemCounter
    
End Sub
方法2:定义多区域范围并将每个区域的内容合并到1D数组中

Public Sub MergeTwoRangesIntoArray()
    
    ' Get range 1 values into 1d array
    Dim range1Values As Variant
    range1Values = WorksheetFunction.Transpose(Application.Index(Range("A1:A10"), 0, 1))

    ' Get range 2 values into 1d array
    Dim range2Values As Variant
    range2Values = WorksheetFunction.Transpose(Application.Index(Range("B1:B10"), 0, 1))
    
    ' Define and redimension an array to hold the concatenated area and category values
    Dim mergedRangeValues() As Variant
    ReDim mergedRangeValues(1 To UBound(range1Values))
    
    ' Concatenate the area and category values and store them in an array
    Dim counter As Long
    For counter = 1 To UBound(range1Values)
        mergedRangeValues(counter) = range1Values(counter) & "|" & range2Values(counter)
    Next counter
    
    Stop
    
End Sub
Public Sub MergeTwoAreasIntoArray()

    Dim multiRange As Range
    Set multiRange = Range("A1:A10,B1:B10,C1:C11")
    
    Dim totalAreas As Long
    totalAreas = multiRange.Areas.Count
    
    Dim rangeValues() As Variant
    ReDim rangeValues(1 To totalAreas)
    
    Dim areaCounter As Long
    For areaCounter = 1 To totalAreas
    
        ' Get range 1 values into 1d array
        rangeValues(areaCounter) = WorksheetFunction.Transpose(Application.Index(multiRange.Areas(areaCounter), 0, 1))
    
    Next areaCounter
    
    ' Get the upper bound of the range values (first range)
    Dim totalRangeValues As Long
    totalRangeValues = UBound(rangeValues(1))
    
    Dim resultArray As Variant
    ReDim resultArray(1 To totalRangeValues)

    Dim itemCounter As Long
    For itemCounter = 1 To totalRangeValues
    
        Dim rangeCounter As Long
        For rangeCounter = 1 To totalAreas
        
            resultArray(itemCounter) = resultArray(itemCounter) & "|" & rangeValues(rangeCounter)(itemCounter)
        Next rangeCounter
    
    Next itemCounter
    
End Sub