【发布时间】:2013-12-07 06:46:26
【问题描述】:
场景如下,我有一张有两列的工作表,一列我想匹配,另一列包含我想在匹配时复制的值。我有第二张表,其中包含要在匹配列中搜索的值以及在匹配时将值列复制到的列。
这看起来像是 VLOOKUP 的主要候选者,但我想避免对列号进行硬编码,因为数据表的内容可能会有所不同。所以我根据标题的内容查找列。如果有办法以这种灵活性对结果进行 VLOOKUP,那么这也是可行的。我不能使用公式,这需要在 VBA 中。
下面定义了 4 列:
- toFindCol:这包含我要尝试的值的主列表 并在 toMatch 列中找到
- toMatchAgainstCol:这包含我想要匹配 toFindCol 值的值列表
- valueCol:这包含我要复制的值,如果有匹配,该值必须来自匹配发生的行
- resultsCol:这是我要将值复制到的位置,需要将值复制到 toFind 值的行
由于某种原因,下面的代码给出了“类型不匹配”错误。
最终我想把它包装成一个函数/子程序,这样我就可以传入表格和列标题并让它工作,这很神奇。谁能做到这一点的布朗尼积分:)
Dim toFindCol As Range
Dim toMatchAgainstCol As Range
Dim valueCol As Range
Dim resultsCol As Range
Dim match As Variant
Set toFindCol = cohortDataSetSht.Columns(1).EntireColumn
Set toMatchAgainstCol = userSht.Cells.Find("id", , xlValues, xlWhole).EntireColumn
Set valueCol = userSht.Cells.Find("cdate", , xlValues, xlWhole).EntireColumn
Set resultsCol = cohortDataSetSht.Columns(4)
For Each findMe In toFindCol
Set match = toMatchAgainstCol.Find(What:=findMe, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows)
If Not match Is Nothing Then
resultsCol.Cells(findMe.Row, 0).Value = valueCol.Cells(match.Row, 0).Value
End If
Next findMe
【问题讨论】:
标签: vba excel excel-2007