0

好的,这个问题听起来很模糊,但我会试着解释一下。

我正在尝试将某些单元格值从一张表复制到另一张表中。它应该将其复制到的位置由同一张表中的另一个值确定。例如:

表 1

4040-5056 ----- 4040-5056v1.7

3409-5793 ----- 3409-5793v4.3

表 2

4040-5056

3409-5793

根据您看到的第一个值,应将 sheet1 中的第二列值复制到 sheet2 的相应单元格中。

我不知道如何做到这一点,任何帮助将不胜感激!

提前致谢

编辑:

Sheet1 包含必须复制到其他工作表中相应 nvalue 的所有值。它必须对应的值分布在 30 张左右,但都在同一个文档中。在每张工作表中,代码必须查找的值都在同一列中,因此在每张工作表中都应该查看 A 列中的值是否相同。 VLOOKUP 有效,但仍然是一个缓慢的选择,知道可以处理36.000 行。代码应该做的是,如果 A 列的值与另一张表中 A 列的值相对应,则将 B 列的值复制到另一张表中。

我希望每个人都能理解这个解释。

4

2 回答 2

0

您可以使用该VLOOKUP功能。无需为此使用 VBA。

表 1:

       A          B         C
1      4040-5056  4040-5056v1.7
2      3409-5793  3409-5793V4.3
3

表 2:

       A          B         C
1      4040-5056  =VLOOKUP(A1;Sheet1!$A$1:$B$2;2;FALSE)
2      3409-5793  =VLOOKUP(A2;Sheet1!$A$1:$B$2;2;FALSE)
3

单元格 B1 将显示“4040-5056v1.7”,单元格 B2 将显示“3409-5793V4.3”

请注意,VLOOKUP(here FALSE) 的最后一个参数在您的情况下很重要,因为数据未排序。

于 2013-09-05T12:06:31.150 回答
0

另一种解决方案,使用纯 VBA:

由于对性能有强烈的需求,我建议使用 dict 对象,正如这个 SO question中所暗示的那样。使用字典的优点是一旦建立起来查找起来非常快。所以我希望我的代码在查找中非常快。另一方面,访问单个单元格(通过循环)会比内置的要慢VLOOKUP

比较性能,使用包含 30,000 个条目的参考表和 3 个查找表,每个表包含 30,000 行:

  • VLOOKUP : 600 秒
  • VBA/字典:3秒

因此在这种情况下,使用 VBA 字典的性能提高了 200 倍。

注意:您必须添加对“Microsoft Scripting Runtime”的引用(从 VBA 窗口的工具->引用菜单)

注意:如果参考表中的数据不连续或有重复,此解决方案将不起作用。

Sub FillReferences()

  Dim dict As New Scripting.Dictionary
  Dim myRow As Range
  Dim mySheet As Worksheet

  Const RefSheetName As String = "sheet1"
  ' 1. Build a dictionnary
  Set mySheet = Worksheets(RefSheetName)
  For Each myRow In mySheet.Range(mySheet.Range("A1").End(xlDown), mySheet.Range("A" & mySheet.Rows.Count).End(xlUp))
    ' Append A : B to dictionnary
    dict.Add myRow.Value, myRow.Offset(0, 1).Value
  Next myRow

  ' 2. Use it over all sheets
  For Each mySheet In Worksheets
    If mySheet.Name <> RefSheetName Then
      ' Check all cells in col A
      For Each myRow In mySheet.Range(mySheet.Range("A1").End(xlDown), mySheet.Range("A" & mySheet.Rows.Count).End(xlUp))
        ' Value exists in ref sheet ?
        If dict.exists(myRow.Value) Then
          ' Put value in col B
          myRow.Offset(0, 1).Value = dict(myRow.Value)
         End If
      Next myRow
    End If
  Next mySheet

End Sub
于 2013-09-06T07:50:53.743 回答