跳过某些单元格时的增量编号
Incremental Numbering while skipping over certain cells
我正在尝试在 Excel 中进行增量编号,但要针对特定条件。如果条件不匹配,那么它应该保留现有的单元格详细信息。
图片:
正如您从图片中看到的,我想在 B 列中创建一个编号列表,它基于 D 列中相应行中显示的信息。所以在第二行,我将开始计数为“1”,然后仅随着 "is_null" 和 "equal" 的计数增长而继续扩展。同时,我希望它跳过绿色和蓝色单元格并保持内容不变。
截至目前,我已经完成了以下公式:
=COUNTIF($D:D2,"is_null")+COUNTIF($D:D2,"equals")
这会进行正确的编号,但是它 over-writes 绿色和蓝色单元格,而不是将它们分别保持为 "A" 和 "stop"。
如果有人能帮我解决这个问题,那我就可以走了。谢谢!
如果在 D 列中找到字符串 "set_path" 或 "stop",我不确定该值应该是什么,但如果它们始终相同(即 "a" 如果Column D = "set_path" and "stop" if Column D = "stop"), 你可以用下面的公式得到你想要的结果:
=IF(AND(D2<>"set_path",D2<>"stop"),COUNTIF($D:D2,"is_null")+COUNTIF($D:D2,"equals"),IF(D2="set_path","a",IF(D2="stop","stop","")))
更新:
使用 VBA 您可以保留单元格的内容,而不用使用以下代码的公式覆盖它们:
Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
'declare and set the worksheet you are working with, amend as required.
Dim LastRow As Long, i As Long
LastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
'get the last row with data on Column D
For i = 2 To LastRow
If ws.Cells(i, "B").Value = "" Then 'if cell is empty add formula
ws.Cells(i, "B").FormulaR1C1 = "=COUNTIF(R1C4:RC[2],""is_null"")+COUNTIF(R1C4:RC[2],""equals"")"
End If
Next i
End Sub
第二次更新:
我现在修改了公式,如果在 D 列中找到 "set_path",则字母递增 1(请记住,这将从 A-Z 开始,然后它将开始按照ASCII table,所以如果你想要其他行为,你可能需要修改它):
=IF(AND(D2<>"set_path",D2<>"stop"),COUNTIF($D:D2,"is_null")+COUNTIF($D:D2,"equals"),IF(D2="set_path",IFERROR(CHAR(COUNTIF($D:D2,"set_path")+64),""),IF(D2="stop","stop","")))
我正在尝试在 Excel 中进行增量编号,但要针对特定条件。如果条件不匹配,那么它应该保留现有的单元格详细信息。
图片:
正如您从图片中看到的,我想在 B 列中创建一个编号列表,它基于 D 列中相应行中显示的信息。所以在第二行,我将开始计数为“1”,然后仅随着 "is_null" 和 "equal" 的计数增长而继续扩展。同时,我希望它跳过绿色和蓝色单元格并保持内容不变。
截至目前,我已经完成了以下公式:
=COUNTIF($D:D2,"is_null")+COUNTIF($D:D2,"equals")
这会进行正确的编号,但是它 over-writes 绿色和蓝色单元格,而不是将它们分别保持为 "A" 和 "stop"。
如果有人能帮我解决这个问题,那我就可以走了。谢谢!
如果在 D 列中找到字符串 "set_path" 或 "stop",我不确定该值应该是什么,但如果它们始终相同(即 "a" 如果Column D = "set_path" and "stop" if Column D = "stop"), 你可以用下面的公式得到你想要的结果:
=IF(AND(D2<>"set_path",D2<>"stop"),COUNTIF($D:D2,"is_null")+COUNTIF($D:D2,"equals"),IF(D2="set_path","a",IF(D2="stop","stop","")))
更新:
使用 VBA 您可以保留单元格的内容,而不用使用以下代码的公式覆盖它们:
Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
'declare and set the worksheet you are working with, amend as required.
Dim LastRow As Long, i As Long
LastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
'get the last row with data on Column D
For i = 2 To LastRow
If ws.Cells(i, "B").Value = "" Then 'if cell is empty add formula
ws.Cells(i, "B").FormulaR1C1 = "=COUNTIF(R1C4:RC[2],""is_null"")+COUNTIF(R1C4:RC[2],""equals"")"
End If
Next i
End Sub
第二次更新:
我现在修改了公式,如果在 D 列中找到 "set_path",则字母递增 1(请记住,这将从 A-Z 开始,然后它将开始按照ASCII table,所以如果你想要其他行为,你可能需要修改它):
=IF(AND(D2<>"set_path",D2<>"stop"),COUNTIF($D:D2,"is_null")+COUNTIF($D:D2,"equals"),IF(D2="set_path",IFERROR(CHAR(COUNTIF($D:D2,"set_path")+64),""),IF(D2="stop","stop","")))