【问题标题】:Microsoft Excel LOOKUP function just... doesn't work?Microsoft Excel LOOKUP 功能只是...不起作用?
【发布时间】:2016-08-03 14:21:31
【问题描述】:

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

表 1: 一个数据库,用户在其中输入仪器列表以及垂直列中有关仪器的一些数据。

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

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

  • 工作表 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 列用于调试目的。我试图看看他们是否都会显示回声而不是增量。显然,他们没有。

【问题讨论】:

  • 我看不出有什么不同。它在哪里?
  • “破损”表显示所有值的增量。 (除了由于某种原因显示#N/A 的一张表)“工作”表显示正确的对应值; "alpha#" "beta#" 等
  • 数据库如下所示:s32.postimg.org/bld2rekn9/database.png 正确的条目将是显示“delta”的 LS-TSF,如下所示:s32.postimg.org/b7bqrt0jp/correct.png 不正确的条目将是 LS-TTF 显示“delta”而不是"alpha": s32.postimg.org/5lpbnqzut/incorrect.png 但是,当列名发生更改时,就像在工作电子表格中一样,不会发生此问题

标签: excel excel-formula excel-2010 vba


【解决方案1】:

来自LOOKUP function的帮助:

重要提示:lookup_vector 中的值必须按升序排列 顺序:..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE;否则,查找 可能不会返回正确的值。大写和小写文本是 等价的。

正确工作的值集 - “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)

【讨论】:

    【解决方案2】:

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

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

    而不是

    =LOOKUP("KEY";F5:F48)
    

    LOOKUP 对我的目标不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多