首页 > 解决方案 > 使用 vlookup 结果更新列数据的宏

问题描述

我有两个电子表格,Sheet1 和 Sheet2。

Sheet2 将粘贴从 B 列中具有唯一 ID 的第三方收到的大量信息,我目前正在使用 vlookup,但电子表格变得非常大并且需要很长时间才能加载和保存。

在工作表 1 中,我想使用宏插入与 B 列中唯一 ID 匹配的 MACRO 的 vlookup 结果,并显示 Sheet2 中 c 列的值。

希望这是有道理的,谢谢!!

尝试了很多:

Sub UPDATE()
    Dim s1 As Worksheet, s2 As Worksheet
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")
    v1 = s1.Range("A2")
    v2 = s1.Range("B2")
    s2.Activate
    For Each r In Intersect(ActiveSheet.UsedRange, Range("B:B"))
        If r.Value = v1 Then
            r.Offset(0, 1).Value = v2
        End If
    Next
End Sub

标签: vbaexcel

解决方案


如果您可以在问题字段中发布非问题,那么我可以在答案字段中发布非答案吗?

你现在需要的帮助不是你有点,有点,但不是真正要求的帮助。你只是还不知道而已。

如果我停止在字里行间判断您的意图,而忽略您对真正有用的评论的侮辱性回应。如果我花时间和精力专注于您的问题,并在语义上将您的需求转化为问题。那么你仍然不会得到你所要求的。

我会示范。

带有 2 张纸的大型工作簿加载并缓慢保存。大概是因为它的大小和众多的 vlookup 功能。为了提高性能,您希望工作表 1 上的宏在工作表 2 上“插入来自 MACRO 的 vlookup 结果”。

这可能会让你大吃一惊。如果一个公式已经优化,那么用另一个公式替换它不会提高性能。即使该公式是一个 vlookup,即使该 vlookup 是由 MACRO 放置的。实际上,它会更慢,因为您仍在计算 vlookup,现在您已经添加了在工作表 1 上运行宏和在工作表 2 上运行宏的开销。在我看来,您可能会通过更改您的计算设置保存前计算,打开时不刷新或计算。这不会提高您的节省时间,但打开和处理文档应该更快。

这是一个你没有要求的答案,但它很弱,而且对于深入根基并没有多大作用。我真的很想帮忙,所以我不会停下来,我会深入研究您共享的代码,并专注于您认为问题所在的部分。哦,你没有说他们可能在哪里。没什么大不了的,这是一个简短的块,我几乎是 VBA 识字,我敢肯定,当我在没有访问测试数据或运行时环境的情况下逐步通过它时,修复错误代码不会有任何问题。小菜一碟!

嗯……你想做什么?我想我明白你说你想要什么;但我不明白你实际上是怎么做的。我会用你给我的东西工作,但它并不多,所以我希望你不要抱有很高的期望。

表 1 和 2 已设置。2 被激活,这个 sub 开始使用它;因此,这必须是工作表 2 MACRO。这如何与工作表 1 宏交互?你确定那个没有问题?

Hrmmmm,我读过一点关于十字路口的速度。如果我没记错的话,它应该是相当快的,这可能是一个不错的选择。我必须记住这一点。呃,B:B,整个专栏?您通常可以通过缩小约束来获得性能,但在这种情况下我不确定。也许交叉点是短路每一行,我应该研究一下。

我必须假设 v1 和 v2 是变体,因为它们没有被声明,也没有提供关于选项显式或公共范围变量的信息。您必须小心变体,因为它们可以更改类型并导致您整天抛出错误。特别是如果您的代码不够清晰,无法一眼识别它们。案例和要点,您分配 2 个变体等于一个范围,这是故意的还是您忘记了单词集?再往下,您将范围的值分配给相同的变体,让我猜测您的意图。

您的数据是否使用字符串?如果是这样,那么 value2 应该比 value 快。

我对您的循环感到困惑,我不知道您为什么拥有它,也不知道为什么要这样做。您说您在 B 中粘贴了 vlookup 结果 - 所以您阅读它是有道理的。但是为什么要循环呢?您计算了一个有效范围,为什么不一步将 if 写入数组而不是可能数百或数千?你为什么要写到第 2 页的 C 列?我本来期望sheet1。

等等,就这?这就是你的代码吗?它们一定是别的东西,因为我无法从你所在的地方到达你说你想去的地方,而不像你的个人代码编写服务一样行事。

就这样。详细地。真正的尝试给你你所要求的。现在我已经花了 2 个多小时伸出援手,你离你的目标还有多远?

应该不多吧。

不出所料,最有用的信息,也就是让你最接近目标的信息,在第一条评论中提供给你,它反映了你以你所做的方式做出的回应很糟糕。

从我的角度来看,您似乎还没有弄清楚您需要知道什么。我将从显式选项开始。然后在工作表之间传输数据。然后将范围与数组一起使用。这应该使您达到我们可以真正帮助您的程度。这是 3 个主题,其中 1 个是 20 秒阅读。

祝你好运,并尝试失去态度。


推荐阅读