所以我有两本工作簿。 第一个包含源信息。 第二个包含应使用源信息中的信息填写的产品列表。
所以我认为这可以通过VBA完成。这是我的想法:
从B列中选择条件值。 在源工作表中搜索条件 选择匹配条件所在的行(例如第4行) 选择匹配行中Q和W列的单元格,然后将这些值复制回标准所在行中产品工作簿的单元格E和F.
这有可能在VBA中实现吗?你有什么提示可以帮助我吗?提前谢谢!
答案 0 :(得分:1)
如果两个工作簿中的条件单元格严格相同,我建议使用源表单的条件创建一个数组,然后循环遍历产品表以添加阵列中所需的2列。 您只需要在源表中再次循环,并用相关数据替换目标单元格。 如果排序顺序没有重要性,或者可以重置,我建议对您的条件列进行排序,以便使用单个For ... Next循环进行优化。
如果您的标准单元格不完全相同,是否有可以重复使用的模式?
一个简单的代码示例如下:
Sub CopyData()
Dim myData(200, 3) As Variant
Dim i As Integer
Dim iArrayLimit As Integer
Dim myLastRow As Integer
Application.Workbooks(Source).Activate
myLastRow = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
iArrayLimit = myLastRow
For i = 1 To myLastRow 'Provided your source sheet has no header. Replace by 2 if it does!
myData(i, 1) = Cells(i, 2) 'Column B, right
Next
Application.Workbooks(Products).Activate
myLastRow = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
For i = 1 To iArrayLimit 'Take care: if you have headers here and not in the source, change the code below
For j = 1 To myLastRow
If Cells(j, 1) = myData(i, 1) Then 'If your criteria in the products sheet is in column A!
myData(i, 2) = Cells(j, 17)
myData(i, 3) = Cells(j, 23)
Exit For
End If
Next
Next
Applications.Workbooks(Source).Activate
For i = 1 to iArrayLimit
Cells(i, 5) = myData(i, 2)
Cells(i, 6) = myData(i, 3)
Next
End Sub