用vlookup结果更新列数据的宏



我有两张电子表格,Sheet1&表2.

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

在工作表1中,我想使用一个宏来插入与B列中的唯一ID匹配的macro的vlookup结果,并显示工作表2中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

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

你现在需要的帮助不是你想要的,但不是真正需要的。你只是还不知道。

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

我会示范的。

包含两张工作表的大型工作簿加载和保存速度较慢。大概是因为它的大小和众多的vloookup功能。为了提高性能,您希望工作表1上的宏在工作表2上"插入macro的vlookup结果"。

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

这是一个你没有要求的答案,但它很弱,对找到根源没有多大帮助。我真的在努力帮助你,所以我不会停止。我会仔细阅读你分享的代码,并专注于你认为问题所在的部分。哦,你没有说它们可能在哪里。没什么大不了的,这是一个很短的块,而且我几乎精通VBA,我相信在没有访问测试数据或运行时环境的情况下,当我在脑海中逐步处理有缺陷的代码时,我不会有任何问题。小菜一碟!

嗯…你想干什么?我想我理解你所说的你想要的;但我不知道你是怎么做的。我会按照你给我的来做,但不多,所以我希望你不要抱有太高的期望。

已设置第1张和第2张。2被激活,并且该子开始与它一起工作;因此,这一定是第2张MACRO。这是如何与图纸1宏交互的?你确定那个没有问题吗?

嗯,我读过一些关于十字路口速度的文章。如果我没有记错的话,它应该很快,这可能是一个不错的选择。我必须记住这一点。呃,B:B,整列?您通常可以通过缩小限制来获得性能,但在这种情况下我不能确定。也许十字路口是一个短路的每一排,我应该研究一下。

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

您的数据使用字符串吗?如果是,则value2应该比value快。

我对你的循环感到困惑。我不知道你为什么有它,也不知道为什么你要做你所做的。你说你有粘贴在B中的vlookup结果,所以你读它是有道理的。但为什么在循环中?您计算了一个有效范围,为什么不在一步中将if写入数组,而不是可能的数百或数千?你为什么在第二张的C栏上写字?我早就料到了。

等等,就这样?这就是你的全部代码?它们一定是其他的东西,因为如果不表现得像你的个人代码编写服务,我就无法从你现在的位置达到你说的你想达到的位置。

就这样。详细地说。真诚地尝试给你想要的。既然我花了两个多小时伸出援手,你离目标还有多远?

可能不多。

不出所料,最有帮助的信息是在第一条评论中提供给你的,它会让你最接近你的目标,它反映出你的反应很差。

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

祝你好运,尽量不要失去这种态度。

最新更新