代码之家  ›  专栏  ›  技术社区  ›  Melko

项目和子项目的自动编号

  •  0
  • Melko  · 技术社区  · 7 年前

    我有一张带有序号(a栏)说明(B栏)和费率(C栏)的表。我已经包括了一个标志字段,在这里我将输入m作为主要项目,输入s作为子项目。我希望Sl.No.字段根据flag字段中的条目自动填充。

    我对从单元格向上搜索以在标志字段中找到m或s的第一个实例感到困惑;随后,提取出现m的相应标志字段A列中的值,并将其递增1。任何帮助都将不胜感激。

    注意:任何行的删除或添加都会导致sl.no.字段根据标志自动更改编号。

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  0
  •   Community CDub    5 年前

    在具有SI编号的第一个单元格(单元格A3)中,输入以下公式:

    =IF(D3="s", INDEX($A:$A, ROW()-1)+0.01, 1+ROUNDDOWN(INDEX($A:$A, ROW()-1), 0))
    

    在A列中向下复制此公式。

    说明:

    其想法是检查同一行D列中的字母。如果是“s”,则从其上方的单元格中取值,并将其加上0.01。如果它不是一个“s”(一个“m”),那么也从它上面的单元格中取该值,但从中删除小数并向其添加1。

    为了避免行删除,对上面单元格的引用不是使用普通的A2相对引用,而是使用 INDEX($A:$A, ROW()-1) . 这将获取当前行号减1,并检索该行中的单元格。

    后续问题

    要在D列既没有“m”也没有“s”时重新启动计数器,请在公式中嵌套另一个IF:

    =IF(D3="s", INDEX($A:$A, ROW()-1)+0.01, IF(D3="m", 1+ROUNDDOWN(INDEX($A:$A, ROW()-1), 0), 0))
    

    当D列没有“m”或“s”时,这将产生值0。要隐藏此值,请将A列的格式设置为 0.00;-0.00;;@ .

        2
  •  0
  •   Variatus    7 年前

    我为你的A列推荐这个公式

    =(1/IF(LEN($D11),1,100))+SUM(INDIRECT(ADDRESS(ROW()-1,COLUMN())))
    

    这是B列的公式

    =IF(LEN($D11),"","Sub-" & ROUND(MOD($A11*100,100),0) &" of ") & "Item " & INT($A11)
    

    请在第11行输入公式,并根据需要上下复制。请注意,无需在D列中标记子项。公式查找长度大于0的任何条目。您可以使用“m”或其他任何字符。如果你不想那么灵活,改变一下 LEN($D11) $D11="m" 在任何一个公式或两者中。

    设置列A的格式 0.00 . 您可以使用基于$B11长度的条件格式将主要项目涂成红色。如果小于10,则应为红色。