项目和子项目的自动编号

时间:2017-12-16 09:53:45

标签: excel excel-vba basic vba

我有一张Sl表。编号(编号A)说明(编号B)和编号(编号C)。我已经包含了一个“标志”字段,我将在主项目中输入“m”,为子项输入“s”。我想要Sl。根据标志字段中的条目自动填充的编号字段。

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

注意:删除或添加任何行都应该导致sl。没有。字段根据标志自动更改数字。

enter image description here

2 个答案:

答案 0 :(得分:0)

在具有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。要隐藏此值,请使用0.00;-0.00;;@格式化A列。

答案 1 :(得分:0)

我建议你的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,则应为红色。