【问题标题】:Excel VB Macro to search for static text then move over 2 cells and input dataExcel VBA宏搜索静态文本然后移动2个单元格并输入数据
【发布时间】:2015-02-26 05:40:48
【问题描述】:

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

每个独特的 V# 都有我需要放入 D 列的 4 个结果之一。 我使用搜索 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 列表并让宏有效地解析它?

我希望上面说得通,感谢任何帮助。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以将搜索/更新包装在 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
    

    【讨论】:

    • 谢谢蒂姆,这周我会试一试。我不确定UpdateValues“V0007921”,“NA”,“Site Responsibility”上面的第一行在哪里?您是否建议我在宏中为每个 V# 创建一行?
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多