2011-08-05 115 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