在单元格

时间:2017-02-12 19:35:08

标签: excel excel-vba excel-formula vba

如何在"#"之间找到整数?当这个组合出现在给定单元格的任何地方时,还有一个空格?

示例单元格内容:

"这是我喜欢运行的#123测试"
"这是我喜欢运行的#45测试"

我需要返回" 123"从第一个和" 45"从第二个。

使用Mid(),我可以返回" 1",但问题是#和空格之间的数字长度可能不同,但通常会有#,数字或数字,然后是空间。

作为次要问题,可能会出现没有"#"但我需要找到单元格中的第一个数值并返回它们(即" 1"," 34"," 648")。

非常感谢任何有关这些挑战的建议。

3 个答案:

答案 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))))

enter image description here

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会将{}放在公式周围。

enter image description here

答案 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"是任意数字序列。