Размещение результатов формулы в комментарии (Microsoft Excel)
Боб спросил, можно ли написать формулу и получить ответ в комментарии, а не в ячейке. Короткий ответ: нет, вы не можете сделать это с помощью формулы. Однако вы можете сделать это с помощью макроса. Например, следующий макрос добавляет содержимое двух ячеек (A1 и B1), а затем вставляет результат в комментарий, прикрепленный к ячейке 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
Если вы предпочитаете запускать макрос для диапазона ячеек, тогда необходим другой подход. Следующие макроциклы проходят через все ячейки в выделенной области. Если ячейка содержит формулу, макрос помещает значение (результат формулы) в комментарий, прикрепленный к этой ячейке.
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
При циклическом просмотре ячеек в выделенном фрагменте, если в одной из ячеек есть формула и существующий комментарий, этот комментарий удаляется и заменяется новым комментарием, содержащим результат формулы.
После этого будет отображаться значение ячейки, а также комментарий с тем же номером. Вместо CStr вы также можете использовать функцию Format для отображения значения любым удобным для вас способом.
Вы также можете создать макрос, который будет изменять комментарий всякий раз, когда вы обновляете содержимое определенной ячейки. Например, предположим, что каждый раз, когда кто-то вносит изменение в ячейку C11, вы хотите, чтобы результат того, что находится в этой ячейке, помещался в комментарий, прикрепленный к ячейке F15. Следующий макрос делает именно это:
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
Когда кто-то вводит формулу (или значение) в ячейку C11, результаты этой формулы (или само значение) помещаются в комментарий, прикрепленный к ячейке F15. Поскольку это макрос, запускаемый событием, его необходимо ввести в окно кода для рабочего листа, на котором он будет работать.
Наконец, вы можете захотеть, чтобы ваш макрос контролировал весь столбец. Следующий макрос использует событие Change рабочего листа, как и предыдущий макрос. Однако он срабатывает только в том случае, если изменение было внесено в столбец F, и только если была изменена одна ячейка в этом столбце.
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
Если пользователь вносит изменения в одну ячейку в столбце F, макрос получает результат того, что было введено, и помещает его в комментарий, прикрепленный к этой ячейке. Затем содержимое ячейки удаляется.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13038) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Placing_Formula_Results_in_a_Comment [Размещение результатов формулы в комментарии]
.