Microsoft Excel LOOKUP功能只是...不起作用?

时间:2016-08-03 14:21:31

标签: excel excel-vba excel-formula excel-2010 vba

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

工作表1:用户在垂直列中输入工具列表以及有关工具的一些数据的数据库。

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

在工作表1上存在一个通过单击按钮执行的宏。此宏从Sheet 1中获取每一列,并为每列创建一个新的Sheet。每张新工作表工作表3 都会重命名为它所代表的工作表1列中的第一个值。

  • 即, Sheet 1中有4列,每列中的第一个值为:LS-ALPHA,LS-BRAVO,LS-CHARLIE,LS-DELTA。我的宏将创建4张名为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等。

新工作表上的每个其他数据单元格将自动在主工作表(工作表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”,它们都会以某种方式被破坏....没有链接在床单上工作了。如果他们甚至显示某些东西,他们中的一些指向错误的列。我遇到的这个问题令人难以置信。我不知道为什么这些名字特别打破它,我也不知道其他名字也会破坏它。

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

如果没有向您展示正在发生的事情,我真的无法提供更多信息,所以我已经包含了一个有效的电子表格和一个破损的电子表格。工作表已从宏生成,因此您不必弄乱它。工作和损坏的文件如下:

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

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

注意,echo列用于调试目的。我试图看看他们是否都会显示回声而不是delta。显然,他们没有。

2 个答案:

答案 0 :(得分:9)

来自LOOKUP function的帮助:

  

重要信息:lookup_vector中的值必须按升序排列   顺序:...,-2,-1,0,1,2,...,A-Z,FALSE,TRUE;否则,LOOKUP   可能无法返回正确的值。大写和小写文本是   等效。

正确工作的一组值 - " LS-A,LS-B,LS-C,LS-D" - 按字母顺序排列。一组不能正常工作的值 - " LS-TTF,LS-TTD,LS-TSD,LS-TSF" - 不按字母顺序排列。此外,LOOKUP并不一定能找到完全匹配 - 如帮助中所指定的那样:

  

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

要修复,请:

  • 将非工作值集重新排序为按字母顺序排列(尽管您仍然不能保证完全匹配),或
  • 转而使用HLOOKUP function代替。确保Range_lookup参数为false,以确保完全匹配。示例用法:=HLOOKUP(H2,'Database (Cols)'!D2:AN3,2,FALSE)

答案 1 :(得分:0)

我有一个类似的问题,因为我错误地使用了查找。要在向量中查找值,我必须使用

=MATCH("KEY";F5:F48;0)

代替

=LOOKUP("KEY";F5:F48)

LOOKUP不能满足我的目标。