【发布时间】:2015-11-13 00:41:56
【问题描述】:
我会切入正题:
Excel 2010
我有Sheet1 的订单列表。客户名称在F 列中。
Sheet2 包含客户列表,在A 列中仅包含他们的姓名。
我想运行一个宏/vlookup/索引(无论什么都行)来遍历Sheet1 中的数千个订单列表,并将客户名称来自@987654327 的行(整行)复制到Sheet3 @ 火柴。
Sheet1 有 10 列和大约 10000 行。
Sheet2 仅在 A 列中有大约 50 行。
我尝试了几种类型的宏并进行了适当的搜索,但找不到任何可行的方法。我会粘贴我所拥有的,但这只会令人尴尬。
我可能会补充一点,我需要每周运行一次,并且订单列表会发生变化。名单也可以,但频率很低。
你能帮忙吗? :)
编辑:从目前的答案中我可以看出我需要使用 VBA 脚本。我将不胜感激,因为我对这种语言几乎一无所知。我应该能够管理修改脚本以满足我的需要,但我需要一些东西来开始。也许这个伪代码会让你们好人更容易:
从 Sheet2 中的 A1:A50 读取数据
将 F1、Sheet1 与 A1:A50、Sheet2 进行比较
如果不匹配 - 继续 F2
如果匹配 - 将整行复制到 Sheet3 中的 A1
(...)
比较 Fx、Sheet1 与 A1:A50、Sheet2
如果不匹配 - 继续 Fx+1
如果匹配 - 将整行复制到 Sheet3 中的 A(n+1) [n=匹配数]
继续将 Sheet1 中的行与 A1:A50、Sheet2 进行比较并返回 An、Sheet3 中的下一个匹配项
到目前为止,我有类似的东西,但问题是,如果 Sheet2 中的行号与 Sheet1 中的行号匹配,它仅将数据返回给 Sheet3。此外,它会将其返回给 Sheet3,行号与 Sheet1 匹配。所以我最终在 Sheet3 的第 45 行得到一个结果,而不是在第 1-20 行得到大约 20 个结果。
Sub asd()
For Counter = 1 To Sheets(1).UsedRange.Rows.Count
If Sheets(1).Range("F" & Counter).Value = Sheets(2).Range("A" & Counter).Value Then
Sheets(3).Range("C" & (Counter)).Value = Sheets(1).Range("A" & Counter).Value
Sheets(3).Range("D" & (Counter)).Value = Sheets(1).Range("B" & Counter).Value
End If
Next Counter
End Sub
谢谢你, 帕特
【问题讨论】:
-
创建 Sheet1 的副本并将其命名为“Orders”。在“订单”表的新列(第 11 列)中,使用匹配公式查看 F 列何时与 sheet2 中的 A 列匹配。然后过滤“订单”表并删除数据中的所有#NA,您就完成了。
-
感谢 rwilson 的回复。我有一种感觉,它不会像我希望的那样简单,每周重复使用。特别是考虑到我想分享我的同事使用的方法/宏。再次感谢。
-
我只是为您提供可以在 Excel 中完成该过程的步骤。使用这些步骤、宏记录器和一些工作,您应该能够做到这一点。 SO 上没有人比您更了解您的数据。