好的,这个问题听起来很模糊,但我会尝试解释。
我正在尝试将某个单元格值从一个工作表复制到另一个工作表中。应将其复制到的位置由同一工作表中的另一个值确定。例如:
Sheet 1中
4040-5056 ----- 4040-5056v1.7
3409-5793 ----- 3409-5793v4.3
Sheet2
4040-5056
3409-5793
根据您看到的第一个值,sheet1中的第二列值应复制到sheet2中的相应单元格中。
我不知道如何做到这一点,任何帮助都将不胜感激!
提前致谢
编辑:
Sheet1包含必须复制到其他工作表中相应nvalues的所有值。 它必须与之对应的值分布在30张左右,但都在同一文档中。在每个工作表中,代码必须查找的值都在同一列中,因此在每个工作表中应该查看A列中的值是否相同.VLOOKUP可以工作,但仍然是一个缓慢的选项,知道这是处理36.000行。代码应该做的是,如果A列的值与另一个工作表中A列的值相对应,则将B列的值复制到其他工作表中。
我希望每个人都能理解这个解释。
答案 0 :(得分: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
的最后一个参数(此处为FALSE
)在您的情况下很重要,因为数据未排序。
答案 1 :(得分:0)
使用纯VBA的另一种解决方案:
由于强烈需要性能,我建议使用dict对象,如this SO question中所示。使用字典的优点是,一旦构建,它的查找速度非常快。所以我希望我的代码在查找中非常快。另一方面,访问单个单元格(通过循环)比内置VLOOKUP
更慢。
比较表现,使用30,000个条目的参考表和3个每页30,000行的查找表:
因此在这种情况下使用VBA字典可以提高200倍的性能。
注意:您必须添加对“Microsoft Scripting Runtime”的引用(来自VBA窗口的tools->参考菜单)
注意:如果参考表中的数据不连续,或者存在重复数据,此解决方案将无效。
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