如何在"#"之间找到整数?当这个组合出现在给定单元格的任何地方时,还有一个空格?
示例单元格内容:
"这是我喜欢运行的#123测试"
"这是我喜欢运行的#45测试"
我需要返回" 123"从第一个和" 45"从第二个。
使用Mid(),我可以返回" 1",但问题是#和空格之间的数字长度可能不同,但通常会有#,数字或数字,然后是空间。
作为次要问题,可能会出现没有"#"但我需要找到单元格中的第一个数值并返回它们(即" 1"," 34"," 648")。
非常感谢任何有关这些挑战的建议。
答案 0 :(得分:1)
这将返回字符串中的第一个数字:
=--LEFT(MID(A1,AGGREGATE(15,6,FIND({1,2,3,4,5,6,7,8,9,0},A1),1),LEN(A1)),FIND(" ",MID(A1,AGGREGATE(15,6,FIND({1,2,3,4,5,6,7,8,9,0},A1),1),LEN(A1))))
AGGREGATE于2010年推出Excel。如果你不这样做那么你将需要使用这个数组公式:
=--LEFT(MID(A1,MIN(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},A1),1E+99)),LEN(A1)),FIND(" ",MID(A1,MIN(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},A1),1E+99)),LEN(A1))))
作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果正确完成,那么excel会将{}
放在公式周围。
答案 1 :(得分:1)
这也应该有效:
=MID(A11,(FIND("#",A11,1)+1),FIND(" ",A11,FIND("#",A11,1)+1)-FIND("#",A11,1))
通过查找哈希和以下空格来工作......不适用于次要问题......
答案 2 :(得分:1)
由于您已将excel-vba标记放在您的问题上,因此这里采用的vba方法是使用能够同时满足您的主要和次要问题的正则表达式:
Sub tmp()
Dim regEx As New RegExp
regEx.Pattern = "^.*?\#?(\d+)"
Dim i As Integer
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row:
Set mat = regEx.Execute(Cells(i, 1).Value)
If mat.Count = 1 Then
Cells(i, 2).Value = mat(0).SubMatches(0)
End If
Next
End Sub
正则表达式使用非贪婪的字符搜索(即"?"在"'。*?"这是什么)到在单元格中找到第一个匹配"#123"或只是" 123" " 123"是任意数字序列。