Excel命名范围使增加标题和子标题
我正在创build一个电子表格应用程序,这将需要用户填写input表的不同部分。 为了将这些部分分解为逻辑方式,我使用了如下所示的标题和子标题:
如果我有很多头文件,那么编号头文件将会有大量的手动工作。 我已经做了一些尝试,通过创build一个名为range的Header1
实现这个过程的自动化,这相当于下面图片中的灰色标题。 所以在A2
和A11
单元格中,公式是=Header1
。 Header1
命名范围中的公式是:
IF(COUNTA(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))))=0,0,INDEX(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))),MATCH(ROW(INDIRECT(ADDRESS(ROW()-1,COLUMN()))),INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))),TRUE)))+1
基本上公式计算列A中的所有值,并加1。 换句话说,无论您在什么工作表(因此使用INDIRECT
),每次在您的单元中调用Header1
都会很好地增加。 硬编码的唯一的一个是起始单元格是A1
,我把它放在一个0,所以它检测到从1开始。
我的问题是 – 以类似的方式,我已经实现了使用命名范围递增标题,我怎样才能做到这一点的子标题? 我上面的图片显示了我试图实现的效果(即2.1
),但是我希望这是自动的,只需在单元格中input=Header2
的公式即可。
编辑 – 我已经得到了这个公式:
=SUM(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()-1)))) & "." & MAX(1,COUNTA(INDEX(INDIRECT(CONCATENATE("$B$1",":",ADDRESS(ROW()-1,COLUMN()))),MATCH(SUM(INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()))))-1,INDIRECT(CONCATENATE("$A$1",":",ADDRESS(ROW()-1,COLUMN()-1))),FALSE)):INDIRECT(ADDRESS(ROW()-1,COLUMN()))))
…当作为公式放置在单元中时工作,但在命名范围内使用时不起作用。 奇!
好主意使用Defined Names
来保存公式。 然而你的公式非常不稳定。
build议在工作簿级别(作用域)创build两个定义的名称,如下所示:
-
使用以下公式命名
_Hdr
(根据需要更改) :=IF( COLUMN() <> 1, "", 1 + MAX( INDEX(!$A:$A, 1 ) : INDEX(!$A:$A, - 1 + ROW() ) ) )
-
按以下公式命名
_Sub
(根据需要更改) :=IF( COLUMN() <> 2, "", 0.01 + IF( MAX( INDEX(!$A:$A, 1 ) : INDEX(!$A:$A, - 1 + ROW() ) ) > MAX( INDEX(!$B:$B, 1 ) : INDEX(!$B:$B, - 1 + ROW() ) ), MAX( INDEX(!$A:$A, 1 ) : INDEX(!$A:$A, - 1 + ROW() ) ), MAX( INDEX(!$B:$B, 1 ) : INDEX(!$B:$B, - 1 + ROW() ) ) ) )
如果子项目小于10则使用0.1
,如果高于小于100则使用0.01
(根据需要调整)
编辑:添加!
到公式中的列范围,以确保引用将自动更新到使用公式的相应Sheet
。
上面的公式被分成几行以方便阅读和理解,在创build名称时作为一行input。
另外build议隐藏Define Names
(即Visible = False
)以避免公式被意外更改。
有了以上的名字:
- 没有必要在第1行input零。
- 公式适用于忽略任何标签的数字。
- 他们首先检查公式是在预期的列中input的(
_Hdr
分别是_Hdr
和_Sub
列1
和2
) 。 - 由于公式使用数字,他们得到每列的
MAX
数量,并加1
或0.1
来产生下一个数字。 - 公式不会变化(不使用
INDIRECT
) 。 - 他们使用
INDEX
函数来生成所需的范围。