首页 文章

为excel创建循环宏

提问于
浏览
-2

我正在尝试创建一个循环宏来节省项目工作期间的时间 .

我需要做的是复制表1中A列中的数字,然后找到表2中A列中的数字(这些是同一文档上的单独表格)之后我需要复制相应C列中的文本然后将其粘贴到工作表1的C列中 .

对不起,这可能没什么意义......

我没有太多使用VBA的经验,所以任何帮助将不胜感激 .

3 回答

  • 0

    这听起来像是 VLOOKUP 的工作

    Sheet1 上的数据如下所示:

    +-------+--------+-------+
    | Col A | Col. B | Col C |
    +-------+--------+-------+
    |   1   |        |       |
    +-------+--------+-------+
    |   2   |        |       |
    +-------+--------+-------+
    |   3   |        |       |
    +-------+--------+-------+
    

    你想在 Sheet2 中查找值1,2,3等,它们可能如下所示:

    +-------+--------+-------+
    | Col A | Col. B | Col C |
    +-------+--------+-------+
    |   1   |        |   A   |
    +-------+--------+-------+
    |   2   |        |   B   |
    +-------+--------+-------+
    |   3   |        |   C   |
    +-------+--------+-------+
    

    如果我正确理解了您的问题,您需要在 Sheet1 上的A列中查找值,并将 Sheet2 列C中的相应匹配返回到 Sheet1 的C列 .

    Sheet1 的C列中添加 VLOOKUP 公式,如下所示:

    =VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

    lookup_value是您要查找的内容,在本例中是 Sheet1 列A中的值 .

    table_array是您要查找以查找lookup_value的单元格 . 使用此查找时,此table_array中最左侧的列将用作要匹配的列 . 在这种情况下它是 'Sheet2'!A1:C3

    如果找到匹配项,则col_index_num是您要返回的相应列 . 在这种情况下,它是第3列 .

    最后,如果您想要完全匹配,则[range_lookup]应设置为 FALSE ,如果您想要返回第一个近似匹配,则应设置为 TRUE .

    所以在这种情况下,我们要将 VLOOKUP 公式添加到 Sheet1 的C列的第一行,如下所示:

    +-------+--------+-----------------------------------------+
    | Col A | Col. B |                  Col C                  |
    +-------+--------+-----------------------------------------+
    |   1   |        | =VLOOKUP(A2,'Sheet2'!$A$1:$C$3,3,FALSE) |
    +-------+--------+-----------------------------------------+
    |   2   |        |                                         |
    +-------+--------+-----------------------------------------+
    |   3   |        |                                         |
    +-------+--------+-----------------------------------------+
    

    按Enter键以获得结果 . 将公式拖动到列的其余部分 .

    几个笔记:

    • 如果找不到 Sheet2 的C列中的匹配项,则该函数返回 #N/A 错误,您可以使用 IFERROR 函数处理该错误

    • VLOOKUP仅返回 Sheet2 的C列中的第一个匹配项,如果有多个匹配项,则需要考虑调整查找以使其足够具体,以便每个查找只有一个对应的值

    您可以在MSDN上阅读有关VLOOKUP函数的信息,并查看一些教程here . 特别是MSDN文章的常见问题和最佳实践部分 .

  • 1

    同意kfitcher,不需要vba . vlookup的替代方法是索引/匹配,如下所示

    =INDEX(Sheet2!C:C,MATCH(Sheet1!A2,Sheet2!A:A,0))

  • 1

    我认为你不需要VBA . 如果你想做我认为你想做的事情,请使用

    =VLOOKUP(Sheet1!A1, Sheet2!A:C, 3)
    

    将其放入C1(表1)中,然后将其复制下来 .

    Documentation for VLOOKUP here.基本上,(Sheet1!A1)是你正在寻找的东西,而(3)是你从中获取信息的A:C(C列)范围内的列 . 如果由于某种原因,您在B或C列中的数据与A中的数据匹配(使VLOOKUP无用),您想要使用:

    =INDEX(Sheet2!C:C,MATCH(Sheet1!A1,Sheet2!A:A,0))
    

    相反,它只搜索单个列 .

    Tips for INDEX MATCH here.

相关问题