Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 另一工作表的动态命名范围_Excel_Dynamic_Excel Formula_Named Ranges - Fatal编程技术网

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

Excel 另一工作表的动态命名范围,excel,dynamic,excel-formula,named-ranges,Excel,Dynamic,Excel Formula,Named Ranges,我有一个动态命名范围: =抵销('Sheet1'!$H$1,0,0,COUNTA('Sheet1'!$H$1:$H$100)-COUNTIF('Sheet1'!$H$1,0)) 它仅适用于表1 如何修改此公式,使其在所有图纸上都有效?(大约有20张不同的表格,分别命名为“2010”、“2011”等) 编辑: 所有工作表的结构都相同 此动态命名范围将用于更新图表 有没有一种方法可以使用间接语言 如果所有图纸的结构与sheet1类似,则只需将公式中的“sheet1”值更改为图纸名称即可。例如,对于

我有一个动态命名范围:

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

它仅适用于表1

如何修改此公式,使其在所有图纸上都有效?(大约有20张不同的表格,分别命名为“2010”、“2011”等)

编辑:

  • 所有工作表的结构都相同
  • 此动态命名范围将用于更新图表
  • 有没有一种方法可以使用间接语言

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

= OFFSET('2010'!$H$1, 0, 0, COUNTA('2010'!$H$1:$H$100)-COUNTIF('2010'!$H$1,0))
更好的是,您实际上可以删除公式中的工作表名称并将其复制到所有工作表中(不要复制单元格本身;复制公式文本并在单击单元格后将其粘贴到公式栏上):


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

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

=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

我如何将此链接到图表?每张表中都有图表,这是为了将H1向下扩展到H列中的最后一个数字吗?是的,在每张表中,列中以前的数据发生了变化,并且在H列中还创建了一个额外的数据点。如果旁边的列中没有值,我有一个返回“0”的公式。您的命名范围定义是否涵盖此范围?不,零被视为一个数字。这就是为什么我在前面的评论中问。如果您使用的是偏移量/counta/countif,则必须将公式还原回偏移量/counta/countif。这里的重要问题是工作表范围名称;这个公式是事后想出来的。@heyitsme如果它解决了您的问题,请将此标记为答案!
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