<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://qingliezhiquan.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E5%AE%8F%E6%8F%90%E5%8F%96%E6%89%B9%E6%B3%A8</id>
	<title>宏提取批注 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://qingliezhiquan.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E5%AE%8F%E6%8F%90%E5%8F%96%E6%89%B9%E6%B3%A8"/>
	<link rel="alternate" type="text/html" href="https://qingliezhiquan.com/mediawiki/index.php?title=%E5%AE%8F%E6%8F%90%E5%8F%96%E6%89%B9%E6%B3%A8&amp;action=history"/>
	<updated>2026-08-11T10:42:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://qingliezhiquan.com/mediawiki/index.php?title=%E5%AE%8F%E6%8F%90%E5%8F%96%E6%89%B9%E6%B3%A8&amp;diff=7858&amp;oldid=prev</id>
		<title>Mwroot: Created page with &quot;{| class=&quot;wikitable&quot;  ! 我 || 通义千问  |-  | 你是一个excel专家。请用宏把 D 列单元格的批注，保存到 I 列对应行，无批注的行不用管  | 在Excel VBA中，你可以创建一个宏来实现这个功能。以下是一个简单的示例： &lt;syntaxhighlight lang=&quot;VBScript&quot; line&gt; Sub CopyCommentsToColumn()     Dim ws As Worksheet     Dim rng As Range     Dim cell As Range      &#039;设置你要操作的工作表     Set ws = ActiveSheet      &#039;设...&quot;</title>
		<link rel="alternate" type="text/html" href="https://qingliezhiquan.com/mediawiki/index.php?title=%E5%AE%8F%E6%8F%90%E5%8F%96%E6%89%B9%E6%B3%A8&amp;diff=7858&amp;oldid=prev"/>
		<updated>2025-09-29T01:49:38Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{| class=&amp;quot;wikitable&amp;quot;  ! 我 || 通义千问  |-  | 你是一个excel专家。请用宏把 D 列单元格的批注，保存到 I 列对应行，无批注的行不用管  | 在Excel VBA中，你可以创建一个宏来实现这个功能。以下是一个简单的示例： &amp;lt;syntaxhighlight lang=&amp;quot;VBScript&amp;quot; line&amp;gt; Sub CopyCommentsToColumn()     Dim ws As Worksheet     Dim rng As Range     Dim cell As Range      &amp;#039;设置你要操作的工作表     Set ws = ActiveSheet      &amp;#039;设...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! 我 || 通义千问&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| 你是一个excel专家。请用宏把 D 列单元格的批注，保存到 I 列对应行，无批注的行不用管&lt;br /&gt;
&lt;br /&gt;
| 在Excel VBA中，你可以创建一个宏来实现这个功能。以下是一个简单的示例：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;VBScript&amp;quot; line&amp;gt;&lt;br /&gt;
Sub CopyCommentsToColumn()&lt;br /&gt;
    Dim ws As Worksheet&lt;br /&gt;
    Dim rng As Range&lt;br /&gt;
    Dim cell As Range&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;设置你要操作的工作表&lt;br /&gt;
    Set ws = ActiveSheet&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;设定范围为你需要检查批注的D列所有单元格&lt;br /&gt;
    Set rng = ws.Range(&amp;quot;D1:D&amp;quot; &amp;amp; ws.Cells(ws.Rows.Count, &amp;quot;D&amp;quot;).End(xlUp).Row)&lt;br /&gt;
&lt;br /&gt;
    For Each cell In rng&lt;br /&gt;
        &amp;#039;检查当前单元格是否有批注&lt;br /&gt;
        If cell.Comment Is Nothing Then&lt;br /&gt;
            &amp;#039;如果无批注，则跳过&lt;br /&gt;
            GoTo NextCell&lt;br /&gt;
        Else&lt;br /&gt;
            &amp;#039;如果有批注，则将其内容复制到对应的I列&lt;br /&gt;
            cell.Offset(0, 5).Value = cell.Comment.Text&lt;br /&gt;
        End If&lt;br /&gt;
NextCell:&lt;br /&gt;
    Next cell&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这段宏会遍历工作表中的D列，如果发现某一行有批注，就会把该批注的内容复制到同一行的I列。没有批注的行将被忽略。&lt;br /&gt;
&lt;br /&gt;
要运行此宏，请按 Alt + F11 打开VBA编辑器，插入一个新的模块，然后粘贴上述代码，并按 F5 或点击运行按钮执行。或者你也可以把这个宏绑定到一个按钮或快捷键上以便于使用。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| 完全正确。请问若有 sheet1 sheet2 sheet3 sheet4 应该怎样修改代码&lt;br /&gt;
&lt;br /&gt;
| 如果你要在多个工作表（如 Sheet1、Sheet2、Sheet3 和 Sheet4）上执行相同的操作，只需将循环应用到这些工作表即可。以下是修改后的代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;VBScript&amp;quot; line&amp;gt;&lt;br /&gt;
Sub CopyCommentsToColumnAllSheets()&lt;br /&gt;
    Dim ws As Worksheet&lt;br /&gt;
    Dim rng As Range&lt;br /&gt;
    Dim cell As Range&lt;br /&gt;
&lt;br /&gt;
    &amp;#039; 遍历所有指定的工作表&lt;br /&gt;
    For Each ws In ThisWorkbook.Worksheets(Array(&amp;quot;Sheet1&amp;quot;, &amp;quot;Sheet2&amp;quot;, &amp;quot;Sheet3&amp;quot;, &amp;quot;Sheet4&amp;quot;))&lt;br /&gt;
        &amp;#039; 设定范围为你需要检查批注的D列所有单元格&lt;br /&gt;
        Set rng = ws.Range(&amp;quot;D1:D&amp;quot; &amp;amp; ws.Cells(ws.Rows.Count, &amp;quot;D&amp;quot;).End(xlUp).Row)&lt;br /&gt;
&lt;br /&gt;
        For Each cell In rng&lt;br /&gt;
            &amp;#039; 检查当前单元格是否有批注&lt;br /&gt;
            If cell.Comment Is Nothing Then&lt;br /&gt;
                &amp;#039; 如果无批注，则跳过&lt;br /&gt;
                GoTo NextCellInSheet&lt;br /&gt;
            Else&lt;br /&gt;
                &amp;#039; 如果有批注，则将其内容复制到对应的I列&lt;br /&gt;
                cell.Offset(0, 5).Value = cell.Comment.Text&lt;br /&gt;
            End If&lt;br /&gt;
NextCellInSheet:&lt;br /&gt;
        Next cell&lt;br /&gt;
    Next ws&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
以上代码将会对名为 Sheet1、Sheet2、Sheet3 和 Sheet4 的工作表进行操作。如有需要，你可以根据实际情况更改工作表名称。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| 完美。现在是下一项任务，把 sheet1 sheet2 sheet3 sheet4 的内容合并形成 sheet5&lt;br /&gt;
&lt;br /&gt;
| 以下的VBA代码可以将Sheet1、Sheet2、Sheet3和Sheet4的内容合并到新的Sheet5中：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;VBScript&amp;quot; line&amp;gt;&lt;br /&gt;
Sub MergeSheetsToOne()&lt;br /&gt;
    Dim srcSheet As Worksheet&lt;br /&gt;
    Dim dstSheet As Worksheet&lt;br /&gt;
    Dim lastRow As Long&lt;br /&gt;
    Dim i As Integer&lt;br /&gt;
&lt;br /&gt;
    &amp;#039; 创建或选择目标工作表Sheet5&lt;br /&gt;
    On Error Resume Next&lt;br /&gt;
    Set dstSheet = ThisWorkbook.Sheets(&amp;quot;Sheet5&amp;quot;)&lt;br /&gt;
    On Error GoTo 0&lt;br /&gt;
    If dstSheet Is Nothing Then&lt;br /&gt;
        Set dstSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))&lt;br /&gt;
        dstSheet.Name = &amp;quot;Sheet5&amp;quot;&lt;br /&gt;
    End If&lt;br /&gt;
&lt;br /&gt;
    &amp;#039; 清空目标工作表&lt;br /&gt;
    dstSheet.Cells.ClearContents&lt;br /&gt;
&lt;br /&gt;
    &amp;#039; 合并数据&lt;br /&gt;
    For Each srcSheet In ThisWorkbook.Worksheets(Array(&amp;quot;Sheet1&amp;quot;, &amp;quot;Sheet2&amp;quot;, &amp;quot;Sheet3&amp;quot;, &amp;quot;Sheet4&amp;quot;))&lt;br /&gt;
        lastRow = dstSheet.Cells(dstSheet.Rows.Count, &amp;quot;A&amp;quot;).End(xlUp).Row + 1 &amp;#039; 获取目标工作表最后一行的下一行&lt;br /&gt;
        srcSheet.Range(&amp;quot;A1:I&amp;quot; &amp;amp; srcSheet.Cells(srcSheet.Rows.Count, &amp;quot;A&amp;quot;).End(xlUp).Row).Copy Destination:=dstSheet.Range(&amp;quot;A&amp;quot; &amp;amp; lastRow)&lt;br /&gt;
    Next srcSheet&lt;br /&gt;
&lt;br /&gt;
    &amp;#039; 根据实际需求调整这里，比如如果I列是通过宏复制的批注，可能需要清除I列的数据以避免重复&lt;br /&gt;
    &amp;#039; dstSheet.Range(&amp;quot;I1:I&amp;quot; &amp;amp; dstSheet.Cells(dstSheet.Rows.Count, &amp;quot;A&amp;quot;).End(xlUp).Row).ClearContents&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这段代码首先确保存在名为Sheet5的工作表，然后清空其内容。接着，它遍历Sheet1、Sheet2、Sheet3和Sheet4，并将每个源工作表的数据复制到Sheet5的新行中。需要注意的是，如果I列包含了从批注复制过来的数据，且你不希望在合并过程中保留这些数据，可以取消注释最后一行代码以清除I列的内容。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| 您真棒！&lt;br /&gt;
&lt;br /&gt;
| 非常感谢您的夸奖，我会继续努力提供更好的帮助！如果您还有其他问题或需求，请随时告诉我。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:MicroSoft Office]]&lt;/div&gt;</summary>
		<author><name>Mwroot</name></author>
	</entry>
</feed>