在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") 

当你拖放你的公式的时候,这将会起到诀窍的作用。