我需要返回下一个字母,如果是 Z,则返回 A

我需要返回下一个字母,如果是 Z,则返回 A

我需要返回下一个字母,如果是 Z,则返回 A

我使用的公式是这样的:

=IF(CHAR(CODE(MID(Col_Ref!$E2,2,1))+1)>90,CHAR(65),CHAR(CODE(MID(Col_Ref!$E2,2,1))+1))

答案1

正如您所写的公式,它将始终查找 $E$2 并产生相同的结果,直到 E2 发生变化。

现在您的范围是90-65=> 25,所以:

=CHAR(MOD(CODE(E2)-64,25)+65)将要

  • 读出代码,
  • 减去 64
  • 将其剥离到范围内,
  • 1然后添加 65 (由于差异,实际上是添加;65-64)

可能需要进行调整才能产生 CHAR(90)

工作表引用和 MID() 被故意省略了。

答案2

您的公式相对于该>90部分的逻辑是正确的,因为您将获得从 65 到 90 个字符,所以全部 26 个。

一个问题在于CHAR函数的使用。如果仔细观察,您会发现使用它来查找的不是 $E2 中第二个字符的代码值,而是与其关联的字符,然后将其与 90 进行比较。所以基本上"D">90是比较,而不是68>90。Excel 认为任何受支持语言的字母字符都大于其数字字符。(现在这其中有细微差别,因此拉丁文“D”的值可能不大于阿拉伯数字 6,但我认为您并不关心这一点!)

因此,它返回的任何字符都将生成为TRUE被认为大于 90 的所有字符。

为了避免这种情况,您可以:

  1. 写公式时要非常小心,或者
  2. 仅使用IF来处理数值(CODE结果),并将其放在CHAR函数内。这样就不需要非常非常小心了。

像这样:

=CHAR(  IF( CODE(MID(Col_Ref!$E2, 2, 1)) > 89,  65,  CODE(MID(Col_Ref!$E2, 2, 1)) + 1)  )

较小的问题,由于字符“Z”的值为 90,请注意,没有找到字母(找到大写字母)会触发回滚到“A”......您需要使用 89,而不是 90(或从 更改为>>=,因为虽然您可能已经瞄准了包括所有 26 个字母的范围,但您真正想看的是否Z > 89,这有可能发生,并且会给您想要的“A”,而不是看Z > 90,这永远不会发生,所以你会得到不幸的结果。

附带问题,但由于您似乎希望找到并返回大写字母,您可能会遇到“现实世界”的情况,其中第 2 位的字母可能是小写字母“r”,甚至是一些更不幸的值。CODE将返回小写值...在这种情况下...您可能不喜欢结果。如果将Col_Ref!$E2引用放在函数内部UPPER,您可以获得某人的小失误而不是失败的高质量结果。(所以,UPPER(Col_Ref!$E2):这被称为“将其包装在(填写名称)函数中。”)

相关内容