在excel中创build一个计数器单元格和静态单元格
问题:
- 我有一个计数器单元格:A1的值为
=COUNTIF(B:B;"FOO")
- 这给了我B列中所有“FOO”实例的当前“计数”。
- 我有一个公式为:
=IF(B1="FOO";"FOO_" & A1;)
的值单元格C1- 如果“FOO”只在列B中存在一次,这给了我FOO_1的结果
题:
- 当我把内容写到C1的单元格时,我想能够引用A1的值。 当A1更新时,我不希望C1被修改。 C2现在应该更新A1(现在是2),C2将是:
FOO_2
例如:
A1 = 1 B1 = F00 C1 = FOO_1
A1 = 2 B2 = FOO C2 = FOO_2
在新列添加到列B之前,C1依然保留FOO_1的值
寻找一种自动的方式来创build一个ID,就像在MySQL中的增量值,而不是寻找一个涉及到一个人复制/粘贴的解决scheme。
你的方法的问题是,A1总是会改变,以反映COUNT,你不能使用WAS的值。 还有什么进入到列A中的其余单元格,你不能使用相邻行中的计数作为@JMaxbuild议?
如果你必须增加固定的计数,我会build议你想一个简单的macros,你想要的任何一个细胞的变化事件。 例如,每当你input“FOO”或“BAR”或任何其他的东西时,它会在B:B中做一个COUNTIF的范围,并把结果input到相邻的C中。没有理由依赖于A1,改变。
这个例子可能会让你开始。 Countif可以使用';' 为您的Excel版本它假定您正在进行数据input,然后移动到下一个单元格。 它还检查你是否已经在C中的相邻单元格中input了一个条目,所以如果你重新访问一个单元格,它不会改变计数。
这意味着在相邻的单元格中将会出错,除非在进行更改之前先删除C中的值。 当然,如果你有4个FOO,然后删除一个,你仍然有FOO_4,它不会改变,所以如果你把第四个FOO改成BAR,先删除FOO_4。 如果增量HAS匹配其他原因的实际计数,我不会依靠这个。
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
如果你想坚持一个公式的解决scheme,你可以通过以下方式replaceA1公式:
=COUNTIF($B$1:B1;"FOO")
当你拖放你的公式的时候,这将会起到诀窍的作用。