Microsoft Excel LOOKUP函数只是…不起作用?

所以,我有一个相当复杂的工作簿。

图表1:用户input仪器列表的数据库,以及垂直列中仪器的一些数据。

工作表2:包含与工作表1完全相同的信息,但以不同格式显示的工作表。 根据表1中的条目自动填充。(在这个问题中没有用)

工作表1上存在一个通过单击button执行的macros。 该macros从Sheet 1中获取每一列,并为每个列创build一个新的Sheet。 每个新工作表(工作表3 )都被重命名为它所表示的工作表1的第一个值。

  • 表1中有4列,每列中的第一个值是:LS-ALPHA,LS-BRAVO,LS-CHARLIE,LS-DELTA。 我的macros将创build4个新的名为LS-ALPHA,LS-BRAVO,LS-CHARLIE,LS-DELTA。

每张新纸上的第一个单元(技术上为H2)包含一个参考纸张名称的公式。

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255) 
  • LS-ALPHA表中的H2实际上将会表示“LS-ALPHA”,LS-BRAVO表中的H2将表示LS-BRAVO等。

新工作表中的每个其他数据单元将自动在主工作表(Sheet 1)上查找该值,以确定它来自哪个列。 然后,它将低于该值并从下面的一些单元格x行中获取内容。

 =LOOKUP(H2,'Database (Cols)'!D2:AN2,'Database (Cols)'!D3:AN3) 

这绝对是完美的。 它做得很好。

除了,并不总是。

  • 如果我将这些列重命名为“LS-A,LS-B,LS-C,LS-D”,它就可以工作。 如果我将这些列重新命名为“LS-AA,LS-AB,LS-AC,LS-AD”,它就可以工作。 如果我将这些列重命名为“LS-AAA,LS-AAB,LS-AAC,LS-AAD”,它就可以工作。

但是,如果我将这些列重新命名为“LS-TTF,LS-TTD,LS-TSD,LS-TSF”,那么它们全部被破坏了….纸张上的链接都不再工作了。 他们中的一些人指出不正确的专栏,如果他们甚至显示的东西。 我遇到的这个问题非常奇特。 我不知道为什么这些名字会打破这个名字,也不知道其他的名字是否会打破它。

当它“中断”时会发生什么:所有的引用似乎都find了LOOKUP中最后一个可用的列。 四张表中的三张全都使用第四列中的值,当他们不应该的时候。 然后,一张表给我错误(#N / A)。 当我逐步计算时,它正在寻找LOOKUP函数中的正确值,它只是没有返回正确的东西….

如果不显示发生了什么情况,我不能提供更多信息,因此我已经包含了一个工作电子表格和一个损坏的电子表格。 这些表是从macros生成的,所以你不必乱搞。 工作和破碎的文件如下:

工作: https : //drive.google.com/file/d/0B9zbU-BeMQNfSmRrWVhKVW9RN3M/view?usp=drivesdk

损坏: https : //drive.google.com/file/d/0B9zbU-BeMQNfd1FUemwxQjQwMEE/view? usp =drivesdk

请注意,echo列是出于debugging目的。 我试图看看他们是否都会显示回声,而不是三angular洲。 显然,他们不。

从LOOKUP函数的帮助:

重要提示:lookup_vector中的值必须按升序排列:…,-2,-1,0,1,2,…,AZ,FALSE,TRUE; 否则,LOOKUP可能不会返回正确的值。 大写和小写文本是等效的。

正确工作的一组值 – “LS-A,LS-B,LS-C,LS-D” – 按字母顺序排列。 “LS-TTF,LS-TTD,LS-TSD,LS-TSF”这些不能正确工作的值不是按字母顺序排列的。 此外,LOOKUP不一定会find完全匹配 – 如帮助中指定的那样:

如果LOOKUP函数找不到lookup_value,则该函数将匹配lookup_vector中小于或等于lookup_value的最大值。

要解决,要么:

  • 按照字母顺序重新sorting非工作集的值(尽pipe您仍然不能保证完全匹配),或者
  • 改为使用HLOOKUPfunction 。 确保Range_lookup参数为false以要求完全匹配。 示例用法: =HLOOKUP(H2,'Database (Cols)'!D2:AN3,2,FALSE)