将动态范围合并为一个范围Excel或VBA

时间:2014-07-16 20:38:31

标签: excel vba excel-vba merge range

我目前正在尝试将两个范围合并为一个范围。我的范围是动态的,因为它们根据日期而变化。例如,假设我要组合的两个范围是A3:A10,另一个是C7:C12。每天刷新并将索引移动1 ...所以新范围是A4:A11和C8:C13。我想将两者合并为一个不同的列。我假设这必须在vba中实现...但是,我的运气很少。我有值表明我想在工作表中创建范围的行号。我试过制作VBA宏,但我一直没有运气。我一直得到9(我想要的范围的第一项)作为我的结果而不是范围,但我想使用该函数来打印整个组合范围。我也考虑过使用Sub,但我在使用Sub方面经验不足。

这是我到目前为止所做的...请告诉我任何建议或提示。

Function FiveYTwoY()
 Worksheets("India Data").Activate
 index5_90 = Cells(10, 2).Value '5Y 90 day index
 index5_yes = Cells(9, 2).Value '5Y yesterday index
 index2_90 = Cells(7, 2).Value  '2Y 90 day index
 index2_yes = Cells(6, 2).Value '2Y yesterday index
 Dim range5 As Range
 Set range5 = Range(Cells(index5_90, 20), Cells(index5_yes, 20))

 Dim range2 As Range
 Set range2 = Range(Cells(index2_90, 17), Cells(index2_yes, 17))
 FiveYTwoY = Union(range2, range5)

End Function

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您应该避免使用.Select/Activate。您可能希望看到THIS。完全限定您的对象。

此外,您必须使用Set分配范围,如下所示

Sub Sample()
    Dim range5 As Range, range2 As Range, FiveYTwoY As Range

    With Worksheets("India Data")
        index5_90 = .Cells(10, 2).Value '5Y 90 day index
        index5_yes = .Cells(9, 2).Value '5Y yesterday index
        index2_90 = .Cells(7, 2).Value  '2Y 90 day index
        index2_yes = .Cells(6, 2).Value '2Y yesterday index

        Set range5 = .Range(.Cells(index5_90, 20), .Cells(index5_yes, 20))
        Set range2 = .Range(.Cells(index2_90, 17), .Cells(index2_yes, 17))

        Set FiveYTwoY = Union(range2, range5)

        With FiveYTwoY
            '
            '~~> Do whatever you want with that range here
            '
        End With
    End With
End Sub