在excel中创建计数器单元格和静态单元格

时间:2011-08-05 09:54:11

标签: excel

问题:

  • 我有一个计数器单元格:A1的值为=COUNTIF(B:B;"FOO")
    • 这给了我B列中所有“FOO”实例的当前“计数”。
  • 我有一个值单元格C1,公式为:=IF(B1="FOO";"FOO_" & A1;)
    • 如果“FOO”仅在B列中存在一次
    • ,则会给出FOO_1的结果

问题:

  • 我希望能够在将内容写入C1的单元格时引用A1的值。当A1更新时,我不希望修改C1。 C2现在应该更新A1(现在是2),C2将是:FOO_2例如:

A1 = 1 B1 = FOO C1 = FOO_1

A1 = 2 B2 = FOO C2 = FOO_2

在将新行添加到B列之前,C1仍然基于A1的值保持为FOO_1

寻找一种自动创建ID的方法,比如MySQL中的增量值,而不是寻找涉及人员复制/粘贴的解决方案..

2 个答案:

答案 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")

当你拖放你的公式时,这就可以了。

相关问题