Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于列名而非单元格名的Excel查找数据_Vba_Excel_Vlookup - Fatal编程技术网

Vba 基于列名而非单元格名的Excel查找数据

Vba 基于列名而非单元格名的Excel查找数据,vba,excel,vlookup,Vba,Excel,Vlookup,我正试图用excel完成一项奇怪的任务,但不知道如何去做。我在工作中使用Excel2007,我知道非常基本的vba 我想自动化一个过程,其中一个人需要三个电子表格,并将其中的某些数据转储到一个主表中。这三个电子表格每个月的列顺序都不一样,所以不幸的是,我不能只编写vlookups来运行和获取数据 我可能错了,但看起来Vlookup匹配、索引匹配等也不起作用,因为它们仍然在引用单元格我基本上需要能够根据列中的文本而不是其位置来查找列的内容,因为位置会发生变化,但文本总是相同的。 我有两个想法,但我

我正试图用excel完成一项奇怪的任务,但不知道如何去做。我在工作中使用Excel2007,我知道非常基本的vba

我想自动化一个过程,其中一个人需要三个电子表格,并将其中的某些数据转储到一个主表中。这三个电子表格每个月的列顺序都不一样,所以不幸的是,我不能只编写vlookups来运行和获取数据

我可能错了,但看起来Vlookup匹配、索引匹配等也不起作用,因为它们仍然在引用单元格我基本上需要能够根据列中的文本而不是其位置来查找列的内容,因为位置会发生变化,但文本总是相同的。

我有两个想法,但我不知道它们是否有效,也不知道从哪里开始实施它们:

  • 将三个电子表格转换为表格,并使用表格语法引用标题(我一直无法实现这一点)
  • 识别一切事物的复杂VBA
  • 有人能帮我指出完成这项任务的正确方向吗?非常感谢你的帮助

    编辑示例

    我尝试将内容转储到的主模板将只包含ID和空列:

    ID#          AltID#          Deal
    1
    2
    3
    4
    5
    
    然后另一张电子表格可能是这样的

    ID#          AltID#          Deal
    1            10101           AAAA
    2            20202           BBBB
    3            30303           CCCC
    4            40404           DDDD
    5            50505           EEEE
    

    我当然可以,但问题是下个月,第二个电子表格中的这些列不会在同一个位置,顺序也不一样。他们可能一直在哥伦布DD或其他什么地方。所以我需要一个公式,不管列的位置如何查找它们。只是通过标题文本匹配它们。我希望这能澄清…

    如果您将
    VLOOKUP
    MATCH
    相结合,您可以根据列名而不是索引进行搜索。请记住,
    MATCH
    函数返回匹配的数字索引。假设您的数据如下所示:

    NAME    DAY1    DAY2    DAY3
    Bob     123     345     567
    Tim     456     789     998
    
    为Tim返回DAY2列的功能正常的Vlookup如下所示:

    =VLOOKUP("Tim", A2:D3,MATCH("DAY2",A1:D1,0),FALSE)
    
    几张便条。在我用文字硬编码的地方,你可以使用单元格引用

    这里有一个想法:

    • 获取Sheet2中列
      ID#
      的索引
      MATCH(“ID#”,Sheet2!$1:$1,0)
    • 转换为字符:
      CHAR(匹配(“ID#”,Sheet2!$1:$1,0)+64)
    • 获取列范围:
      间接(
      连接(“Sheet2!”,
      字符(匹配(“ID#”,Sheet2!$1:$1,0)+64),“:”,
      字符(匹配(“ID#”,Sheet2!$1:$1,0)+64))
    • 对于列
      AltID#

      间接(
      连接(“Sheet2!”,
      字符(匹配(“AltID#”,Sheet2!$1:$1,0)+64),“:”,
      字符(匹配(“AltID#”,Sheet2!$1:$1,0)+64))
    使用
    ID
    AltID
    的范围,我们可以进行匹配+索引:

    =INDEX(
       INDIRECT(
         CONCATENATE("Sheet2!",
                     CHAR(MATCH("AltID#",Sheet2!$1:$1,0)+64),":",
                     CHAR(MATCH("AltID#",Sheet2!$1:$1,0)+64))),
       MATCH(A2,INDIRECT(
                  CONCATENATE("Sheet2!",
                              CHAR(MATCH("ID#",Sheet2!$1:$1,0)+64),":",
                              CHAR(MATCH("ID#",Sheet2!$1:$1,0)+64))),0))
    

    如果有一些例子就好了。我认为
    indirect
    在这种情况下可能会有所帮助。我会尽可能快地添加一个带有虚拟数据的示例。我不知道你可以用字符串作为引用,这很酷。但我需要我的col_index_num是一个字符串,而不是一个数字。或者,某个字符串的列数,如果有意义的话。也许我们彼此误解了。使用我的模拟公式,Excel将选择与字符串“DAY2”对应的col_index_num。因此,如果DAY2是第三列,就像我的示例中一样,col_index_num将是三。如果它移动,col_index_num也将更新。这不是你需要的吗?你确定它会更新吗?如果我制作一个宏来执行一个特定的vlookup并为col#u index_num写入一个#,然后下个月列位置不是3而是16,那么宏如何知道将col#u index_num更改为16?我用一个例子编辑了我的问题,希望能澄清。谢谢根据我的代码,您不需要为col_index_num输入特定的数字。相反,您可以使用MATCH函数为您返回col_index_num。输入公式:MATCH(“DEAL”,A1:D1,0),而不是数字,col_index_num通常位于该公式中。如果deal是第一列,col_index_num将自动返回1。如果它在下个月的第2列中,col_index_num将找到文本交易并返回相应的列。这能澄清问题吗?哦,我道歉。让我试试这个,然后尽快给你回复!