Note: The other languages of the website are Google-translated. Back to English

如何計算Excel中單元格更改的次數?

要計算 Excel 中指定單元格的更改次數,本文提供的 VBA 代碼可以提供幫助。

計算使用 VBA 代碼更改單元格的次數


計算使用 VBA 代碼更改單元格的次數

以下 VBA 代碼可以幫助您計算指定單元格在 Excel 中更改的次數。

1. 在包含一個或多個需要計算總變化的單元格的工作表中,右鍵單擊工作表選項卡,然後單擊 查看代碼 從上下文菜單中。 看截圖:

2.在開幕 Microsoft Visual Basic for Applications 窗口中,將以下 VBA 代碼之一複制並粘貼到 推薦碼 窗口根據您的需要。

VBA 代碼 1:僅跟踪對一個單元格的更改

Dim xCount As Integer
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xRg As Range, xCell As Range
    On Error Resume Next
    If Target = Range("B9") Then
        xCount = xCount + 1
        Range("C9").Value = xCount                                     
    End If
    Application.EnableEvents = False
    Set xRg = Application.Intersect(Target.Dependents, Me.Range("B9"))
    If Not xRg Is Nothing Then
        xCount = xCount + 1
        Range("C9").Value = xCount
    End If
    Application.EnableEvents = True
End Sub

備註:在代碼中,B9是您需要計數其更改的單元格,而C9是用於填充計數結果的單元格。 請根據需要更改它們。

VBA 代碼 2:跟踪對列中多個單元格的更改

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220916
    Dim xSRg As Range
    Dim xRRg As Range
    
    Set xSRg = Range("B9:B1000")
    Set xCell = Intersect(xSRg, Target)
    If xCell Is Nothing Then Exit Sub
    
    
    Application.EnableEvents = False
    On Error Resume Next
    Set xCell = xCell.Range("A1")
    Set xRRg = xCell.Offset(0, 1)
    
    xRRg.Value = xRRg.Value + 1

    Application.EnableEvents = True
End Sub

備註:在這一行“設置 xRRg = xCell.Offset(0, 1)“, 號碼 1 表示要偏移到起始引用右側的列數(這裡起始引用是 column B,並且您要返回的計數在列中 C 它位於 B 列旁邊)。 如果需要在列中輸出結果 S, 改變號碼 110.

從現在開始,當單元格 B9 或 B9:B1000 範圍內的任何單元格發生變化時,變化的總數將疊加並自動填充到指定的單元格中。


最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (22)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
非常感謝你 ! 這很好用。

但是,例如,如何讓相同的函數/規則適用於整個列的一系列單元格?

我在不同的行上有我的業務聯繫人的列表,他們的聯繫方式在不同的列中,我想要添加一個列來記錄和計算每行給定單元格的更改次數。 您提供的代碼效果很好,但一次只能用於一個單元格!

我是 VBA 新手,非常感謝您的支持。

我嘗試在代碼中添加一系列單元格,因此我沒有使用上面示例中給出的“B9”和“C9”,而是使用了“B:B”、“C:C”或“B9”等變體:B1000" 和 "C9:C1000",沒有任何成功。

提前感謝,
網站主持人對此評論進行了最小化
Hi Jan,
請嘗試以下 VBA 代碼。 希望它可以提供幫助。 謝謝你的評論。

Private Sub Worksheet_Change(ByVal Target As Range)
將 xRg 作為範圍調暗,將 xCell 作為範圍調暗
將 xSRg、xRRg 調暗為範圍
將 xFNum 變暗

設置 xSRg = Range("B9:B1000")
設置 xRRg = Range("C9:C1000")

Application.EnableEvents = False
在錯誤恢復下一頁
對於 xFNum = 1 到 xSRg.count
如果目標 = xSRg.Item(xFNum) 那麼
xRRg.Item(xFNum).Value = xRRg.Item(xFNum).Value + 1
Application.EnableEvents = True
退出小組
如果結束
下一個 xFNum
Application.EnableEvents = True
END SUB
網站主持人對此評論進行了最小化
嗨水晶,

這太棒了,在我的矩陣上,我在其中一列上使用了它,但我很難在多列中復制它。 你有解決方案嗎?

在此先感謝
網站主持人對此評論進行了最小化
你能提供整個代碼集嗎? 我假設 Crystal 的代碼與其他代碼集成? 謝謝
網站主持人對此評論進行了最小化
嗨水晶,

我的代碼有問題。 例如,如果單元格,如果我輸入

B9 為“Apple”,然後它將 C9 增加 1
B10 為“Ball”,然後將 C10 遞增 1
但是,如果我輸入
B11 再次作為“Apple”,然後 C9 將增加 1,而不是 C11

似乎它增加了第一次出現值的行,而不是實際編輯的行。

有沒有辦法只增加同一行中的單元格而不是前一行?

謝謝。
網站主持人對此評論進行了最小化
你有沒有想到這一點。 我也對這個檢查多個單元格感興趣。 還沒試過。
網站主持人對此評論進行了最小化
嗨凱文,

以下代碼可以幫助您解決問題。 謝謝你的評論。
Private Sub Worksheet_Change(ByVal Target As Range)
將 xRg 作為範圍調暗,將 xCell 作為範圍調暗
將 xSRg、xRRg 調暗為範圍
將 xFNum 變暗

設置 xSRg = Range("B9:B1000")
設置 xRRg = Range("C9:C1000")

Application.EnableEvents = False
在錯誤恢復下一頁
對於 xFNum = 1 到 xSRg.count
如果目標 = xSRg.Item(xFNum) 那麼
xRRg.Item(xFNum).Value = xRRg.Item(xFNum).Value + 1
Application.EnableEvents = True
退出小組
如果結束
下一個 xFNum
Application.EnableEvents = True
END SUB
網站主持人對此評論進行了最小化
Gracias de antemano por el aporte, muy útil, sin embargo, quisiera pedir su ayuda a fin de reiniciar el contador a cero cuando sea necesario, es decir, luego de contar las veces que se modificó la celda, quisiera llevarla a cero y volver a康薩爾。 podrás ayudarme。 格拉西亞斯!
網站主持人對此評論進行了最小化
您好所有,

如果我們只跟踪一個單元格的更改,則“使用 VBA 代碼更改單元格的次數”下提供的解決方案很好。 請建議,如果要對多個單元進行跟踪,需要進行哪些修改。 如果有多個單元格,增量計數器應出現在正在跟踪其值變化的單元格旁邊。
網站主持人對此評論進行了最小化
期待獲得特定 VBA 代碼的幫助和幫助,該代碼可以應用於一個工作表中的多個單元格。
網站主持人對此評論進行了最小化
嗨,石菊,
請嘗試以下 VBA 代碼。 感謝您的評論。

Private Sub Worksheet_Change(ByVal Target As Range)
將 xRg 作為範圍調暗,將 xCell 作為範圍調暗
將 xSRg、xRRg 調暗為範圍
將 xFNum 變暗

設置 xSRg = Range("B9:B1000")
設置 xRRg = Range("C9:C1000")

Application.EnableEvents = False
在錯誤恢復下一頁
對於 xFNum = 1 到 xSRg.count
如果目標 = xSRg.Item(xFNum) 那麼
xRRg.Item(xFNum).Value = xRRg.Item(xFNum).Value + 1
Application.EnableEvents = True
退出小組
如果結束
下一個 xFNum
Application.EnableEvents = True
END SUB
網站主持人對此評論進行了最小化
球隊,

當我嘗試使用:

Private Sub Worksheet_Change(ByVal Target As Range)
將 xRg 作為範圍調暗,將 xCell 作為範圍調暗
將 xSRg、xRRg 調暗為範圍
將 xFNum 變暗

設置 xSRg = Range("B9:B1000")
設置 xRRg = Range("C9:C1000")

仔細更改範圍和目標單元格分別相對於 P2:P200 和 X2:X200,儘管我嘗試跨 P2:P200 跨多行更改單元格,但我沒有在 X 列中更改計數。

任何幫助將不勝感激。

問候
JT
網站主持人對此評論進行了最小化
誰能幫我實現計算單元格更改為“重新驗證”的時間的編碼,並且可以將其應用於列的完整性。
網站主持人對此評論進行了最小化
Quisiera que me ayudaran a reiniciar el contador a cero cuando lo requiera, es decir, la celda c9 llevarla a cero y comenzar a contar b9 nuevamente。
網站主持人對此評論進行了最小化
嗨,費利克斯·馬里奧,
請在本文提供的代碼之後添加以下代碼。 當您需要重置單元格時,點擊代碼中的任何單詞,然後按 F5 鍵運行它。
Sub CleaRCount()
'Updated by Extendoffice 20220527
    xCount = 0
    Range("c9") = 0
End Sub
網站主持人對此評論進行了最小化
嗨水晶

我和 RedDragon 有同樣的問題。 我正在嘗試跟踪日期更改,例如,當代理將案例發送給他們的經理時,他們手動輸入日期 - 這可能不止一次在案例中發生,因此我嘗試使用此代碼來顯示每個案例有多少次已發送給經理。 我的問題是:

1) 如果在一天內將多個案例發送給經理,則計數器僅在該日期的第一個實例增加,而不是在相關行旁邊。
2) 每次我退出工作表、重新打開工作表並修改日期時,計數器都會重置為“1”——當重新打開工作表時,如何讓這個結轉而不是重置?

非常感謝任何幫助,非常感謝您到目前為止所做的一切。

加久斯
網站主持人對此評論進行了最小化
嗨,加朱斯,
很抱歉給您帶來不便。 下面的 VBA 代碼可以幫你一個忙。 請試一試。

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220916
    Dim xSRg As Range
    Dim xRRg As Range
    
    Set xSRg = Range("B9:B1000")
    Set xCell = Intersect(xSRg, Target)
    If xCell Is Nothing Then Exit Sub
    
    
    Application.EnableEvents = False
    On Error Resume Next
    Set xCell = xCell.Range("A1")
    Set xRRg = xCell.Offset(0, 1)
    
    xRRg.Value = xRRg.Value + 1

    Application.EnableEvents = True
End Sub
網站主持人對此評論進行了最小化
我嘗試下面的代碼並且它有效,但我使用它來跟踪日期的更改,因為每次我更改與它再次計數的列上的其他日期相同的日期時,某些日期都是相同的。
我嘗試了最新的代碼,但是當我嘗試它時它什麼也沒做。 感謝這個偉大的代碼!

Private Sub Worksheet_Change(ByVal Target As Range)
將 xRg 作為範圍調暗,將 xCell 作為範圍調暗
將 xSRg、xRRg 調暗為範圍
將 xFNum 變暗

設置 xSRg = Range("I3:I1000")
設置 xRRg = Range("S3:S1000")

Application.EnableEvents = False
在錯誤恢復下一頁
對於 xFNum = 1 到 xSRg.Count
如果目標 = xSRg.Item(xFNum) 那麼
xRRg.Item(xFNum).Value = xRRg.Item(xFNum).Value + 1
Application.EnableEvents = True
退出小組
如果結束
下一個 xFNum
Application.EnableEvents = True
END SUB
子清除計數()
'更新者 Extendoffice 20220527
x計數 = 0
範圍(“S3”)= 0
END SUB
網站主持人對此評論進行了最小化
嗨,
下面的 VBA 代碼可以幫你一個忙。 請試一試。
備註:在這一行“設置 xRRg = xCell.Offset(0, 10)“, 號碼 ”10” 表示要偏移到起始引用右側的列數(這裡起始引用是列 I,並且您要返回的計數在列中 S).

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220919
    Dim xSRg As Range
    Dim xRRg As Range
    
    Set xSRg = Range("I3:I1000")
    Set xCell = Intersect(xSRg, Target)
    If xCell Is Nothing Then Exit Sub
    
    
    Application.EnableEvents = False
    On Error Resume Next
    Set xCell = xCell.Range("A1")
    Set xRRg = xCell.Offset(0, 10)
    
    xRRg.Value = xRRg.Value + 1

    Application.EnableEvents = True
End Sub
網站主持人對此評論進行了最小化
謝謝水晶,很好用!
網站主持人對此評論進行了最小化
奧拉水晶,

vi que você tem ajudado o pessoal com có​​digo vba。 será q vc poderia me dar uma ajuda tb?

eu tenho uma coluna B e C onde eu preencho cada uma delas diariamente... o que eu gostaria de saber é quantas vezes eu mudo o campo B2 até mudar o campo C2 e manter esse valor de alterações no campo D2

示例:eu alterei o campo B2 5 vezes seguidas ate alterar o C2

D2 = 5

e quantas vezes eu alterei o campo C2 até voltar a alterar B2
示例:alterei o campo C2 2 vezes seguidas e voltei a alterar o campo B2
E2 = 2

e eu gostaria de manter o valor máximo dessa sequência, só voltando a alterar o campo D2 e E2 se a sequencia de alterações em B2 e C2 fossem maior do que 5 e 2, como no exemplo que eu dei.

espero que tenha ficado claro os examplos。 啊哈……阿布拉索斯
網站主持人對此評論進行了最小化
嗨瓦格納塞薩爾,
以下 VBA 代碼可能會有所幫助。 請試一試。 謝謝你。

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220916
    Dim xSRg As Range
    Dim xRRg As Range
    On Error Resume Next
    
    Set xSRg = Range("B2:B10")
    Set xCell = Intersect(xSRg, Target)
    If Not xCell Is Nothing Then
        Application.EnableEvents = False
        Set xCell = xCell.Range("A1")
        Set xRRg = xCell.Offset(0, 2)
        xRRg.Value = xRRg.Value + 1
        If xRRg.Value > 5 Then
            xRRg.Value = 1
        End If
        Application.EnableEvents = True
    End If
    
    Set xSRg = Range("C2:C10")
    Set xCell = Intersect(xSRg, Target)
    If Not xCell Is Nothing Then
        Application.EnableEvents = False
        Set xCell = xCell.Range("A1")
        Set xRRg = xCell.Offset(0, 2)
        xRRg.Value = xRRg.Value + 1
        If xRRg.Value > 2 Then
            xRRg.Value = 1
        End If
        Application.EnableEvents = True
    End If
        
End Sub
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護