问题:
=COUNTIF(B:B;"FOO")
如果"FOO“在列B中只存在一次,则
=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中的增量值,而不是寻找涉及到人复制/粘贴..的解决方案。
发布于 2011-08-05 13:53:21
您的方法的问题是,A1总是会更改以反映计数,您不能使用以前的值。在A列的其余单元格中,还有什么不能像@JMax建议的那样在相邻行中使用计数?
如果必须使用固定计数进行增量,我建议您在任何单元格的更改事件上考虑一个简单的宏。例如,每次输入"FOO“或"BAR”或任何东西时,它都会执行B:B中范围的COUNTIF,并将结果连接到相邻的C中。
这个例子可能会让你开始。对于您的Excel版本,Countif可能使用“;”,它假定您正在进行数据输入,然后向下移动到下一个单元格。它还检查您是否已经在C中的相邻单元格中输入了条目,因此如果您重新访问一个单元格,它不会更改计数。
这意味着它在相邻的单元格中是错误的,除非您在进行更改之前先删除C中的值。当然,如果您有4个FOO,然后删除一个,您仍然拥有FOO_4,并且它不会更改,所以如果您将第4foo更改为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发布于 2011-08-05 11:19:54
如果要坚持使用公式解决方案,可以通过以下方式替换A1公式:
=COUNTIF($B$1:B1;"FOO")当你拖放你的公式的时候,这就很管用了。
https://stackoverflow.com/questions/6954503
复制相似问题