Excel VBA 具有多个搜索条件并循环,直到找到所有不同的结果

2023-12-21

我对 VBA 非常陌生,并且截止日期非常短,因此如果我没有遵循所有论坛指南,我深表歉意。如果您能提供任何帮助,我将不胜感激!

Goal:

  1. 在 Sheet1 中搜索关键字(活动:、站点地址:、描述:、所有者:、估价:、子类型:和 DATE_B:)
  2. 一旦找到关键字,偏移量(0,1)
  3. 复制值
  4. 在 Sheet2 上,将列标记为:Permit_Type、Permit_Date、Permit_Address、Permit_Desc、Owner 和 Permit_Val)
  5. 将复制的值从 Sheet1 粘贴到相应的列
  6. 重复脚本,直到不再找到 Sheet1 中的所有关键字。换句话说,继续整个 Sheet1。

什么有效:

  1. 在 Sheet2 上创建列名称
  2. 脚本复制并粘贴找到的第一个值

什么不起作用:

  1. 找到第一个值后脚本停止

已知问题:我最初将值复制/粘贴到范围 O2:U2 中的同一张 Sheet1 上。我很难删除此命令,因为我只需要将这些值粘贴到 Sheet2 上

数据是这样的,大约100条记录大多数关键字位于 A 列,然后其余的位于 E 列 - 抱歉,我无法提供更好的表示!

 'Column A    Column B     Column C    Column D    Column E      Column F Column G G         
 'Activity: B13-0217       Type:  BUILD-M   Sub Type:   Porch   Status: ISSUED
 '

 'Parcel:               DATE_B: 09/13/2013  Sq Feet:    
 'Site Address: 123 Main St                     
 'Description:  Patio cover 150 sqft                        
 'Applicant:    ABC Contracting         Phone:  123-456-7890        
 'Owner:    Jane Smith          Phone:  123-456-7890        
 'Contractor:   ABC Contracting         Phone:  123-456-7890        
 'Occupancy:        Use:        Class:      Insp Area:  
 'Valuation:    $3,200.00 Fees Req:     $256.90     Fees Col:   $256.90     Bal Due:    $0.00 

 'Activity: B13-0224    Type:  BUILD-M      Sub Type:   Deck    Status: ISSUED
 'Parcel:               DATE_B: 09/27/2013  Sq Feet:    
 'Site Address: 234 South St                        
 'Description:  Install a 682 sqft deck on the east side of the building                        
 'Applicant:    BCA Contracting         Phone:  234-567-1234        
 'Owner:    Joe Smith           Phone:  234-567-1234        
 'Contractor:   BCA Contracting         Phone:  234-567-1234        
 'Occupancy:        Use:        Class:      Insp Area:  
 'Valuation:    $28,000.00 Fees Req:        $1,408.60   Fees Col:   $1,408.60   Bal Due:    $0.00 

下面是我拼凑的脚本。任何帮助将不胜感激!

Sub Lafayette_Permit_arrangement_macro()

' This Macro is intended to arrange the monthly Lafayette Permit
' data so that specific data is extracted and organized in a more
' usable format for mass import.


'Permit Number
Cells.Find(What:="Activity:", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Select
    Selection.Copy
Range("O2").Select
    ActiveSheet.Paste
'Permit Type
 Cells.Find(What:="Sub Type:", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Select
    Selection.Copy
 Range("P2").Select
 ActiveSheet.Paste
'Permit Issue Date
 Cells.Find(What:="DATE_B:", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Select
    Selection.Copy
 Range("Q2").Select
 ActiveSheet.Paste
'Permit Address
 Cells.Find(What:="Site Address:", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Select
    Selection.Copy
  Range("R2").Select
  ActiveSheet.Paste
'Permit Description
 Cells.Find(What:="Description:", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Select
    Selection.Copy
 Range("S2").Select
 ActiveSheet.Paste
'Permit Owner
 Cells.Find(What:="Owner:", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Select
    Selection.Copy
 Range("T2").Select
 ActiveSheet.Paste
'Permit Value
 Cells.Find(What:="Valuation:", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Select
    Selection.Copy
 Range("U2").Select
 ActiveSheet.Paste

 Range("O2:U2").Select
 Application.CutCopyMode = False
 Selection.Copy
 Sheets("Sheet2").Select
 Range("A2").Select
 ActiveSheet.Paste
 Sheets("Sheet2").Select
 Range("A1").Select

 Application.CutCopyMode = False
 'Add PermitNo column to Sheet2
 ActiveCell.FormulaR1C1 = "Permit_No"
 Range("A1").Select
 'Add PermitType column to Sheet2
 ActiveCell.FormulaR1C1 = "Permit_Type"
 Range("B1").Select
 'Add PermitDate column to Sheet2
 ActiveCell.FormulaR1C1 = "Permit_Date"
 Range("C1").Select
 'Add PermitAdd column to Sheet2
 ActiveCell.FormulaR1C1 = "Permit_Address"
 Range("D1").Select
 'Add PermitDesc column to Sheet2
 ActiveCell.FormulaR1C1 = "Permit_Desc"
 Range("E1").Select
 'Add PermitOwner column to Sheet2
 ActiveCell.FormulaR1C1 = "Owner"
 Range("F1").Select
'Add PermitVal column to Sheet2
 ActiveCell.FormulaR1C1 = "Permit_Val"
 Range("G1").Select




End Sub

首先,您几乎应该始终避免使用 select;将值存储在变量中或直接设置它们要快得多(有时也更干净)。

第二,Find只会返回搜索到的参数的第一个实例。您将需要结合使用FindNext以及一个用于查找给定范围内参数的所有实例的循环。鉴于这两个事实,我将使用以下内容更新代码。

Dim searchResult As Range
Dim x As Integer

x = 2

' Search for "Activity" and store in Range
Set searchResult = Cells.Find(What:="Activity:", _
                     LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
                     SearchDirection:=xlNext, MatchCase:=False, _
                     SearchFormat:=False)

' Store the address of the first occurrence of this word
firstAddress = searchResult.Address
Do

    ' Set the value in the O column, using the row number and column number
    Cells(x, 15) = searchResult.Offset(0, 1).Value

    ' Increase the counter to go to the next row
    x = x + 1

    ' Find the next occurence of "Activity"
    Set searchResult = Cells.FindNext(searchResult)

    ' Check if a value was found and that it is not the first value found
Loop While Not searchResult Is Nothing And firstAddress <> searchResult.Address

例如,搜索完成“活动”后,您可以将 x 重置为 2,并对所有其他搜索参数重复相同的步骤。

正如 @user2140261 评论的那样,您可以采取进一步的步骤将上述内容变成一个函数,然后在 vba 代码中使用该函数,或者通过公式直接在电子表格中使用该函数。

UPDATE

考虑到您的数据(您刚刚发布的),我共享的代码可以通过仅搜索 A 列来提高效率,因为它似乎是您正在寻找“活动”一词的位置。在 VBA 中,您还应该尝试将声明的范围限制为数据源(在本例中为 A 列,A:A,或者甚至更好,A1:A5000,或者无论存在多少行数据)

因此,不要使用Cells.Find,您应该使用范围并指示要搜索的区域,例如Range("A1:A5000")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA 具有多个搜索条件并循环,直到找到所有不同的结果 的相关文章

  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • 获取给定日期的周数

    例子 DD MM YYYY 1 1 2009 should give 1 31 1 2009 should give 5 1 2 2009 should also give 5 Format 1 2 2009 ww 回报6 那么 怎样才能得
  • 这个 if 语句中怎么有太多参数

    My IF下面的声明不断错误射击 指出参数太多 为什么是这样 谁能看出下面的语句有什么错误吗 IF G7 EUR H7 1 15 L7 IF G7 USD H7 1 35 L7 IF G7 AUD H7 1 35 L7 IF G7 CAD
  • 使用 OpenXML 读取列中的 Excel 工作表数据

    有没有一种方法可以使用 OpenXML SDK 和 C 按列而不是按行读取 Excel 工作表 我已经尝试使用 EPPlus 包 但遇到了一些问题 因为我的应用程序还使用 EPPlus 不支持的 xslm 文件 因此 我需要 OpenXML
  • 关闭工作簿时删除范围,xls vba

    我想要范围 Range A2 G z 关闭工作簿时删除 有人可以帮我处理代码吗 谢谢 凯 这就是我尝试过的 Option Explicit Sub Makro1 insert clipboard Workbooks Pfl SchutzSt
  • 参考上一个问题:为什么 VBA 没有加载所有发票详细信息

    除了上一个问题之外 我们在销售发票上仍然存在相同的加载失败问题 下面的 VBA Json 仍然仅加载一行或第一个产品详细信息行 而不是与表中该销售发票合作的所有产品行详细信息 我们希望下面的 VBA 能够根据参数加载发票详细信息 例如 如果
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然
  • 强制刷新工作表的“最后一个”单元格

    Pressing Ctrl End in Excel takes you to the bottom right most cell of the worksheet 如果删除最后的行或列并保存工作簿 最后一个单元格以及滚动条都会更新 我记
  • 使用 VBA 使用另一个表中的值更新访问表

    我在数据库中有两个表 表 1 和表 2 我正在尝试根据表 2 中的数据使用 VBA 代码更新表 1 Example Table 1 PartNo Price Description A 100 B 200 Bad C 300 Table 2
  • 消除多个 Elseif 语句

    我试图保持我的代码干净 特别是在用户表单中使用组合框 可能会有很多 if Elseif 语句 应该有一种更简单的方法 让一个组合框不再需要多页代码 是吗 现在如何完成的示例 Sub Example Dim Variable as Strin
  • 为什么在 Excel for Mac 中使用 VBA 的输入框不显示提示文本?

    我一直在构建一个使用 Excel 跟踪学生成绩的系统 我在 Windows 下编写了它 一切正常 但是当我在 Mac 版本的 Excel 最新版 本 15 24 我相信 上测试它时 InputBoxes 只显示输入数据的标题和文本框 不显示
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • 如何获取 Word 应用程序的 Hwnd/进程 ID,并将其设置为前台窗口

    我希望我的 Word 应用程序在自动化完成后进入前台 Excel 中的等效项很简单 Excel Application 对象有一个 Hwnd 属性 您可以将其与 Windows API 结合使用 SetForegroundWindow In
  • Excel ISNUMBER 函数与 IF 语句

    我有一个正在使用的 Excel 文件 有一个列包含数字和文本 有时只是其中之一 我正在尝试编写一个函数来扫描单元格的最左侧部分以查看它是否以数字开头 我以为我拥有它 但显然没有 这就是我所拥有的 IF ISNUMBER LEFT E8 1
  • 使用 FileSystemObject 读取和写入 csv 文件

    是否可以使用 VBA 中的 FileSystemObject 读取和写入 csv 文件 必然是 基本语法如 Set objFSO CreateObject scripting filesystemobject create a csv fi
  • 查找最后一列并按最后一列排序

    我需要 Excel 来检测我拥有的最后一列并对该列进行排序 我有一个宏 每次使用它时都会生成一个新列 因此我无法使用常量 Sub sortyness Dim sortdata A1 Cells LastRow LastColumn As R
  • 用于导出到 CSV/Excel 的数据 URI(无服务器端请求):浏览器支持/限制?

    以下问题 Javascript 或 Flash 导出至 CSV Excel https stackoverflow com questions 8150516 javascript or flash export to csv excel
  • 从单元格中具有多种颜色的单元格中提取字体颜色

    我有一个 Excel 工作表 我正在尝试将其存入 MySQL 数据库 我使用 VBA 将数据作为文本写入文件 然后将其上传到数据库 在工作表的单元格中 有一些已用颜色编码的字符串 颜色具有一定的含义 因此当我将值移入数据库时 我想保留它们
  • 将 CSV 导入 Excel - 自动“文本到列”和“插入表格”

    我想在 Excel 2010 上打开 CSV 逗号分隔 文件并自动将文本转换为列 然后选择所有活动单元格并插入带标题的表格 是否可以在我的功能区中添加一个按钮来为我完成这一切 我经常使用不同大小的 CSV 文件 我发现每次手动执行此操作有点
  • VBA删除列中的单元格并根据单元格的值左移?

    如果单元格为空 如何删除 B 列 和左移 中的单元格 下面是我所拥有的 但它给出了 应用程序定义或对象定义的错误 Sub DeleteCellShiftLeft For i 1000 To 1 Step 1 If Cells i B Val

随机推荐

  • 未找到名为“debug”的 KotlinJvmAndroidCompilation

    我正在尝试将我的项目更新到最后一个 gradle v6 2 2 但我遇到了下一个错误 A problem occurred configuring project app gt Failed to notify project evalua
  • 以编程方式为 Lotus Notes 创建约会

    我需要创建一个约会 日历条目 并将其自动分发给某些受邀者 我现在有两个问题 1 日历条目未出现在主席的日历上 我已经通过将主席添加为必需的与会者来解决此问题 这会向他们发送确认通知 但我想知道如何自动添加它 2 已向受邀者发送邀请 但无法确
  • python 检查html是否有效

    如何使用Python检查HTML代码的有效性 我需要关闭标签检查 并在标签参数中使用大括号 例如 a href xxx 和其他可能的验证 我可以使用哪些库 嗯 这并不完全是您想要的 但是为了验证我所工作的网站的 HTML 我要求 W3C 验
  • 模板类型推导失败(std::empty 作为谓词)

    我有一个向量向量 我想检查它们是否全部为空 使用标准库 我尝试过 include
  • 历史前进/后退按钮不适用于 Angular 2 路由器

    历史记录 推送状态 前进 后退按钮不适用于 Angular 2 路由器 我已经在 Chrome 和 Firefox 中对此进行了测试 前进按钮永远不会起作用 后退按钮仅起作用 2 个步骤 而 UI 不会根据后退按钮进行响应 我有以下代码 应
  • 通过存储在字符串中的名称调用方法而不使用反射 API?

    我知道 使用 Reflection API 我们可以通过存储在字符串中的名称来调用方法 但是 Reflection API 不能用于高性能应用程序 在我的应用程序中 方法将以非常高的速率被调用 所以 我不能使用Reflection API
  • VS Code Jupyter Notebook Markdown 显示字体

    Is there some way to modify the font in which the rendered markdown cell is displayed in VS Code s Jupyter Notebook I ha
  • ColdFusion 2016 上的 CGI.REDIRECT_URL 为空

    我正在将一个站点迁移到 Linux Apache 上的 ColdFusion 2016 但我们遇到的一个问题是CGI REDIRECT URL值为空 我检查了一下 以下是在 etc apache2 mod jk conf file JkEn
  • Assembly.CreateInstance 和安全性

    我正在考虑使用 C 按需编译代码的能力作为脚本语言的基础 我想知道 如何对正在执行的脚本进行沙箱处理 以便它们无法访问文件系统 网络等 基本上 我想要对正在运行的脚本进行限制权限 我采取的步骤 CompilerResults r CShar
  • 有没有办法使对象只能由访问特定方法的第一个线程使用?

    我想要一个可以由任何线程创建的对象 但是当线程调用时myObject use 它只能由该线程使用 直到myObject release 叫做 我不想强迫开发人员必须将此对象 类的所有方法调用包装在同步块中 我知道可以用来近似此功能 因为如果
  • 我可以阻止 mobile safari 在 iPod touch 或 iPhone 上自动旋转屏幕吗?

    我们有一个离线 Safari 应用程序 其 UI 专为垂直使用而设计 像素完美 我们希望无论用户如何旋转 iPod iPhone UI 都保持垂直 Safari 离线应用程序可以吗 这个问题与我可以阻止 mobile safari 在 iP
  • 在 PHP 中将字符串解析为数组

    我是 PHP 新手 找不到正确的答案 whatever array Test Blah echo parsed 2 This will be Blah 我想创建一个名为的变量 parsed其中包含 whatever的值 但作为有效的数组而不
  • R 中 Copula 包的 loadNamespace 错误

    我已经在 R 中创建了一个模型 我需要使用copula其中涉及使用 copula 包 我在完全更新的 MacBook Pro 上使用最新版本的 R 我可以安装 copula 包 但是当我尝试打开library copula 我收到以下错误
  • Java 中非阻塞 UDP I/O 与阻塞 UDP I/O

    非阻塞 TCP IPSocketChannels and SelectorNIO 帮助我用少量线程处理许多 TCP IP 连接 但是 UDP 怎么样 DatagramChannels 我必须承认我对UDP不是很熟悉 UDP 发送操作似乎不会
  • __attribute__((weak)) 和静态库

    我想在我的代码中引入一个弱符号 但是 当使用 a 文件时我无法理解它的行为 这是我的最小例子 文件a h void foo attribute weak 文件 a c include a h include
  • 在 jq 中“转置”对象

    我不确定 转置 在这里是否是正确的术语 但我希望使用jq转置一个二维对象 如下所示 name A keys k1 k2 k3 name B keys k2 k3 k4 我想把它改成 k1 A k2 A B k3 A B k4 A 我可以用以
  • UrlRewriteFilter:www 和 https 重定向

    我正在使用 Tuckey UrlRewriteFilter 强制用户转到我的网站的 www 和 https 版本 我的意思是接下来的 3 个 URL 必须重定向到https www myweb com http www myweb com
  • 当我更改路线时,Laravel ajax 搜索不起作用

    我目前面临 ajax 搜索问题 我认为这与路线有关 但我不确定出了什么问题 也许现在编码还为时过早 这有效 这不起作用
  • 将 HTML 表的 元素指定为 Marionette for Backbone.js 中的区域

    Problem Using a Backbone Marrionette Layout https github com derickbailey backbone marionette blob master docs marionett
  • Excel VBA 具有多个搜索条件并循环,直到找到所有不同的结果

    我对 VBA 非常陌生 并且截止日期非常短 因此如果我没有遵循所有论坛指南 我深表歉意 如果您能提供任何帮助 我将不胜感激 Goal 在 Sheet1 中搜索关键字 活动 站点地址 描述 所有者 估价 子类型 和 DATE B 一旦找到关键