如何从Excel单元格中删除所有由空格分隔的数字字符?

如何从Excel单元格中删除所有由空格分隔的数字字符?,excel,vba,excel-formula,Excel,Vba,Excel Formula,我需要删除Excel单元格中文本字符串中仅由空格分隔的数字字符。例如,我有: johndoe99@mail.com1关注工作变量1 99 我需要得到: johndoe99@mail.com关注工作变量1 公式或VBA脚本解决方案都很好。谢谢。我认为nomad是对的,regex可能是一个更简单的选择。然而,我也认为通过使用Split()和isNumeric()函数,我在这里找到了一个很好的解决方案 Sub test() Dim cell As Range For Each cel

我需要删除Excel单元格中文本字符串中仅由空格分隔的数字字符。例如,我有:

johndoe99@mail.com1关注工作变量1 99

我需要得到:

johndoe99@mail.com关注工作变量1


公式或VBA脚本解决方案都很好。谢谢。

我认为nomad是对的,regex可能是一个更简单的选择。然而,我也认为通过使用
Split()
isNumeric()
函数,我在这里找到了一个很好的解决方案

Sub test()

    Dim cell As Range
    For Each cell In Range("A1:A10")  'adjust as necessary
        cell.Value2 = RemoveNumbers(cell.Value2)
    Next cell

End Sub

Function RemoveNumbers(ByVal inputString As String) As String

    Dim tempSplit As Variant
    tempSplit = Split(inputString, " ")

    Dim result As String

    Dim i As Long
    For i = LBound(tempSplit) To UBound(tempSplit)
        If Not IsNumeric(tempSplit(i)) Then result = result & " " & tempSplit(i)
    Next i

    RemoveNumbers = Trim$(result)

End Function
自由民主党


请注意,除了测试前后的空格外,还测试作为分隔符的字符串的开头或结尾

您没有指出数字是字符串唯一内容的情况。此例程将删除它,但如果需要其他内容,请指定

试试这个:

Function remSepNums(S As String) As String
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "(?:\s+|^)(?:\d+)(?=\s+|$)"
    .MultiLine = True
    remSepNums = .Replace(S, "")
End With
End Function
为了好玩,如果您有最新版本的Excel(Office 365/2016),您可以使用以下数组公式:

=TEXTJOIN(" ",TRUE,IF(NOT(ISNUMBER(FILTERXML("<t><s>"&SUBSTITUTE(TRIM(A1)," ","</s><s>")&"</s></t>","//s"))),FILTERXML("<t><s>"&SUBSTITUTE(TRIM(A1)," ","</s><s>")&"</s></t>","//s"),""))
=TEXTJOIN(“,TRUE,IF(NOT(ISNUMBER(FILTERXML(“&SUBSTITUTE(TRIM(A1),”,“)&“//s”)),FILTERXML(“&SUBSTITUTE(TRIM(A1),”,“,”)&“//s”),”)
  • FILTERXML
    可用于将字符串拆分为一个由空格分隔的单词数组
  • 如果任何单词不是数字,则返回该单词,否则返回空字符串
  • 然后使用
    TEXTJOIN
    功能连接段

如果您不介意VBA,您可以使用正则表达式(
)(?我从未使用过正则表达式,但我会研究它。如何提取具有字母字符(可能还有一些其他字符,如数字字符“.”、“&”等)的连续字符串(定义为用空格分隔)?@controlnetic.nomad在RegExp中没有正面的外观。你是对的,没有外观落后(我不敢相信我以前从未在Excel中需要过)。不过,我会将您的模式更改为
\s\d+\s
,以完全符合OP的要求。谢谢,这起作用了。公式对我不起作用。我会在有365的笔记本电脑上使用。非常感谢!我使用了您程序的功能部分,它工作得非常好!谢谢。这是有人让我制作的宏的一部分,用于剥离命令和sql程序的语法,并返回程序使用的变量列表。因此,我首先删除了所有常用命令,用空格替换了语法,删除了回车,并修剪了列表。最后我得到了变量(我想要的)和数值参数(我需要筛选)。最后一步是删除重复。我相信有更好的方法可以做到这一点,但我的程序已经在Excel中,我已经尽了最大努力。也许已经有一个好程序只从sql代码中提取变量了?@Annabana我怀疑,这听起来是一个非常不寻常的请求。我想你只需要设置一个大量的
Replace()
函数解决了itI问题。我使用了三个用户定义的函数组合替换函数(主要是为了去除语法和回车,并用空格替换)。一个是删除常见sql命令列表中的所有内容,另一个是(使用了您的函数,谢谢)第三个是删除数字,第三个是删除重复的数字(已经有了)。最后我当然不得不修剪生成的字符串。也许不是最好的方法,但它很有效。@Annabananeh,我的意思是,这或多或少是我应该做的,所以我不会担心它。你已经做到了:)
=TEXTJOIN(" ",TRUE,IF(NOT(ISNUMBER(FILTERXML("<t><s>"&SUBSTITUTE(TRIM(A1)," ","</s><s>")&"</s></t>","//s"))),FILTERXML("<t><s>"&SUBSTITUTE(TRIM(A1)," ","</s><s>")&"</s></t>","//s"),""))