【问题标题】:How to get the address of a range with multiple subranges, including the sheet name in EACH subrange?如何获取具有多个子范围的范围的地址,包括每个子范围中的工作表名称?
【发布时间】:2014-10-30 15:50:47
【问题描述】:

使用 union 语句,我创建了一个包含多个子范围的范围,Worksheet("data")。我需要该范围以在另一个工作表Worksheet("weekly") 上进行计算。因此,我想要范围的地址,包括每个子范围中的工作表名称。 rRng 是我现有的几个子范围的范围。

rRng.Address(External:=True) returns: "data!$D$1570:$D$1575,$D$2992:$D$3000,$D$5979:$D$5988"

但是,要计算此范围内单元格的平均值,我需要:"data!$D$1570:$D$1575,data!$D$2992:$D$3000,data!$D$5979:$D$5988"

目前我找到的唯一解决方案是:

Dim range_string As String
range_string = ""

Dim SubRange As range
For Each SubRange In rRng
    range_string = range_string & SubRange.Address(External:=True) & ","
Next SubRange
range_string = Left(range_string, (Len(range_string) - 1))

Worksheets("weekly").range("$C2").Formula = "=AVERAGE(" & range_string & ")"

一定有更简单的方法。有什么建议吗?

亲切的问候, 桑德拉

【问题讨论】:

  • 嗨,桑德拉。在使用Union 语句从多个子范围创建rRng 时构建字符串可能比之后尝试创建它更容易。你能发布代码来显示rRng是如何创建的吗?

标签: excel vba


【解决方案1】:

这些子范围中的每一个都称为一个区域。您可以遍历范围的区域并构建字符串。这是一个例子。

Sub test()

    Dim rng As Range
    Dim rArea As Range
    Dim sForm As String

    'union the ranges
    Set rng = Sheet1.Range("D1570:d1575")
    Set rng = Union(rng, Sheet1.Range("D2992:d3000"))

    'loop through the areas and build the string
    For Each rArea In rng.Areas
        sForm = sForm & rArea.Address(, , , True) & ","
    Next rArea

    'remove the last comma
    sForm = Left$(sForm, Len(sForm) - 1)

    'insert the formula
    Sheet2.Range("A1").Formula = "=AVERAGE(" & sForm & ")"

    Debug.Print Sheet2.Range("A1").Formula

End Sub

debug.print 产生:

=AVERAGE(data!$D$1570:$D$1575,data!$D$2992:$D$3000)

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2019-07-18
    • 2022-06-28
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多