If you copy a cell with a comment or note from one cell to another in the traditional way (using CTRL + C and CTRL + V), you transfer the cell value and formatting along with the comment. However, sometimes you need to copy the comment or note only without copying the original cell content.
It’s beneficial to reuse standard instructions, maintain consistency across sheets, and minimize errors. So, instead of standard copy-paste, we’ll use the Paste Special feature to only extract the comment from a cell.
Steps to use the Paste Special feature to copy comments:
➤ Select the cell or range with the comments and press Ctrl + C to copy its content.
➤ Now, right-click on the destination cell or range and choose Paste Special from the menu.
➤ Choose the Comments and Notes option and click Ok.
This article explores all the possible ways of copying a comment from one cell to another including using the Paste Special feature and a VBA macro.
Manually Copy Comments with the New Comment Option
In our project task dataset, we have columns for project worker names, tasks, project status, and priority. We’ll copy the comments from cells C3 and C7 into cells D3 and D7.
For only a few comments in a worksheet, you can manually copy each comment into the destination cells. Here’s how:
➤ Hover your mouse cursor over the cell containing the comment you want to copy. You can identify the cell from a small purple or red triangle in the top-right corner of the cell.
➤ As the comment appears, click on the Edit icon (small pencil sign) to turn on editing.
➤ Now, click on the comment texts and press Ctrl + A to select the comment. Use the Ctrl + C keyboard shortcut to copy the selected text.
➤ Close the comment dialog box by pressing the Checkmark sign or using the Ctrl + Enter key.
➤ Click on the destination cell where you want to copy the comment and right-click on it. Choose New Comment from the menu.
➤ In the comment field, press Ctrl + V to paste the comment.
➤ Finally, press the Checkmark or Ctrl + Enter key to add the comment to the selected cell. Repeat the process for the other comments.
Using the Paste Special Feature to Copy Comments
With this method, you can copy and paste a comment directly into the destination cells. Moreover, we get to copy a comment into multiple cells. Below are the steps:
➤ Right-click on the cell with the comment and select Copy from the menu. Or, you can select the cell and press Ctrl + C .
➤ Select the destination cell, right-click on it, and select Paste Special. Or, press Ctrl + Alt + V .
➤ To copy the comment in multiple cells, right-click on the destination range and choose Paste Special.
➤ From the Paste Special dialog box, select Comments and Notes and press Ok. Repeat the steps for the remaining comments.
➤ Here are the copied comments in the destination cells:
➤ Below is the final result for multiple cells.
Custom VBA Macro to Copy Comments to One or Multiple Cells
Another easy way to automate comment copying is to use a custom VBA macro. Follow the steps given below to copy comments from one cell to another cell or a cell range.
➤ To add the Developer tab to the top ribbon, go to the File tab >> More >> Options.
➤ Select Customize Ribbon and check the Developer box. Press Ok.
➤ Now, click on the Developer tab and choose Visual Basic from the Code group.
➤ When the VBA Editor opens, press the Insert tab and select Module.
➤ Paste the following code in the module box:
Sub CopyComments()
' This macro copies both modern (threaded) and classic comments from a
' user-selected source range to a user-selected destination range.
Dim sourceRange As Range
Dim destRange As Range
Dim sourceCell As Range
Dim destCell As Range
Dim i As Long
' The On Error statement handles cases where the user clicks "Cancel"
' on the input boxes, which would otherwise cause a runtime error.
On Error GoTo Canceled
' Prompt the user to select the source range.
Set sourceRange = Application.InputBox( _
Prompt:="Select the source cell(s) with comments to copy.", _
Title:="Select Source Range", _
Type:=8)
' Prompt the user to select the destination range.
Set destRange = Application.InputBox( _
Prompt:="Select the destination cell(s) to paste comments.", _
Title:="Select Destination Range", _
Type:=8)
' Check if the user selected ranges with the same number of cells.
' This is a critical check to ensure the copy operation works correctly.
If sourceRange.Cells.Count <> destRange.Cells.Count Then
MsgBox "The number of cells in the source and destination ranges must be the same.", vbCritical, "Error"
Exit Sub
End If
' Loop through each cell in the source range and copy its comment to the
' corresponding cell in the destination range. The loop runs for as many
' times as there are cells in the source range.
For i = 1 To sourceRange.Cells.Count
Set sourceCell = sourceRange.Cells(i)
Set destCell = destRange.Cells(i)
' Before adding a new comment, clear any existing comments on the destination cell.
' This handles both classic and threaded comments.
If Not destCell.CommentThreaded Is Nothing Then
destCell.CommentThreaded.Delete
End If
If Not destCell.Comment Is Nothing Then
destCell.ClearComments
End If
' First, check for a new-style (threaded) comment.
If Not sourceCell.CommentThreaded Is Nothing Then
' Add a new threaded comment to the destination cell.
destCell.AddCommentThreaded Text:=sourceCell.CommentThreaded.Text
' If no threaded comment exists, check for a classic comment.
ElseIf Not sourceCell.Comment Is Nothing Then
' Add a new classic comment to the destination cell.
destCell.AddComment Text:=sourceCell.Comment.Text
' These lines are optional. Uncomment them if you want to also
' copy the author name and the visibility setting of the comment.
' destCell.Comment.Author = sourceCell.Comment.Author
' destCell.Comment.Visible = sourceCell.Comment.Visible
End If
Next i
MsgBox "Comments copied successfully!", vbInformation, "Complete"
Exit Sub
Canceled:
' This section runs if the user clicks "Cancel" on either InputBox.
' It prevents a runtime error and provides a friendly message.
MsgBox "Operation canceled by user.", vbExclamation, "Canceled"
End Sub
➤ Press F5 to run the macro or click on the Run tab >> Run Sub/UserForm.
➤ As Excel prompts you to enter the source cell containing the comment, manually type the cell or range reference or go back to the Excel tab and highlight it in the Select Source Range box. Press Ok.
➤ In the Select Destination Range dialog box, manually type or highlight the destination cell(s) and press Ok.
➤ Here’s the final result:
Custom VBA Macro to Extract All Comments from a Worksheet
If you want to copy all the comments from a worksheet to paste them in a different worksheet, use a custom VBA macro. Here are the steps for it:
➤ Click on the Developer tab and select Visual Basic.
➤ From the VBA Editor, choose the Insert tab >> Module.
➤ In the new blank box, paste the following code.
Sub ExportCommentsToSheet()
Dim ws As Worksheet
Dim exportSheet As Worksheet
Dim cell As Range
Dim threadedComment As CommentThreaded
Dim outputText As String
Dim formatChoice As Variant
Dim includeAddress As VbMsgBoxResult
Dim separator As String
Dim rowCounter As Long
Dim tempText As String
Set ws = ActiveSheet
' Prompt user for format choice
formatChoice = Application.InputBox( _
Prompt:="Choose how to format the exported comments:" & vbCrLf & _
"1 = One comment per row (Excel-friendly)" & vbCrLf & _
"2 = One comment per line" & vbCrLf & _
"3 = Separate with TAB" & vbCrLf & _
"4 = Separate with COLON" & vbCrLf & _
"5 = One comment per paragraph (blank line between)", _
Title:="Comment Export Format", Type:=1)
If formatChoice < 1 Or formatChoice > 5 Then
MsgBox "Invalid option. Cancelling.", vbExclamation
Exit Sub
End If
' Prompt to include cell addresses
includeAddress = MsgBox("Do you want to include the cell addresses with the comments?", vbYesNo + vbQuestion, "Include Cell Addresses")
' Determine separator based on format
Select Case formatChoice
Case 1 ' Rows (each cell in its own column)
separator = vbTab
Case 2 ' Lines
separator = vbCrLf
Case 3 ' Tab
separator = vbTab
Case 4 ' Colon
separator = ": "
Case 5 ' Paragraphs
separator = vbCrLf & vbCrLf
End Select
' Create new worksheet
Set exportSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
exportSheet.Name = "Exported_Comments"
rowCounter = 1
' Loop through legacy comments (Notes)
For Each cell In ws.UsedRange.Cells
If Not cell.Comment Is Nothing Then
tempText = ""
If includeAddress = vbYes Then
tempText = cell.Address(False, False) & separator
End If
tempText = tempText & cell.Comment.Text
' Output based on format
Select Case formatChoice
Case 1 ' One row: address in A, comment in B
exportSheet.Cells(rowCounter, 1).Value = IIf(includeAddress = vbYes, cell.Address(False, False), "")
exportSheet.Cells(rowCounter, 2).Value = cell.Comment.Text
Case Else
exportSheet.Cells(rowCounter, 1).Value = tempText
End Select
rowCounter = rowCounter + 1
If formatChoice = 5 Then rowCounter = rowCounter + 1 ' Add blank line
End If
Next cell
' Loop through modern threaded comments
For Each threadedComment In ws.CommentsThreaded
tempText = ""
If includeAddress = vbYes Then
tempText = threadedComment.Parent.Address(False, False) & separator
End If
tempText = tempText & threadedComment.Text
Select Case formatChoice
Case 1 ' One row
exportSheet.Cells(rowCounter, 1).Value = IIf(includeAddress = vbYes, threadedComment.Parent.Address(False, False), "")
exportSheet.Cells(rowCounter, 2).Value = threadedComment.Text
Case Else
exportSheet.Cells(rowCounter, 1).Value = tempText
End Select
rowCounter = rowCounter + 1
If formatChoice = 5 Then rowCounter = rowCounter + 1 ' Add blank line
Next threadedComment
MsgBox "Comments exported to a new sheet: '" & exportSheet.Name & "'", vbInformation
End Sub
➤ Press F5 or click the Run tab >> Run Sub/UserForm.
➤ When prompted, select any of the following options depending on where you want to paste the copied comments:
- One comment per row (Excel-friendly)
- One comment per line
- Separate with TAB
- Separate with COLON
- One comment per paragraph (blank line between)
➤ Now, choose an option depending on whether you want to copy the comments with the cell references or not.
➤ Here are all the comments from our worksheet copied into a new worksheet:
Frequently Asked Questions
How to find cells with comments?
Look for a small purple or red triangle in the top-right corner of the cell, which indicates a comment. You can also use the Go To Special feature to highlight all the cells with comments at once. Press Ctrl + G and click Special. Choose Comments (or Notes) and press Ok.
How do I print all comments in Excel?
Go to the Page Layout tab and click on the Page Setup dialog launcher (small arrow). Under the Sheet tab, find Comments (or Notes) and choose As Displayed on Sheet to print comments exactly where they appear. To print all comments in a list after the sheet data, select At End of Sheet instead. Click Ok and then print your sheet as usual.
Can you track comments in Excel?
Yes, you can track threaded comments that automatically record the commenter’s name and time. You can view the conversation history by clicking the Comment icon (purple or red triangle) in a cell. To track comment changes over time, you can use Track Changes (in older Excel versions) or version history in OneDrive/SharePoint if your workbook is saved online.
Concluding Words
Most methods of copying a comment in Excel work on one comment at a time. If you copy multiple comments and use Paste Special, the comments will be copied with the same row differences. However, if you want to copy all comments from a worksheet, do it with a custom VBA macro for easy and quick extraction.