VBA:VLookUp 多个结果

2024-01-09

我需要一些代码方面的帮助。

我正在尝试执行 VLookup,并将数据显示在 O、P 和 Q 列中。

我想做的是循环遍历sheet("Global") A列,从第3行开始,直到最后使用的行。它需要匹配 A 列中从第 2 行开始的工作表(“详细信息”)中的数据。

因此,当它找到匹配值时,它将显示“全局”O2 中的“详细信息”C2、“全局”P2 中的“详细信息”I2 和“全局”Q2 中的“详细信息”G2 的结果。

然后它需要循环“全局”匹配并复制所有数据。如果未找到匹配项,则显示“NA!”。

我需要它做的最后一件事是删除 Global 中未找到匹配项的所有行。

我下面的代码满足了我的需要,唯一的问题是它非常慢,需要几分钟才能循环 800 行,有时甚至更长!

有没有另一种方法可以做到这一点,运行得更流畅、更快?

任何帮助表示赞赏!

谢谢

`Private Sub btnVlookUp_Click()
Dim i, j, lastG, lastD As Long

' find last row
lastG = Sheets("Global").Cells(Rows.Count, "B").End(xlUp).Row
lastD = Sheets("Details").Cells(Rows.Count, "A").End(xlUp).Row

' loop over values in "Global"
For i = 3 To lastG
    lookupVal = Sheets("Global").Cells(i, "B") ' value to find

    ' loop over values in "details"
    For j = 2 To lastD
        currVal = Sheets("Details").Cells(j, "A")

        If lookupVal = currVal Then
            Sheets("Global").Cells(i, "O") = Sheets("Details").Cells(j, "C")
            Sheets("Global").Cells(i, "P") = Sheets("Details").Cells(j, "I")
            Sheets("Global").Cells(i, "Q") = Sheets("Details").Cells(j, "G")
            ' mark the row
            Sheets("Details").Cells(j, "Z") = "marked"

        End If
    Next j
Next i

' loop over rows in "details" and delete rows which have not been marked
For j = 2 To lastD
    If Sheets("Details").Cells(j, "Z") <> "marked" Then
        ' delete unmarked rows
        Sheets("Details").Cells(j, "A").EntireRow.Delete
        If Sheets("Details").Cells(j, "B") <> "" Then
            j = j - 1 ' revert iterator so it doesn't skip rows
        End If
    Else:
        ' remove the mark
        Sheets("Details").Cells(j, "Z") = ""
    End If
Next j
End Sub`

根据这里的建议以及大量的试验和错误,我成功地调整了我的代码。

我对 600 多条记录进行了测试,它在几秒钟内运行,而在以前的代码中需要几分钟的时间。

如果您能看到执行以下代码的更好方法,请告诉我,我仍在学习 VBA,因此所有帮助我都可以得到更好的帮助!

感谢所有的支持!!!!!!!!

Private Sub btnVlookUp_Click()
Dim i, j, lastG, lastD As Long
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .CutCopyMode = False
End With
' find last row
lastG = Sheets("Global").Cells(Rows.Count, "B").End(xlUp).Row
lastD = Sheets("Details").Cells(Rows.Count, "A").End(xlUp).Row

' loop over values in "Global"
For i = 2 To lastG
    lookupVal = Sheets("Global").Cells(i, "B") ' value to find

    ' loop over values in "details"
    For j = 2 To lastD
        currVal = Sheets("Details").Cells(j, "A")

        If lookupVal = currVal Then
            Sheets("Global").Cells(i, "O") = Sheets("Details").Cells(j, "C")
            Sheets("Global").Cells(i, "P") = Sheets("Details").Cells(j, "I")
            Sheets("Global").Cells(i, "Q") = Sheets("Details").Cells(j, "G")
            ' mark the row
            Sheets("Details").Cells(j, "Z") = "marked"
            Sheets("Details").Cells(1, "Z") = "marked"
        Exit For
        End If
    Next j
Next i

On Error Resume Next
Sheets("Details").Columns("Z").SpecialCells(xlBlanks).EntireRow.Delete
Sheets("Details").Columns("Z").ClearContents

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .CutCopyMode = True
End With

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

VBA:VLookUp 多个结果 的相关文章

  • 无法在我的抓取工具中设置超时选项以防止无限循环

    我已经使用 IE 在 vba 中编写了一个脚本 在其搜索框中的网页中启动搜索 通过点击搜索按钮根据搜索填充结果 网页加载它是searchbox几秒钟后它就会打开 但是 我的下面的脚本可以处理这个障碍并以正确的方式执行搜索 现在 我有一个稍微
  • xlwings: 删除一个列 | Excel 中的行

    如何删除 Excel 中的一行 wb xw Book Shipment xlsx wb sheets Page1 1 range 1 1 clear clear 用于删除内容 我想删除该行 我很惊讶 clear 函数有效 但 delete
  • 在 Excel 表格中选择多列的代码

    我是 Excel VBA 新手 我需要修改我的代码 以便我能够进一步进行 我想在 Excel 表格中选择多个表格列 这是我的代码 Dim ws As Worksheet Dim tbl As ListObject Set ws Sheets
  • VBA 中的多线程

    这里有人知道如何让VBA运行多线程吗 我正在使用 Excel 无法用 VBA 本地完成 VBA 构建在单线程单元中 获得多个线程的唯一方法是使用 VBA 之外的其他具有 COM 接口的东西构建 DLL 并从 VBA 调用它 信息 OLE 线
  • 导出到excel时如何显示前导零?

    我正在通过更改内容类型来创建 Excel 报告 Response ContentType application vnd ms excel 我有包含前导零的值 问题是导出到 Excel 时缺少前导零 e g 000123 gt 123 我知
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • 我可以获取VBA代码中的注释文本吗

    可以说我有以下内容 Public Sub Information TEST End Sub 有没有办法得到 TEST 结果 不知何故通过VBA 例如 在 PHP 中 有一个获取注释的好方法 这里有什么想法吗 编辑 应该有办法 因为像 MZ
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA
  • 两个日期之间的小时数在 Excel 中不起作用

    根据要求 我提供了一张简化的屏幕截图来说明该问题 如您所见 我减去了两个日期并将其格式化为 h mm ss 为什么这不能提供两个日期之间经过的总小时数 有一个更好的方法吗 下面有一个很好的答案 但我试图弄清楚为什么按照此屏幕截图中所示的方式
  • 标志状态的 VBA 替换

    根据文档 Outlook 中的 MailItem FlagStatus 属性是已弃用 https msdn microsoft com en us library microsoft office interop outlook maili
  • C# 无法将欧元符号打印到文件中(使用 Excel 打开时)

    我在使用 Web api 控制器的 get 方法时遇到问题 此方法返回一个 HttpResponseMessage 对象 该对象具有带有 csv 文件的 HttpContent 其中包含欧元符号 当该方法返回文件时 不会打印欧元符号 该方法
  • SQL Excel VBA 运行时错误 3709 无效连接

    这是我的第一个问题 欢迎提出建设性的批评 我正在尝试从 Excel VBA 查询 Access 数据库并将返回信息放入 Excel 范围中 我收到此错误 错误消息 运行时错误 3709 连接无法用于 执行此操作 在此情况下它已关闭或无效 语
  • Excel 2003 中的 IFERROR

    我通过阅读几个线程了解到IFERROR在 Excel 2003 中由IF ISERROR 我尝试从 Excel 2007 复制的代码是 IFERROR A1 我知道必须有一个简单的解决方案将其转换为IF ISERROR 但我没有任何效果 意
  • 在 Excel 中使用 VBA 设置图像透明度

    有没有办法使用 VBA 脚本对图像应用一些透明度 我录制了一个 宏 但似乎没有录制艺术效果 我已经找到了如何制作形状 但没有找到图像 这需要几个步骤 将自选图形 如矩形 放置在工作表上 使用以下方法将您的实际图片嵌入矩形中 ShapeRan
  • 使用 VBScript 在日期字段值上选择错误的数据

    我有一张包含以下数据的表 现在 Excel 共有 36 个任务 每个任务有 4 列 第一个任务 即 Task1 名称将始终从 L 列开始 144 列描述了 36 个任务 现在我们需要按行进行检查 并需要检查 TNStart 开始日期 你们能
  • 使用 split 函数到数组中会导致编译错误:无法分配给数组

    我正在尝试使用split 函数根据给定名称字符串中的空格拆分名称 当尝试编译我在下面编写的代码时 出现编译错误 无法分配给数组 我几乎从这里复制了微软的示例 https support microsoft com en us kb 2662
  • 在 VBA 中捕获 shell 命令的输出值?

    发现这个功能http www cpearson com excel ShellAndWait aspx http www cpearson com excel ShellAndWait aspx 但我还需要捕获 shell 的输出 有什么代

随机推荐

  • 使用 Spring 的 @RequestBody 并随后读取 HttpServletRequest.getInputStream()

    我正在使用 Spring 将请求的 JSON POST 数据映射到一个对象中 RequestBody注释和MappingJacksonHttpMessageConverter 但之后我想读取数据String表单进行一些额外的身份验证 但是当
  • 在 Haskell 代数数据类型中进行选择

    当键入X定义为 data X X sVal String I iVal Int B bVal Bool 我想要Int里面一个X值 如果有则为一 否则为零 returnInt X gt Int 我如何确定是哪种类型X论据returnInt i
  • 使视频视图中的视频加载速度更快

    我通过 URL 在视频视图中播放视频 一切正常 甚至视频也可以播放 但唯一的问题是视频需要近 10 秒才能开始播放 这可能会让用户感到厌烦 我尝试了不同的 URL 结果是一样的 视频是 360p 时长 6 秒 是默认的媒体播放器速度慢吗 我
  • 输入文本以跨越 Selenium/Python

    我尝试输入要跨越的文本来代替 示例文本 我正在使用 Selenium Python 但无法使用 send keys 方法来做到这一点 您还有其他想法吗 我该怎么做 我附上了 HTML 屏幕截图和应用程序屏幕截图 我尝试使用该代码 但不起作用
  • 引用 Perl 散列中的散列键链

    我有一个像这样存储数据的哈希值 our deviceSettings BB gt EUTRA gt DL gt CPC gt NORM PLCI gt CID gt 88 ULCPc gt NORM UL gt REFSig gt DSSH
  • KSQLDB Emit Final 不返回任何值

    我在 ksqldb 上进行了以下查询 如果我使用 EMIT CHANGES 它确实可以工作 但如果将其更改为 EMIT FINAL 它在窗口结束后不会返回任何值 CREATE TABLE sspc 3536660 v4 as select
  • 使用 Chunks 和 MultipartFileupload 进行文件上传

    使用块上传和 MultipartFile 上传是否相同 有什么区别 我尝试过使用 Multipartfile 上传 我的要求是上传一个50MB的appx文件到服务器而不让用户等待很长时间 大约需要 2 分钟 Chunks 和 Multipa
  • 使用 Mechanize 获取 JavaScript 变量

    我想从中获取一个 JavaScript 变量https admin booking com hotel hoteladmin https admin booking com hotel hoteladmin in head gt scrip
  • IntelliJ 相当于 Eclipse TAB

    我正在尝试从 Eclipse 迁移到 IDEA 在 Eclipse 中 当我在输入函数参数时按 TAB 键以及在其他上下文情况下 它会将光标转发到我可以输入的下一个位置 下一个参数 分号的行尾等 我经常使用它 有没有办法在IDEA中获得类似
  • 如何显示部分标题并在悬停时向上滑动整个标题

    我有以下小提琴 http jsfiddle net nyube8aw http jsfiddle net nyube8aw HTML div class box div class caption h3 This is Image One
  • Bootstrap 3 带有两行标题的选项卡

    我正在使用 bootstrap 3 创建选项卡式视图 一些选项卡的标题很长 我使用换行符将它们显示为两行 如下所示 ul class nav nav tabs li class active a href Home a li li a hr
  • 升级到 gradle 5.0 后,Android 数据绑定“尽管已注册,但缺少导入表达式”

    将 Android studio 升级到 3 4 后 将 Android Gradle 插件升级到 3 4 将 gradle 升级到 5 1 1 我收到如下数据绑定错误 我已确保清理项目并重建 我已清除缓存并重新启动 AS 升级之前没有出现
  • 库斯托 |添加列以显示总数的百分比

    我见过其他几个与此类似的问题 但每个问题都略有不同 并且没有一个提供我能够适应我的情况的答案 我有一个这样的表 let T datatable Val1 string Val2 string Val3 bool false false Ye
  • 是否可以在 DOM 加载之前阻止提交按钮提交?

    我正在使用 jquery 验证插件进行表单验证 它工作得很好 但是如果 DOM 未完全加载并且您单击提交按钮 则文档将忽略验证并转到表单 action 属性中指定的页面 是否可以在 DOM 加载之前阻止提交按钮提交 如果您像这样生成提交按钮
  • javascript - 如何四舍五入到最接近的整数[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 JavaScript 中四舍五入为整数 https stackoverflow com questions 6968042 how can i round of to whole number
  • IE8 中的 FB 共享按钮 Javascript 错误

    我仅在 IE8 中收到 FB 共享按钮的 JavaScript 错误 这是在旧的共享按钮被禁用并随后重新启用后开始的 请参阅Facebook分享按钮 它正式死亡了吗 https stackoverflow com questions 115
  • 如何撤消 svn 更新?

    我修改了工作目录中的文件并进行了 svn 更新 更新已执行 没有冲突 我希望能够将工作目录内容恢复到 svn 更新之前的状态 原因是因为我维护一个与共享 svn 存储库并行的本地 git 存储库 我忘记在进行 svn 更新之前 git co
  • 提取2个字符串之间的子字符串

    这是我的代码段 set CMS SQL cms91 to 913 json cms913 to 9132 json cms9132 to 9133 json cms9133 to 10100 json set CMS FROM VERSIO
  • FirstResponder 缺少重做:

    为什么我的 InterfaceBuilder 文件中的 FirstResponder 丢失了redo 连接 在Received Actions list undo 存在 但是redo 没有 我该如何解决它 这是一个错误 解决方法是将其放入某
  • VBA:VLookUp 多个结果

    我需要一些代码方面的帮助 我正在尝试执行 VLookup 并将数据显示在 O P 和 Q 列中 我想做的是循环遍历sheet Global A列 从第3行开始 直到最后使用的行 它需要匹配 A 列中从第 2 行开始的工作表 详细信息 中的数