选择除具有可变列和行引用的标题行之外的列中的所有行

时间:2014-10-13 19:07:15

标签: excel vba excel-vba excel-2013

我有一个宏,可以将源电子表格中的信息提取到目标电子表格中。由于我的目标工作表和源工作表中的行数和列位置可能不同,因此我已根据其标题名称而非列索引搜索列。宏根据它的标题名称查找源表中的主键列,将其与目标表中的主键列匹配(也可通过标题名称找到),然后返回所有行的所需值。具有匹配的键(返回值列也可以通过目标和源表的标题名称找到)。

两张表之间的列标题名称不必完全相同。例如,如果具有我想要的数据的列被命名为" Vendor"在源表中,它可能被称为"供应商"在目标工作表中。

我的问题是我的目标工作表中的返回列的标题名称一直被替换为源表中列的标题名称。我认为问题来自第13行,因为我在搜索列标题名称时选择了我的主工作表的返回列的整列,而不是除了前两行之外的所有行(因为我的标题列开始于第2行,而不是第1行)。

有人知道一个仍然允许我根据标题名称查找列的解决方案吗?

    Set g = target_sheet.Rows(2).Find(what:="Item ID", _
                                lookat:=xlWhole, LookIn:=xlValues)

    If Not g Is Nothing Then
        Set mainIdCol = g.EntireColumn
    End If

    Set g = Nothing
    Set g = target_sheet.Rows(2).Find(what:="Supplier", _
                                lookat:=xlWhole, LookIn:=xlValues)

    If Not g Is Nothing Then
        Set mainVendorCol = g.EntireColumn   <--------**Row 13**
    End If

    Set ran = mainVendorCol

    For Each c In ran.Cells

        id = c.EntireRow.Cells(3).Value

        If Len(id) > 0 Then

            r = Application.Match(id, srcIdCol, 0)

            If Not IsError(r) Then
                c.Value = Application.Index(srcVendorCol, r, 1)
            Else
                c.Value = "PROJECT NOT FOUND"
            End If
        End If
    Next c

End Sub

0 个答案:

没有答案