Excel VBA宏搜索静态文本,然后移动2个单元格并输入数据

时间:2014-02-24 23:08:19

标签: excel excel-vba vba

我是个菜鸟,所以请耐心等待我。 我有一个工作簿,B列包含格式为“V000001 ... V000999”的ID列表,每行1个这些不会改变并保持静态。 工作表中可能有100-1000行,每个V#都是唯一的。

每个独特的V#都有4个结果中的一个我需要放入D列。 我使用搜索V000001的宏录制器创建了一个宏,然后移动了2个单元并输入“NA”,没什么大不了的。

V000002(或顺序排列下一行)可能不需要任何答案,或者可能需要“NF”。

以下是宏录制器执行此操作的简单代码:

Cells.Find(what:="V0007921", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 4).Range("A1").Select
ActiveCell.FormulaR1C1 = "NA"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = "Site Responsibility"
ActiveCell.Offset(0, 1).Range("A1").Select

最终发生的事情是我的宏块中有超过100次以上的块,每次V#都在变化,这样效率不高,而且还会导致宏大小超过允许的最大值。

我知道哪个V#应该在D栏中收到“NA”,我也知道哪个V#应该在D列中收到“NF”。 有没有办法调用文本文件或在VBCode中定义V#的NA和NF列表并让宏有效地解析它?

我希望上面有意义,感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以将搜索/更新包装在Sub中,并为每个值调用它。更好的是你可以从一张纸上的列表中驱动它。

例如:

UpdateValues "V0007921", "NA", "Site Responsibility"

子:

sub UpdateValues(ID,status,notes)
    dim f as range
    Set f = Activesheet.columns(2).Find(what:=ID, LookIn:=xlValues, _
                                         LookAt:=xlPart) 'xlWhole?

    if not f is nothing then 
        f.Offset(0, 4).value = status
        f.Offset(0, 2).value = notes
    end if

end sub