【问题标题】:Excel "Join" FunctionExcel“加入”功能
【发布时间】:2009-08-13 14:31:07
【问题描述】:

我需要根据每个工作表中的 ID 列将两个 Excel 工作表中的行组合成一个长行。实际上,我想在两个工作表上执行 SQL JOIN 的等效操作以生成一个组合工作表。

我可以为第一个工作表中的一行获取一个 Range 对象,然后使用 ID 列为第二个工作表中的相应行获取一个 Range 对象。现在我需要将它们组合起来。

我知道 Merge 和 Union VBA 方法,但我认为它们不能满足我的需要。

如何组合这两个范围对象?

例如: 工作表第 1 行:a、b、c 工作表第 2 行:d、e、f

组合行:a、b、c、d、e、f

【问题讨论】:

  • 您是否考虑过迁移到 Access? Excel 不是数据库...

标签: vba excel


【解决方案1】:

您能否在工作表 1 的 d 列中放置一个公式,以便在工作表 2 上进行 vlookup 以找到匹配的 ID 并返回值。然后对其他列 e 和 f 重复此操作?

【讨论】:

    【解决方案2】:

    Robin Day 解决方案的替代方法是使用 Match() 获取行位置,然后使用 Index() 检索数据。如果您有大量数据,这应该会更快。这是假设 1:1 的关系。函数的形式为:

    =MATCH(RowID, OtherTable, 0)

    =INDEX(OtherTable, MATCH(), ColumnPosition)

    【讨论】:

      【解决方案3】:

      如果您的 2 个工作表位于同一个已关闭的工作簿中,我认为您最终可以使用 adodb 对它们使用 SQL 查询。

      dim cnn As ADODB.Connection
      dim rst As ADODB.Recordset
      strProv = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                          SourceFile & ";Extended Properties=Excel 8.0;"
      cnn.Open strProv
      Set rst = New ADODB.Recordset
      strSql = "select * from [Sheet1$]"
      rst.Open strSql, cnn
      rngDestRange.CopyFromRecordset rst
      

      我一直在使用这种技术,但一次只用于一张桌子。所以我不能 100% 确定是否支持加入,但您可以尝试一下。

      【讨论】:

        【解决方案4】:

        看看VLOOKUP 函数,FALSE 作为它的最后一个参数。它完全符合您的要求。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-23
          • 1970-01-01
          • 2011-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多