【发布时间】:2020-02-12 18:20:01
【问题描述】:
事先请注意,我刚刚开始使用 VBA,在此之前我几乎没有编码经验。
我有两张纸:
- 公开
- 联系人
A 列上有一个参数肯定在“联系人”表上,但可能在或不在“公共”表的 A 列上。
我正在做的是:
检查参数contacts.A2是否在public.A2上。
如果是,我需要按照确切的顺序复制列:
公开:A、C、G。 联系人:E、F。
我在网上找到了以下代码,我正在对其进行一些修改,但我卡住了。
Sub match()
Dim I, total, frow As Integer
Dim found As Range
total = Sheets("public").Range("A" & Rows.Count).End(xlUp).Row
'MsgBox (total) '(verifica se a contagem está ok)
For I = 2 To total
pesquisa = Worksheets("public").Range("A" & I).Value
Set found = Sheets("contacts").Columns("A:A").Find(what:=pesquisa) 'finds a match
If found Is Nothing Then
Worksheets("result").Range("W" & I).Value = "NO MATCH"
Else
frow = Sheets("contacts").Columns("A:A").Find(what:=pesquisa).Row
Worksheets("result").Range("A" & I).Value = Worksheets("public").Range("A" & frow).Value
Worksheets("result").Range("B" & I).Value = Worksheets("public").Range("C" & frow).Value
Worksheets("result").Range("C" & I).Value = Worksheets("public").Range("G" & frow).Value
Worksheets("result").Range("D" & I).Value = Worksheets("contacts").Range("F" & frow).Value
Worksheets("result").Range("E" & I).Value = Worksheets("contacts").Range("G" & frow).Value
End If
Next I
End Sub
我的期望:
- 代码忽略第 1 行,因为它们是标题;
- 消除上面的 de IF,因为我不需要“NO MATCH”
- 到要根据 A 列按升序排列的结果列表。
你能帮帮我吗?
经过编辑以包含数据样本和预期结果:
我相信我可以通过上面的图片简化我的需求。我想在公共表上检查一个客户,从联系人表中获取经理联系人(电子邮件),并在结果表上创建一个包含分支、经理和这两个电子邮件的列表。
创建这些图像时,我意识到我忘记考虑第二个参数(经理),因为一个分支上可能有多个经理。所以这是另一个需要考虑的参数。
`
【问题讨论】:
-
你能上传一个输入样本和你的预期输出吗?
-
de parameters vfrom column a be contacts是否可以在contacts上出现两次?
-
@DavidGarcíaBodego 已按要求编辑以包含。
-
@JvdV 是的。我忘了考虑一个分支机构可以有多个经理的事实。请参阅我对原始帖子的最后编辑,因为我澄清了这件事。
-
那么您的结果会如何。这让我有点困惑。因为要考虑的第二个参数是经理。根据您的解释,我将遍历
contacts以查看public上是否存在分支和经理的组合。如果存在,您的结果将显示来自contacts的 A、B、C 和 D 列,这与您上面的整个问题有很大不同。
标签: excel vba list loops paste