Excel命名范围以生成递增标题和子标题

时间:2015-12-05 23:24:20

标签: excel excel-formula

我正在创建一个电子表格应用程序,要求用户填写输入表的不同部分。要将这些部分分成逻辑方式,我使用标题和子标题,如下所示:

Image of input sheet

如果我有很多标题,那么在对标题进行编号时会有大量的手动工作。我已经尝试通过创建Header1命名范围来自动化该过程,该范围等同于下图中的灰色标题。因此,在A2A11单元格中,公式为=Header1Header1命名范围中的公式为:

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。换句话说,无论您使用哪个工作表(因此使用Header1),每次在单元格中调用INDIRECT时,它都会很好地递增。唯一的硬编码是A1的起始单元格,我在其中放置了0,因此它检测到从1开始。

我的问题是 - 与我使用命名范围实现递增标头的方式类似,如何为子标头执行此操作?我上面的图片显示了我想要达到的效果(即2.12.2)但是我希望通过简单地在单元格中放置=Header2的公式来实现这一点。 / p>

编辑 - 我已经达到了这个公式:

=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()))))

...在单元格中作为公式放置时有效,但在命名范围内使用时无效。奇!

1 个答案:

答案 0 :(得分:2)

使用Defined Names来保存公式的好主意。但是你的公式很不稳定。

建议在工作簿级别(范围)创建两个已定义的名称,如下所示:

  1. 使用以下公式命名为_Hdr (根据需要更改)

    =IF( COLUMN() <> 1, "", 1 
    + MAX( INDEX(!$A:$A, 1 ) : INDEX(!$A:$A, - 1 + ROW() ) ) )
    
  2. 使用以下公式命名为_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() ) ) ) )
    
  3. 如果子项小于10,则使用0.1;如果更高但小于100,则使用0.01(根据需要进行调整)

    编辑: !添加到公式中的列范围,以确保引用会自动更新为相应的{{1}使用公式的地方。

    上面的公式分为几行以方便阅读和理解,然后在创建名称时输入一行。

    还建议隐藏Sheet (即Define Names,以避免公式意外更改。

    使用以上名称:

    • 第1行无需输入零。
    • 公式适用于忽略任何标签的数字。
    • 他们首先检查公式是否在预期列中输入(分别为Visible = False_Hdr_Sub1
    • 由于公式使用数字,因此每列都会得到2个数字,并添加MAX1以生成下一个数字。
    • 公式不是易变的(不使用0.1
    • 他们使用INDIRECT函数生成所需的范围。