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

Làm cách nào để đếm số lần một ô được thay đổi trong Excel?

Để đếm số lần một ô đã chỉ định được thay đổi trong Excel, mã VBA được cung cấp trong bài viết này có thể giúp ích.

Đếm số lần một ô được thay đổi bằng mã VBA


Đếm số lần một ô được thay đổi bằng mã VBA

Các mã VBA sau đây có thể giúp bạn đếm số lần một ô đã chỉ định được thay đổi trong Excel.

1. Trong trang tính có chứa một hoặc nhiều ô mà bạn cần tính tổng thay đổi, hãy bấm chuột phải vào tab trang tính, sau đó bấm Mã Chế độ xem từ menu ngữ cảnh. Xem ảnh chụp màn hình:

2. Trong phần mở đầu Microsoft Visual Basic cho các ứng dụng cửa sổ, sao chép và dán một trong các mã VBA sau vào cửa sổ theo nhu cầu của bạn.

Mã VBA 1: Chỉ theo dõi các thay đổi đối với một ô

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

Chú thích: Trong mã, B9 là ô bạn cần đếm các thay đổi của nó và C9 là ô để điền kết quả đếm. Vui lòng thay đổi chúng khi bạn cần.

Mã VBA 2: Theo dõi các thay đổi đối với nhiều ô trong một cột

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

Chú thích: Trong dòng này "Đặt xRRg = xCell.Offset (0, 1)", con số 1 đại diện cho số cột cần bù đắp ở bên phải của tham chiếu bắt đầu (ở đây tham chiếu bắt đầu là cột Bvà số lượng bạn muốn trả lại nằm trong cột C nằm bên cạnh cột B). Nếu bạn cần xuất kết quả trong cột S, thay đổi số 1 đến 10.

Từ bây giờ, khi ô B9 hoặc bất kỳ ô nào trong phạm vi B9: B1000 thay đổi, tổng số thay đổi sẽ được chồng lên và tự động điền vào ô được chỉ định.


Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Thanh siêu công thức (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2021 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ tính năng Dùng thử miễn phí 30 ngày. Bảo đảm hoàn lại tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng
Nhận xét (22)
Chưa có xếp hạng. Hãy là người đầu tiên xếp hạng!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Cám ơn rất nhiều ! Điều này hoạt động tuyệt vời.

Nhưng làm thế nào để bạn có được cùng một hàm / quy tắc hoạt động cho một phạm vi ô, dọc theo toàn bộ cột, chẳng hạn?

Tôi có danh sách các địa chỉ liên hệ của doanh nghiệp mình trên các hàng khác nhau, với chi tiết liên hệ của họ ở các cột khác nhau và tôi muốn thêm một cột đăng ký và đếm số lần một ô nhất định dọc theo mỗi hàng được thay đổi. Mã bạn cung cấp hoạt động tuyệt vời, nhưng chỉ cho một ô tại một thời điểm!

Tôi là người mới tham gia VBA, vì vậy tôi đánh giá cao sự hỗ trợ của các bạn.

Tôi đã thử thêm một dải ô vào mã, vì vậy thay vì "B9" và "C9", như đã cho trong ví dụ trên, tôi đã thử với các biến thể như "B: B", "C: C" hoặc "B9 : B1000 "và" C9: C1000 ", mà không thành công.

Cảm ơn trước,
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào Jan,
Vui lòng thử mã VBA bên dưới. Hy vọng nó có thể giúp ích. Cám ơn bạn đã góp ý.

Private Sub Worksheet_Change (ByVal Target As Range)
Làm mờ xRg theo phạm vi, xCell theo phạm vi
Dim xSRg, xRRg dưới dạng phạm vi
Dim xFNum càng lâu càng tốt

Đặt xSRg = Range ("B9: B1000")
Đặt xRRg = Range ("C9: C1000")

Application.EnableEvents = Sai
On Error Resume Next
Đối với xFNum = 1 Đến xSRg.count
Nếu Target = xSRg.Item (xFNum) thì
xRRg.Item (xFNum) .Value = xRRg.Item (xFNum) .Value + 1
Ứng dụng.EnableEvents = True
Thoát Sub
Cuối Nếu
XFNum tiếp theo
Ứng dụng.EnableEvents = True
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Crystal,

Điều này thật tuyệt vời, trên ma trận của tôi, tôi đã sử dụng cái này trên một trong các cột nhưng tôi đã phải vật lộn để sao chép nó trên nhiều cột. Bạn đã có một giải pháp?

Cảm ơn trước
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bạn có thể cung cấp toàn bộ bộ mã không? Tôi giả sử mã của Crystal được tích hợp với mã khác? Thanks
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào pha lê,

Tôi đang gặp sự cố với mã. Nếu ô chẳng hạn, nếu tôi nhập

B9 là "Apple" sau đó nó tăng C9 thêm 1
B10 là "Quả bóng" sau đó nó tăng C10 thêm 1
Tuy nhiên, nếu tôi nhập
B11 lại là "Apple" thì C9 sẽ được tăng thêm 1 chứ không phải C11

Có vẻ như nó tăng hàng có giá trị xuất hiện đầu tiên chứ không phải hàng được chỉnh sửa thực tế.

Có cách nào để chỉ tăng ô trong cùng một hàng và không phải một hàng trước đó không?

Cảm ơn.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bạn có hình dung điều này. Tôi cũng quan tâm đến điều này để kiểm tra nhiều ô. Chưa thử.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hi Kevin,

Đoạn mã sau có thể giúp bạn giải quyết vấn đề. Cám ơn bạn đã góp ý.
Private Sub Worksheet_Change (ByVal Target As Range)
Làm mờ xRg theo phạm vi, xCell theo phạm vi
Dim xSRg, xRRg dưới dạng phạm vi
Dim xFNum càng lâu càng tốt

Đặt xSRg = Range ("B9: B1000")
Đặt xRRg = Range ("C9: C1000")

Application.EnableEvents = Sai
On Error Resume Next
Đối với xFNum = 1 Đến xSRg.count
Nếu Target = xSRg.Item (xFNum) thì
xRRg.Item (xFNum) .Value = xRRg.Item (xFNum) .Value + 1
Ứng dụng.EnableEvents = True
Thoát Sub
Cuối Nếu
XFNum tiếp theo
Ứng dụng.EnableEvents = True
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Gracias de antemano por el aporte, muy útil, tội lỗi cấm vận, 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 comenzar. podrás ayudarme. Gracias!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hello All,

Giải pháp như được cung cấp trong "Đếm Số lần Một ô được Thay đổi Bằng Mã VBA" là tốt nếu chúng tôi chỉ theo dõi các thay đổi đối với MỘT TẾ BÀO. Vui lòng đề xuất, những sửa đổi nào là cần thiết, nếu việc theo dõi được thực hiện cho nhiều ô. Trong trường hợp có nhiều ô, bộ đếm tăng dần sẽ xuất hiện bên cạnh ô mà thay đổi giá trị đang được theo dõi.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Mong được giúp đỡ và hỗ trợ để có một mã VBA cụ thể, có thể áp dụng cho nhiều ô trong một trang tính.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào Shiju,
Vui lòng thử mã VBA bên dưới. Cảm ơn đã bình luận.

Private Sub Worksheet_Change (ByVal Target As Range)
Làm mờ xRg theo phạm vi, xCell theo phạm vi
Dim xSRg, xRRg dưới dạng phạm vi
Dim xFNum càng lâu càng tốt

Đặt xSRg = Range ("B9: B1000")
Đặt xRRg = Range ("C9: C1000")

Application.EnableEvents = Sai
On Error Resume Next
Đối với xFNum = 1 Đến xSRg.count
Nếu Target = xSRg.Item (xFNum) thì
xRRg.Item (xFNum) .Value = xRRg.Item (xFNum) .Value + 1
Ứng dụng.EnableEvents = True
Thoát Sub
Cuối Nếu
XFNum tiếp theo
Ứng dụng.EnableEvents = True
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Đội,

Khi tôi thử sử dụng:

Private Sub Worksheet_Change (ByVal Target As Range)
Làm mờ xRg theo phạm vi, xCell theo phạm vi
Dim xSRg, xRRg dưới dạng phạm vi
Dim xFNum càng lâu càng tốt

Đặt xSRg = Range ("B9: B1000")
Đặt xRRg = Range ("C9: C1000")

cẩn thận thay đổi các ô Phạm vi và Mục tiêu tương ứng với P2: P200 và X2: X200, tôi không đếm thay đổi trong Cột X mặc dù bản thân tôi đang cố gắng thay đổi các ô trên nhiều hàng trên P2: P200.

Mọi sự trợ giúp sẽ rất được trân trọng.

Trân trọng
JT
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bất cứ ai có thể giúp tôi đạt được mã cho Đếm thời gian một ô đã được thay đổi thành "Xác thực lại" và điều đó có thể được áp dụng cho yêu cầu của một cột.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Quisiera que me ayudaran a reiniciar el contador a cero cuando lo suggest, es decir, la celda c9 llevarla a cero y comenzar a contar b9 nuevamente.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào FELIX MARIÑO,
Vui lòng thêm mã sau vào mã được cung cấp trong bài đăng này. Khi bạn cần đặt lại ô, hãy nhấp vào bất kỳ từ nào trong mã, rồi nhấn phím F5 để chạy ô đó.
Sub CleaRCount()
'Updated by Extendoffice 20220527
    xCount = 0
    Range("c9") = 0
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào Crystal

Tôi đang gặp sự cố tương tự như RedDragon. Tôi đang cố gắng theo dõi các thay đổi về ngày tháng, ví dụ: khi một nhân viên gửi hồ sơ cho người quản lý của họ, họ nhập ngày theo cách thủ công- điều này có thể xảy ra nhiều lần. đã được gửi đến một người quản lý. Vấn đề của tôi là:

1) Nếu nhiều trường hợp được gửi đến người quản lý trong một ngày, thì bộ đếm chỉ tăng vào trường hợp đầu tiên của ngày đó, không phải bên cạnh các hàng được đề cập.
2) Mỗi ​​khi tôi thoát khỏi trang tính, mở lại và sửa đổi một ngày, bộ đếm sẽ đặt lại thành "1" - làm cách nào để chuyển điều này sang trang tính và không đặt lại khi trang tính được mở lại?

Bất kỳ sự giúp đỡ nào đều được đánh giá cao và cảm ơn bạn rất nhiều vì những gì bạn đã làm cho đến nay.

Gadjus
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Gadjus,
Xin lỗi vì sự bất tiện. Mã VBA sau đây có thể giúp bạn. Hãy thử một lần.

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
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi thử mã bên dưới và nó hoạt động, nhưng tôi đang sử dụng nó để theo dõi các thay đổi về ngày tháng, vì một số ngày giống nhau mỗi khi tôi thay đổi một ngày trùng với ngày khác trên cột nó sẽ đếm lại.
Tôi thử mã mới nhất nhưng không có gì khi tôi thử. CẢM ƠN VÌ MÃ TUYỆT VỜI NÀY!

Private Sub Worksheet_Change (ByVal Target As Range)
Làm mờ xRg theo phạm vi, xCell theo phạm vi
Dim xSRg, xRRg dưới dạng phạm vi
Dim xFNum càng lâu càng tốt

Đặt xSRg = Range ("I3: I1000")
Đặt xRRg = Range ("S3: S1000")

Application.EnableEvents = Sai
On Error Resume Next
Đối với xFNum = 1 Đến xSRg.Count
Nếu Target = xSRg.Item (xFNum) thì
xRRg.Item (xFNum) .Value = xRRg.Item (xFNum) .Value + 1
Ứng dụng.EnableEvents = True
Thoát Sub
Cuối Nếu
XFNum tiếp theo
Ứng dụng.EnableEvents = True
End Sub
Sub CleaRCount ()
'Cập nhật Extendoffice 20220527
xCount = 0
Phạm vi ("S3") = 0
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào,
Mã VBA sau đây có thể giúp bạn. Hãy thử nó.
Chú thích: Trong dòng này "Đặt xRRg = xCell.Offset (0, 10)", con số "10”Đại diện cho số cột cần bù đắp ở bên phải của tham chiếu bắt đầu (ở đây tham chiếu bắt đầu là cột Ivà số lượng bạn muốn trả lại nằm trong cột 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
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Cảm ơn Crystal, hoạt động tuyệt vời!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Olá Cristal,

vi que você tem ajudado o pessoal com codigo 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 sabre é quantas vezes eu mudo o campo B2 até mudar o campo C2 e manter esse valor de alterações no campo D2

ví dụ: eu alterei o campo B2 5 vezes seguidas ate alterei o C2

D2 = 5

e quantas veze eu alterei o campo C2 até voltar a alterei B2
ví dụ: thay thế trại C2 2 vezes seguidas e voltei a alterei o trại B2
E2 = 2

E eu gostaria de manter o valor máximo dessa Sequência, do đó có thể tạo ra một bảng thay thế ở trại D2 e ​​E2 để tạo ra một phần tiếp theo của các bảng thay đổi ở B2 và C2 hóa ra là chính của 5 và 2, vì vậy không có ví dụ nào về chúng.

espero que tenha ficado claro os exemplos. ahahah... abraços
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào wagner cesar,
Mã VBA sau đây có thể hữu ích. Xin vui lòng cung cấp cho nó một thử. Cảm ơn bạn.

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
Không có bình luận nào được đăng ở đây
Để lại ý kiến ​​của bạn
Đăng với tư cách khách
×
Đánh giá bài viết này:
0   Nhân vật
Các vị trí được đề xuất

Kết nối với chúng tôi

Bản quyền © 2009 - www.extendoffice.com. | Đã đăng ký Bản quyền. cung cấp bởi ExtendOffice. | BẢN ĐỒ CHI NHÁNH
Microsoft và logo Office là các nhãn hiệu hoặc nhãn hiệu đã đăng ký của Microsoft Corporation tại Hoa Kỳ và / hoặc các quốc gia khác.
Được bảo vệ bởi Sectigo SSL