Excel范围参考

时间:2014-06-25 16:29:23

标签: excel vba excel-vba range

让我先说这个问题,说我不是超级技术,所以我的措辞可能看起来很模糊......

在sheet1上我有三个单独的水平范围的单元格(3个单独的一系列步骤):

  • A1:D1
  • A2:C2
  • A3:E3

在第二张表格中,我想链接以创建指向这些范围的实时链接,这样如果我更改了sheet1上的信息,它将自动反映在sheet2中。

问题是,在sheet2上,我希望范围在一行中彼此列出,以创建一系列长的步骤。

Range1 - > Range2 - > Range3(全部在一行上)

如果我在sheet1上添加一个额外的步骤,比如在Sheet2上添加一个额外的步骤,那么将添加新的单元格并将以下单元格全部推送到右边一个单元格?

1 个答案:

答案 0 :(得分:0)

要适应可能增长的范围,请从第一个单元格开始,然后使用End(xlToRight)查找最后一个占用的单元格。找到所有范围范围后,可以将它们与数组UDF结合使用:

Function ConcatRanges(ParamArray ranges()) As Variant()
    Application.Volatile
    Dim ret() As Variant
    ReDim ret(1 To 1, 1 To (Application.Caller.Columns.Count))
    Dim RetIdx&, i&, cell As Range
    RetIdx = 1
    For i = 0 To UBound(ranges)
        For Each cell in Application.Range(ranges(i), ranges(i).End(xlToRight))
            ret(1, RetIdx) = cell.Value
            RetIdx = RetIdx + 1
        Next
    Next
    For RetIdx = RetIdx To UBound(ret, 2)
        ret(1, RetIdx) = vbNullString
    Next
    ConcatRanges = ret
End Function

对于您的示例,您可以这样称呼它:

=ConcatRanges(Sheet1!A1, Sheet1!A2, Sheet1!A3)