繁体   English   中英

根据工作表中的其他值将excel中的值复制到另一工作表

[英]Copying values in excel to another sheet, based on other values in the sheet

好的,这个问题听起来很模糊,但我会尽力解释。

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

工作表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列的值复制到另一张纸中。

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

您可以使用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的最后一个参数(此处为FALSE )很重要,因为数据未排序。

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

由于强烈需要性能,因此我建议使用dict对象,如本SO问题所示 使用字典的好处是,一旦建立字典,查找起来非常快。 因此,我希望我的代码在查找中能很快。 另一方面,(通过循环)访问单个单元的速度将比内置VLOOKUP慢。

比较性能,使用3万条参考表和3条每条3万行的查找表:

  • 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM