Ray muốn, nếu có thể, một cách để tạo hoạt ảnh “đếm lên” cho một giá trị trong một ô. Ví dụ: trong ô B7, anh ấy có thể có giá trị là 23. Anh ấy muốn tham chiếu giá trị đó trong ô E4 và có số ô E4 tăng từ 0 đến 23 (0, 1, 2, 3, v.v.), hiển thị từng số đến lượt mình.

Không có cách cài sẵn nào để thực hiện việc này trong Excel, nhưng bạn có thể sử dụng macro để thực hiện hoạt ảnh. Về cơ bản, macro sẽ cần phải tìm ra những gì có trong ô B7, và sau đó sử dụng vòng lặp For …​ Next để chuyển qua các giá trị từ 0 đến bất kỳ giá trị nào trong B7. Trong mỗi lần lặp lại của vòng lặp, giá trị trong E4 được thay đổi và một số kiểu trễ được đưa vào.

Phần trễ của macro là thứ thực sự cung cấp khả năng thay đổi cách thức hoạt động của macro. Sự chậm trễ là cần thiết để làm cho hoạt ảnh có vẻ hoạt động; nếu không có nó, các con số trong E4 sẽ tăng lên quá nhanh. Excel cung cấp một số cách hữu ích để thực hiện độ trễ. Ví dụ, ví dụ về macro này dựa vào hàm Sleep:

#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

#Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

#End If Private Sub Worksheet_Change(ByVal Target As Range)

Dim n As Integer     Const cellWatch As String = "$B$7"

Const cellCount As String = "$E$4"

Const msec As Long = 200 ' milliseconds     If Target.Address = cellWatch Then         Application.EnableEvents = False         Range(cellCount).Show         If IsNumeric(Target) Then             For n = 0 To Target ' skipped if Target < 0                 Range(cellCount) = n                 Sleep msec ' delay each increment             Next n         End If         Range(cellCount) = Target         Application.EnableEvents = True     End If End Sub

Mã này nên được thêm vào mô-đun ThisWorksheet, vì nó được thiết kế để chạy mỗi khi có gì đó thay đổi trong trang tính. Mã kiểm tra xem ô được thay đổi có phải là ô đích (B7) hay không. Nếu có, thì nó lấy giá trị ở đó và nhảy vào vòng lặp For …​ Next để cập nhật bất kỳ thứ gì có trong ô E4. Hàm Sleep được sử dụng để trì hoãn, trong trường hợp này, 200 mili giây giữa mỗi lần cập nhật E4.

Nếu bạn muốn một macro ngắn hơn và không dựa vào trình xử lý sự kiện Worksheet_Change, bạn có thể cân nhắc những điều sau. Nó sử dụng phương thức Wait để tạm dừng trong vòng lặp For …​ Next:

Sub CountUp()

Dim J As Integer     For J = 0 To Range("B7").Value         Range("E4").Value = J         Application.Wait (Now + TimeValue("0:00:01"))

Next J     Range("E4").Value = Range("B7").Value End Sub

Phiên bản này của macro tạm dừng một giây đầy đủ giữa mỗi lần cập nhật ô E4.

Bất cứ khi nào bạn sử dụng một macro như thế này thực hiện một số loại chậm trễ, hãy nhớ rằng trang tính của bạn có vẻ kém phản hồi hơn. Điều này là do độ trễ đó và giá trị lớn đến mức nào nằm trong ô E4. (Giá trị càng lớn thì độ trễ tổng hợp càng dài.)

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (13753) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.