问题:
=COUNTIF(B:B;"FOO")
=IF(B1="FOO";"FOO_" & A1;)
问题:
FOO_2
例如:A1 = 1 B1 = FOO C1 = FOO_1
A1 = 2 B2 = FOO C2 = FOO_2
在将新行添加到B列之前,C1仍然基于A1的值保持为FOO_1
寻找一种自动创建ID的方法,比如MySQL中的增量值,而不是寻找涉及人员复制/粘贴的解决方案..
答案 0 :(得分:2)
你的方法存在的问题是,A1总会改变以反映COUNT,你不能使用WAS的值。除了@JMax建议,你不能在相邻行中使用Count的剩余单元格中还有什么呢?
如果你必须使用固定计数增加,我建议你考虑一个简单的宏来处理你想要的任何一个单元格的变化事件。例如,每当你输入“FOO”或“BAR”或任何东西时,它将在B:B中执行范围的COUNTIF并连接在相邻的C中输入它的结果。 没有理由完全依赖A1,而且可能会改变。
这个例子可以帮助你入门。并且Countif可以使用';'为您的Excel版本 它假设您正在进行数据输入,然后向下移动到下一个单元格。它还会检查您是否已在C中的相邻单元格中创建了一个条目,因此如果您重新访问单元格,它不会更改计数。
这意味着相邻单元格中的错误除非您在进行更改之前先删除C中的值。当然如果您有4个FOO然后删除一个,您仍然会有FOO_4并且它不会改变所以如果您将第4个FOO更改为BAR则首先删除FOO_4。如果由于某些其他原因,增量必须与实际数量相匹配,我不会依赖于此。
Sub doIncrement()
If ActiveCell.Column = 2 And ActiveCell.Offset(-1, 1) = "" Then
ActiveCell.Offset(-1, 1) = ActiveCell.Offset(-1, 0) & "_" & WorksheetFunction.CountIf(Range("B:B"), (ActiveCell.Offset(-1, 0)))
Else: Exit Sub 'or do something else
End If
End Sub
然后在
中调用它Private Sub Worksheet_Change(ByVal Target As Range)
Call doIncrement
End Sub
答案 1 :(得分:0)
如果您想坚持使用公式解决方案,可以通过以下方式替换A1公式:
=COUNTIF($B$1:B1;"FOO")
当你拖放你的公式时,这就可以了。