1

这是我的困境:

我有 2 张 excel 表。

- One is a target sheet with already existing information
- One is a source sheet

我需要将源表列 C 中使用的单元格与目标表列 A 使用的单元格匹配,并将每行 3 个单元格从源复制到目标(到相邻行)。

因此,假设我在源表 C 列中的一个单元格中有“TESTUSER 测试”,并且在目标表列 A 的某个单元格中的某处有相同的名称。从源表中名称所在的行,我需要复制将 A、B、C 列单元格(仅来自该行)数据到目标表的名称在 A 列中的行,到 C、D、E 列。需要对源表列 C 中的每个名称执行相同的操作。

我已经设法使用“For each”方法从两张表中获取所需的值,但我不知道如何匹配数据并基于此进行复制。

4

2 回答 2

0

使用 Excel 公式会更容易吗?假设您的源工作表名为“Sheet1”,请将此公式粘贴到目标工作表的 C 列中:

=IF(ISERROR(MATCH("TESTUSER test",Sheet1!C:C, 0)), "No Match", INDIRECT(ADDRESS(MATCH("TESTUSER test",Sheet1!C:C, 0), 1,,, "Sheet1")))

这为您提供了 Sheet1 A 列中的值(请参见公式中某处的“1”)。然后将其复制到目标工作表的 D 列中:

=IF(ISERROR(MATCH("TESTUSER test",Sheet1!C:C, 0)), "No Match", INDIRECT(ADDRESS(MATCH("TESTUSER test",Sheet1!C:C, 0), 2,,, "Sheet1")))

并将其放入 E 列:

=IF(ISERROR(MATCH("TESTUSER test",Sheet1!C:C, 0)), "No Match", INDIRECT(ADDRESS(MATCH("TESTUSER test",Sheet1!C:C, 0), 3,,, "Sheet1")))

公式中的唯一区别是“1”、“2”和“3”,对应于 A、B 和 C 列(在本例中为 Sheet1)。

(答案与这个问题的答案惊人地相似: Excel: Check if Cell value exists in Column, and then get the value of the NEXT Cell

于 2012-10-16T13:49:59.823 回答
0

“正确”的方式可能涉及 ADO/SQL,但由于您有工作For Each循环,您可以使用字典将索引/行号存储在名称键下的 Src 中,如果在该字典中找到名称,则更新 Tgt。在代码中:

  Const cnSKI = 2  ' Src Key Index
  Const cnTKI = 0  ' Tgt Key Index
  Const cnTUO = 2  ' Tgt Update Offset
  Const cnFTC = 2  ' Fields To Copy

  Dim aoaSrc : aoaSrc = Array( _
      Array("a", "b", "A1", "NotInTgt") _
    , Array("c", "d", "a1", "UpdInTgt") _
  )
  Dim aoaTgt : aoaTgt = Array( _
      Array("B1", "NotInSrc", "x", "x", "xx") _
    , Array("a1", "UpdInTgt", "?", "?", "??") _
  )
  Dim dicSrc : Set dicSrc = CreateObject("Scripting.Dictionary")
  Dim i
  For i = 0 To UBound(aoaSrc)
      dicSrc(aoaSrc(i)(cnSKI)) = i
  Next
  dumpAOA "Src", aoaSrc
  dumpDic "Src dic", dicSrc
  dumpAOA "Tgt", aoaTgt
  For i = 0 To UBound(aoaTgt)
      If dicSrc.Exists(aoaTgt(i)(cnTKI)) Then
         Dim r : r = dicSrc(aoaTgt(i)(cnTKI))
         Dim c
         For c = 0 To cnFTC
             aoaTgt(i)(c + cnTUO) = aoaSrc(r)(c)
         Next
      End If
  Next
  dumpAOA "Tgt (updated)", aoaTgt

Sub dumpAOA(sTitle, aoaX)
  WScript.Echo "----", sTitle
  Dim a
  For Each a In aoaX
      WScript.Echo "", Join(a)
  Next
End Sub

Sub dumpDic(sTitle, dicX)
  WScript.Echo "----", sTitle
  Dim k
  For Each k In dicX.Keys
      WScript.Echo "", k, dicX(k)
  Next
End Sub

输出:

---- Src
 a b A1 NotInTgt
 c d a1 UpdInTgt
---- Src dic
 A1 0
 a1 1
---- Tgt
 B1 NotInSrc x x xx
 a1 UpdInTgt ? ? ??
---- Tgt (updated)
 B1 NotInSrc x x xx
 a1 UpdInTgt c d a1
于 2012-10-16T13:19:04.770 回答