0

我有 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 

我需要一个带有宏的函数/论坛,我可以在其中填充工作表 2 中的用户 ID 值,其中工作表 2 电子邮件 = 工作表 1 电子邮件

这将在工作表 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,但查询在 MySQL DB 上需要很长时间才能得到结果......无论如何,下面是我在 DB 中使用的 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 宏..

提前致谢。

4

1 回答 1

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
于 2012-04-10T00:39:03.343 回答