我有2个Excel 2007工作表。
Excel工作表1 :(如下所示)3列在工作表1中很重要
userid name email
100 sam sam@sam.com
200 pete pete@pete.com
300 Bum Bum@Bum.com
400 Harry Harry@Harry.com
工作表2 :(如下所示)(user_id列为空)
userid name email
sam sam@sam.com
Harry Harry@Harry.com
pete pete@pete.com
Bum Bum@Bum.com
我需要一个带宏的函数/ forumla,我可以在表2中填写userid的值 sheet2 email = sheet1 email
的位置将在工作表2中得到以下结果
userid name email
100 sam sam@sam.com
400 Harry Harry@Harry.com
200 pete pete@pete.com
300 Bum Bum@Bum.com
我知道SQL,但查询需要很长时间才能获得结果...... 无论如何,下面是我在数据库中使用的SQL查询。
UPDATE `j_A`
SET user_id = ( SELECT j_B.id
FROM j_B
WHERE j_B.email = j_A.email)
WHERE EXISTS
( SELECT j_B.id
FROM j_B
WHERE j_B.email = j_A.email);
如果两个电子邮件(列)值都匹配,需要宏/函数/公式来替换一个Excel工作表的值,如果有人cud帮助我创建宏/公式/功能等... 没有太多知识在Excel宏中创建公式..
提前致谢。
答案 0 :(得分:0)
根据您的示例,请尝试:
Sub HTH
With Sheet2.Range("A2:A" & Sheet2.Cells(Rows.Count, 2).End(xlUp).Row)
.Formula = Replace("=LOOKUP(2,1/(Sheet1!C$2:C$x=C2)/(Sheet1!B$2:B$x=B2),Sheet1!A$2:A$x)", _
"x", (Sheet1.UsedRange.Rows.Count - 1))
.Value = .Value
End With
End Sub
更新SQL查询可能会更有效。
要打开VBA编辑器,请按Alt-F11。
下面是VBA编辑器中代码示例的截图,点击绿色播放按钮运行代码:
根据您可能想要尝试此替代程序的附加信息:
Sub HTH2()
Dim vSource As Variant
Dim vOutput As Variant
Dim sKey As String
vSource = Sheet1.UsedRange.Resize(, 3).Value
vOutput = Sheet2.UsedRange.Resize(, 3).Value
With CreateObject("Scripting.Dictionary")
For lloop = 1 To UBound(vSource, 1)
.Add vSource(lloop, 2) & ":" & vSource(lloop, 3), vSource(lloop, 1)
Next lloop
For lloop = 1 To UBound(vOutput, 1)
sKey = vOutput(lloop, 2) & ":" & vOutput(lloop, 3)
If .exists(sKey) Then
vOutput(lloop, 1) = .Item(sKey)
Else
vOutput(lloop, 1) = ""
End If
Next lloop
End With
Sheet2.Range("A1").Resize(UBound(vOutput, 1), 1).Value = vOutput
End Sub