另一个工作表的动态命名范围

时间:2018-10-05 02:01:02

标签: excel dynamic excel-formula named-ranges

我有这个动态命名范围:

  

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

仅适用于Sheet1。

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

编辑:

  • 所有工作表的结构均相同
  • 此动态命名范围将用于更新图表
  • 是否可以使用INDIRECT?

2 个答案:

答案 0 :(得分:3)

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

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

=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

答案 1 :(得分:0)

如果所有工作表的结构都类似于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))