VBA 精准查找关键词并复制数据至指定位置:附代码及注意要点
以下是使用 VBA 实现上述功能的代码: ```vb Sub FindAndCopyData() Dim wsOriginal As Worksheet Dim wsVerify As Worksheet Dim keyword1 As String Dim keyword2 As String Dim keyword3 As String Dim found1 As Boolean Dim found2 As Boolean Dim found3 As Boolean Dim row1 As Long Dim row2 As Long Dim row3 As Long Dim totalRow1 As Long Dim totalRow2 As Long Dim totalRow3 As Long Dim i As Long Set wsOriginal = Worksheets("w附注工作表") Set wsVerify = Worksheets("附注校验工作表") keyword1 = "利率衍生工具" keyword2 = "权益衍生工具" keyword3 = "其他衍生工具" found1 = False found2 = False found3 = False ' 查找关键词 For i = 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, keyword1) > 0 Then found1 = True row1 = i End If If InStr(1, wsOriginal.Cells(i, 1).Value, keyword2) > 0 Then found2 = True row2 = i End If If InStr(1, wsOriginal.Cells(i, 1).Value, keyword3) > 0 Then found3 = True row3 = i End If Next i ' 定位关键词下方的第一个合计行 If found1 Then For i = row1 + 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, "合计") > 0 Then totalRow1 = i Exit For End If Next i End If If found2 Then For i = row2 + 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, "合计") > 0 Then totalRow2 = i Exit For End If Next i End If If found3 Then For i = row3 + 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, "合计") > 0 Then totalRow3 = i Exit For End If Next i End If ' 复制数据 If found1 Then wsOriginal.Range("A" & row1 & ":G" & row1).Copy wsVerify.Range("A149").PasteSpecial xlPasteValues If found2 And row2 > row1 Then wsOriginal.Range("A" & row2 & ":G" & row2).Copy wsVerify.Range("A154").PasteSpecial xlPasteValues End If If found3 And row3 > row2 Then wsOriginal.Range("A" & row3 & ":G" & row3).Copy wsVerify.Range("A159").PasteSpecial xlPasteValues End If wsOriginal.Range("A" & totalRow1 & ":G" & totalRow1).Copy wsVerify.Range("A163").PasteSpecial xlPasteValues End If If found2 And Not found1 Then wsOriginal.Range("A" & row2 & ":G" & row2).Copy wsVerify.Range("A154").PasteSpecial xlPasteValues If found3 And row3 > row2 Then wsOriginal.Range("A" & row3 & ":G" & row3).Copy wsVerify.Range("A159").PasteSpecial xlPasteValues End If wsOriginal.Range("A" & totalRow2 & ":G" & totalRow2).Copy wsVerify.Range("A163").PasteSpecial xlPasteValues End If If found3 And Not found1 And Not found2 Then wsOriginal.Range("A" & row3 & ":G" & row3).Copy wsVerify.Range("A159").PasteSpecial xlPasteValues wsOriginal.Range("A" & totalRow3 & ":G" & totalRow3).Copy wsVerify.Range("A163").PasteSpecial xlPasteValues End If ' 在合计行下方重新查找 found1 = False found2 = False found3 = False For i = totalRow1 + 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, keyword1) > 0 Then found1 = True row1 = i End If If InStr(1, wsOriginal.Cells(i, 1).Value, keyword2) > 0 Then found2 = True row2 = i End If If InStr(1, wsOriginal.Cells(i, 1).Value, keyword3) > 0 Then found3 = True row3 = i End If Next i If found1 Then For i = row1 + 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, "合计") > 0 Then totalRow1 = i Exit For End If Next i End If If found2 Then For i = row2 + 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, "合计") > 0 Then totalRow2 = i Exit For End If Next i End If If found3 Then For i = row3 + 1 To wsOriginal.Rows.Count If InStr(1, wsOriginal.Cells(i, 1).Value, "合计") > 0 Then totalRow3 = i Exit For End If Next i End If ' 复制数据 If found1 Then wsOriginal.Range("A" & row1 & ":G" & row1).Copy wsVerify.Range("A174").PasteSpecial xlPasteValues If found2 And row2 > row1 Then wsOriginal.Range("A" & row2 & ":G" & row2).Copy wsVerify.Range("A179").PasteSpecial xlPasteValues End If If found3 And row3 > row2 Then wsOriginal.Range("A" & row3 & ":G" & row3).Copy wsVerify.Range("A184").PasteSpecial xlPasteValues End If wsOriginal.Range("A" & totalRow1 & ":G" & totalRow1).Copy wsVerify.Range("A188").PasteSpecial xlPasteValues End If If found2 And Not found1 Then wsOriginal.Range("A" & row2 & ":G" & row2).Copy wsVerify.Range("A179").PasteSpecial xlPasteValues If found3 And row3 > row2 Then wsOriginal.Range("A" & row3 & ":G" & row3).Copy wsVerify.Range("A184").PasteSpecial xlPasteValues End If wsOriginal.Range("A" & totalRow2 & ":G" & totalRow2).Copy wsVerify.Range("A188").PasteSpecial xlPasteValues End If If found3 And Not found1 And Not found2 Then wsOriginal.Range("A" & row3 & ":G" & row3).Copy wsVerify.Range("A184").PasteSpecial xlPasteValues wsOriginal.Range("A" & totalRow3 & ":G" & totalRow3).Copy wsVerify.Range("A188").PasteSpecial xlPasteValues End If End Sub ``` 额外需要注意的逻辑点: 1. 确保要操作的工作表名称准确无误,避免因名称错误导致操作错误的工作表。 2. 处理可能出现的找不到关键词或合计行的情况,添加适当的错误处理代码,避免程序崩溃。 3. 考虑数据量较大时的性能问题,优化查找和复制的算法。 ######[AI写代码神器 | 1928点数解答 | 2024-12-18 14:43:55]
- 数轴旅行:从原点出发,能否到达目标位置?(字节豆包 | 225点数解答 | 2026-01-23 19:51:03)62
- 编程揭秘:计算 𝑛! 在 𝑃 进制下末尾零个数的方法与代码实现(DeepSeek | 549点数解答 | 2026-01-11 17:49:54)63
- Python 实现多功能手机通讯录:添加、查看、删除、修改、查找全搞定!(字节豆包 | 1030点数解答 | 2025-06-05 15:47:56)264
- Java代码实现从JSON数据中提取ID,涉及“数据”与“项目 - 知识库”结构(字节豆包 | 603点数解答 | 2025-04-15 22:48:51)255
- C++ 实现:计算一排鹅与最高、最矮鹅的身高差及代码详解(字节豆包 | 549点数解答 | 2025-11-16 20:19:06)105
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)215
- Python爬取百度学术300条文献信息并可视化各年份文献数量(字节豆包 | 858点数解答 | 2024-12-10 03:59:45)361
- 数字化制图综合平台:助力企业转型,推动烟草物流图纸智能化设计 (字节豆包 | 490点数解答 | 2024-10-30 20:30:29)159
- 数字化制图综合平台:引领烟草物流及多领域设计革新 在企业数字化转型的时代浪潮中,数字化制图技术创新应用成为产业升级与提升竞争力的关键。企业对高效、精准、智能化设计解决方案需求迫切,构建集二维到三维正逆向工程快捷化、干涉检测可视化、设备明细数据提取自动化以及设备模块模型库于一体的综合平台意义重大。 此平台集成先进数字化制图工具与智能算法,可实现二维设计到三维建模的无缝转换,大大缩短设计周期。正逆向工程能快速切换,满足不同场景设计需求。内置干涉检测功能可实时监测设计潜在冲突,保障设计方案可行与安全。设备明细数据自动提取提高设计准确性与效率。设备模块模型库为设计师提供丰富资源,支持设计标准化与模块化,加速项目推进。 整体来看,该综合平台的应用极大促进了烟草物流行业及更广泛领域的技术创新与效率提升。在烟草物流方案图纸智能化设计中,它提升了图纸设计效率与质量,使设计工作更加高效、精准。对于企业而言,这一平台带来显著竞争优势,能帮助企业在数字化转型中脱颖而出,在激烈的市场竞争中占据有利地位,推动整个行业向更高效、更智能的方向发展。 (阿里通义 | 216点数解答 | 2024-10-30 20:30:51)190
- C++ 实现三角形类型判断:小心三边条件、判断顺序与整数溢出!(DeepSeek | 214点数解答 | 2025-08-24 17:31:55)224
- C++ 实现判断正整数是否为 3、5、7 倍数:模运算、输出格式与边界条件处理(DeepSeek | 185点数解答 | 2025-08-24 18:42:18)287
- C++ 实现判断正整数是否为 3、5、7 倍数:输出格式、异常处理与取模运算要点(字节豆包 | 326点数解答 | 2025-12-27 11:00:43)64