根据条件从工作簿中提取值

时间:2013-08-01 14:03:59

标签: vba

所以我有两本工作簿。 第一个包含源信息。 第二个包含应使用源信息中的信息填写的产品列表。

所以我认为这可以通过VBA完成。这是我的想法:

从B列中选择条件值。 在源工作表中搜索条件 选择匹配条件所在的行(例如第4行) 选择匹配行中Q和W列的单元格,然后将这些值复制回标准所在行中产品工作簿的单元格E和F.

这有可能在VBA中实现吗?你有什么提示可以帮助我吗?提前谢谢!

1 个答案:

答案 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