如何从Excel单元格中删除所有由空格分隔的数字字符?
我需要删除Excel单元格中文本字符串中仅由空格分隔的数字字符。例如,我有: johndoe99@mail.com1关注工作变量1 99 我需要得到: johndoe99@mail.com关注工作变量1如何从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
公式或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
)(?我从未使用过正则表达式,但我会研究它。如何提取具有字母字符(可能还有一些其他字符,如数字字符“.”、“&”等)的连续字符串(定义为用空格分隔)?@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"),""))