我需要在XLS单元中找到最后一个空格


17

我有一个带有文本值的Excel工作表,例如在A1中:“这是文本”。我需要找到最后一个空格字符的位置。有一个excel公式可以给我我想要的结果吗?我尝试过查找和搜索,但是这些都是从左开始的,我需要从右开始。


大约相同年份的跨站点副本:stackoverflow.com/q/18617349
Mathieu K.

Answers:


28

如果用空白值表示“空格”,用XLS表示Excel,则可以使用此公式(假设要在其中找到最后一个空格的测试在中A1):

=FIND("☃",SUBSTITUTE(A1," ","☃",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

您可以将其分为3部分:

  • LEN(A1)-LEN(SUBSTITUTE(A1," ",""))给你的空间的数量,让我们把它x
  • SUBSTITUTE(A1," ","☃",[x])将用x雪人代替第四个空格(最后一个空格),
  • FIND("☃",[...])会给你雪人的位置。最后一个空格的位置。

完美的作品。谢谢。尽管您做出了解释,但花了我一段时间才能弄清楚它为什么有效:)
Dheer 2013年

5
+1是一个不错,详细的答案,也是最具创意的替换角色。
Doug Glancy 2013年

也可以在LibreOffice Calc和Google表格中使用。
Mathieu K.

8

这是另一种方式,A1中允许使用任何字符(甚至是雪人!)

=LOOKUP(2^15,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))))

FIND 有第三个参数定义搜索的开始位置,如果将整数值1到n(其中n是A1的长度)的数组应用于该参数,则会返回一个数组,最后一个数字是数组的位置。最后的空间。

LOOKUP然后通过搜索大于该数组中可能找到的任何值的值来提取该数字,在这种情况下,将找到最后一个数字

Excel 2010以后,你也可以使用AGGREGATE函数这样

=AGGREGATE(14,6,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

FIND返回与之前相同的数组,并使用14作为第一个参数,AGGREGATE最后一个使用1作为参数,您将获得数组中的最大值,同时忽略错误[6]


1
效果很好。尽管很久以前我是开发人员,但我仍然不知道INDIRECT的工作方式和原因:)
Dheer 2013年

1
假设A1有12个字符,则该部分的"1:"&LEN(A1)值为“ 1:12”-这是ROW无法处理的字符串,但是INDIRECT将字符串转换为ROW 可以处理的有效引用,因此ROW(1:12)然后给您{1 ; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12}
巴里·胡迪尼

感谢您的澄清。现在确实有意义。这意味着发现自己implictly的工作原理与阵列和获取每个值作为初始位置执行...
Dheer

没错,FIND返回一个数组,例如,如果A1包含,barry larry houdini则FIND将返回此数组,{6;6;6;6;6;6;12;12;12;12;12;12;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}并且LOOKUP和/或AGGREGATE将采用该数组的最后一个/最大数值,即12
Barry houdini

注意:这在LibreOffice Calc中有效。它不适用于Google表格,而是查找第一个匹配项。
Mathieu K.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.