2011-08-05 113 views
0

问题:在Excel中创建计数器细胞和静态细胞

  • 我有一个计数器单元格:A1与=COUNTIF(B:B;"FOO")
    • 这给了我“FOO的所有实例的当前“计数”的值“在列B
  • 我有下式的值小区C1:=IF(B1="FOO";"FOO_" & A1;)
    • 这使我FOO_1的结果,如果‘foo’的只在列B中存在一次

问题:

  • 我希望能够在我写出来的内容C1的小区中的时间参考A1的值。当A1更新时,我不希望C1被修改。 C2现在应该采取A1的更新(其现在是2)和C2将是:FOO_2例如:

A1 = 1 B1 = FOO C1 = FOO_1

A1 = 2 B2 = FOO C2 = FOO_2

C1仍然FOO_1基于A1的值之前一个新的行被添加到B列

寻找一种自动化的方式来创建一个ID,就像在MySQL的增量值,而不是寻找一个涉及人的复制/粘贴的解决方案..

+0

调用此嗯......选择,'Copy' - '粘贴(值)'? – GSerg

+0

寻找一个自动化的解决方案,这样当添加新行时,不需要复制/粘贴就可以自动完成 – sdolgy

回答

2

您的方法存在的问题是,A1将始终更改为反映COUNT,您不能使用WAS值。还有什么要进入列A中的其余单元格,您不能像@JMax所示那样使用相邻行中的计数?

如果你必须增加固定计数,我会建议你想一个简单的宏,你想要的任何一个细胞的变化事件。例如,每次输入“FOO”或“BAR”或任何其他数据时,它会对B:B中的范围进行COUNTIF,并将输入它的结果连接在相邻的C中。根本没有理由依赖于A1,可能会改变。

这个例子可能会让你开始。 Countif可以使用';'为您的Excel版本 它假定您正在进行数据输入,然后移动到下一个单元格。它还会检查您是否已在C中的相邻单元格中输入条目,以便在重新访问单元格时不会更改计数。

这意味着它将在该相邻单元格中出现错误,除非在进行更改之前先删除C中的值。当然,如果你有4个FOO,然后删除一个,你仍然有FOO_4,它不会改变,所以如果你将第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 
+0

这是b。。感谢这一点。 – sdolgy

+0

很高兴帮助,只需小心使用它的注意事项。 – datatoo

0

如果你想坚持一个公式解决方案,可以通过更换A1公式:

=COUNTIF($B$1:B1;"FOO") 

当你拖放你的公式时,这可以做到这一点。

+0

然后,每次用“FOO”添加新行时,这会更改A1的值。列C到FOO_2中的所有内容(如果只有2行是FOO),而不是:FOO_1,FOO_2 – sdolgy

+0

不,它不会。如果您添加一行,则“A1”不会改变(因为新行不在$ B $ 1:B1范围内)。试试。 – JMax