【问题标题】:Dynamic Named range for another worksheet另一个工作表的动态命名范围
【发布时间】:2019-03-10 11:21:07
【问题描述】:

我有这个动态命名范围:

= OFFSET('Sheet1'!$H$1, 0, 0, COUNTA('Sheet1'!$H$1:$H$100)-COUNTIF('Sheet1'!$H$1,0))

它仅适用于 Sheet1。

如何修改此公式,使其适用于所有工作表? (大约有 20 个不同的工作表被命名为“2010”、“2011”等)。

编辑:

  • 所有工作表的结构都相同
  • 此动态命名范围将用于更新图表
  • 有没有办法使用 INDIRECT?

【问题讨论】:

  • 这是为了将 H1 向下扩展到 H 列中的最后一个数字吗?
  • 是的,在每张表中,列中的先前数据发生变化,并且还创建了一个额外的数据点

标签: excel dynamic excel-formula named-ranges


【解决方案1】:

您需要具有工作表范围而不是工作簿范围的同名命名范围。

我已将您的命名范围定义修改为以下内容。

=Sheet1!$H$1:INDEX(Sheet1!$H:$H, MATCH(1E+99, Sheet1!$H:$H))

此 VBA 将为循环中的所有工作表创建名为范围的工作表范围。

Sub createNames()
    Dim wsn As Long, f As String

    For wsn = 2010 To 2019
        On Error GoTo next_wsn
        With Worksheets(CStr(wsn))
            On Error Resume Next
            .Names("Hnumbers").Delete
            On Error GoTo 0
            f = Replace("=Sheet!R1C8:INDEX(Sheet!C8, MATCH(1E+99, Sheet!C8))", "Sheet", Format(wsn, "'0'"))
            .Names.Add Name:="Hnumbers", RefersToR1C1:=f
        End With
next_wsn:
    Next wsn
End Sub

【讨论】:

  • 在此列 H 中,我有一个公式,如果它旁边的列中没有值,则返回“0”。您的命名范围定义是否涵盖了这一点?
  • 不,零被认为是一个数字。这就是我之前在上面的 cmets 中问过的原因。您将不得不将公式恢复为您使用的偏移量/计数/计数。这里的重要问题是工作表范围名称;这个公式是事后才想到的。
  • @heyitsme 如果解决了您的问题,请将其标记为答案!
【解决方案2】:

如果所有工作表的结构都与 sheet1 类似,则只需将公式中的“Sheet1”值更改为工作表名称即可。例如,对于 2010 年的工作表,它将是:

= OFFSET('2010'!$H$1, 0, 0, COUNTA('2010'!$H$1:$H$100)-COUNTIF('2010'!$H$1,0))

更好的是,您实际上可以删除公式中的工作表名称并将其复制到所有工作表(不要复制单元格本身;复制公式文本并在单击单元格后将其粘贴到公式栏上) :

= OFFSET($H$1, 0, 0, COUNTA($H$1:$H$100)-COUNTIF(!$H$1,0))

【讨论】:

  • 如何将其链接到图表?每张表都有图表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多