[英]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万行的查找表:
因此在这种情况下,使用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.