Đặt công thức cho kết quả trong một nhận xét (Microsoft Excel)
Bob hỏi liệu có thể viết công thức và nhận câu trả lời trong một nhận xét, thay vì trong một ô hay không. Câu trả lời ngắn gọn là không, bạn không thể làm điều đó với một công thức. Tuy nhiên, bạn có thể làm điều đó với macro. Ví dụ: macro sau đây thêm nội dung của hai ô (A1 và B1) và sau đó gắn kết quả vào một nhận xét được đính kèm vào ô C1:
Sub MakeComment() With Worksheets(1).Range("C1").AddComment .Visible = True .Text "Total of cell A1 plus cell B1 is equal to " & _ ([A1].Value) + ([B1].Value) End With End Sub
Nếu bạn muốn chạy macro trên một phạm vi ô, thì cần phải có một cách tiếp cận khác. Các vòng lặp macro sau đi qua tất cả các ô trong một vùng chọn. Nếu ô chứa một công thức, macro sẽ đặt giá trị (kết quả của công thức) trong một chú thích được đính kèm với ô đó.
Sub ValueToComment() Dim rCell As Range For Each rCell In Selection With rCell If .HasFormula Then On Error Resume Next .Comment.Delete On Error GoTo 0 .AddComment .Comment.Text Text:=CStr(rCell.Value) End If End With Next Set rCell = Nothing End Sub
Trong khi lặp qua các ô trong vùng chọn, nếu một trong các ô có công thức và nhận xét hiện có, thì nhận xét đó sẽ bị xóa và thay thế bằng nhận xét mới có chứa kết quả công thức.
Sau đó, giá trị của ô sẽ hiển thị cũng như nhận xét có cùng số. Thay vì CStr, bạn cũng có thể sử dụng chức năng Định dạng để hiển thị giá trị theo bất kỳ cách nào bạn có thể muốn.
Bạn cũng có thể tạo một macro sẽ sửa đổi nhận xét bất cứ khi nào bạn cập nhật nội dung của một ô cụ thể. Ví dụ: giả sử mỗi khi ai đó thực hiện thay đổi trong ô C11, bạn muốn kết quả của bất kỳ thứ gì có trong ô đó được đặt vào một nhận xét được đính kèm với ô F15. Macro sau thực hiện điều đó:
Private Sub Worksheet_Change(ByVal Target As Range) Dim sResult As String If Union(Target, Range("C11")).Address = Target.Address Then Application.EnableEvents = False Application.ScreenUpdating = False sResult = Target.Value Target.ClearContents With Range("F15") .ClearComments .AddComment .Comment.Text Text:=sResult End With Application.EnableEvents = True Application.ScreenUpdating = True End If End Sub
Khi ai đó nhập một công thức (hoặc một giá trị) vào ô C11, kết quả của công thức đó (hoặc chính giá trị) được đặt vào một nhận xét được đính kèm với ô F15. Vì đây là một macro được kích hoạt bởi sự kiện, nó cần phải được nhập vào cửa sổ mã cho trang tính mà nó sẽ hoạt động.
Cuối cùng, bạn có thể muốn macro theo dõi toàn bộ cột. Macro sau sử dụng sự kiện Thay đổi của trang tính, giống như macro trước đó. Tuy nhiên, nó chỉ bắt đầu hoạt động nếu thay đổi được thực hiện trong cột F và chỉ khi một ô trong cột đó được thay đổi.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column <> 6 Then Exit Sub Dim x As String Application.EnableEvents = False If Target.HasFormula Then x = Evaluate(Target.Formula) Else x = Target.Text End If Target.ClearComments If Target.Text = "" Then Application.EnableEvents = True Exit Sub End If Target.AddComment x Target = "" Application.EnableEvents = True End Sub
Nếu người dùng thực hiện thay đổi đối với một ô trong cột F, macro sẽ lấy kết quả của những gì đã được nhập và đặt nó vào một chú thích được đính kèm với ô đó. Nội dung của ô sau đó sẽ bị xóa.
_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 (13038) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: