Excel 2007
我在单元格 A1 中有一个字符串,我需要一个公式进入 B1 来查看该字符串并找到特定字符)
和字符 kHz 之后的下一个数字字符,并返回两者之间的所有字符。
它不能返回)
和此后的数字字符,因为它们只是充当分隔符。
是kHz
返回结果的一部分(并且应该作为其一部分返回),但由于它保持不变并且不会改变,因此它也可以作为公式在寻找此后的第一个数字字符时使用的良好参考。
字符串示例
Gjj2826)_48_kHz_16jouioj
所以我想要公式提取并返回_48_kHz_
永远)
都是这样,)
并且不会改变。
将会16jouioj
改变,但第一个字符始终是数字。
将会_48_kHz_
改变,它可能是_244_kHz_
或者_4_kHz_
因此需要一些东西作为我需要的文本两侧的分隔符。
谢谢
答案1
Excel 公式 FIND 不支持正则表达式,那么您必须使用 VBA:
Sub Exec()
Static reg as Object
Set reg = CreateObject("vbscript.RegExp")
reg.Global = True
reg.IgnoreCase = False
reg.Pattern = ".+\)(_\d+_\w+_).+"
Dim matches As Object
Set matches = reg.Execute(Range("A1").Value)
Range("B1").Value = matches.item(0).submatches.item(0)
End Sub
答案2
您提供的三个提取的文本都包含“kHz”,所以我相信这应该有效:
=LEFT(MID($A1,FIND("_",$A1,1),LEN($A1)),FIND("kHz",MID($A1,FIND("_",$A1,1),LEN($A1)),1)+3)
编辑:
由于您的实际文本字符串比您的帖子中的答案复杂得多,Wasif Hasan 的答案更接近您的需要,但模式并不完全正确,匹配对象的用法也不完全正确(我认为)。
在您的工作簿中创建一个新模块(按Alt+F11打开 Visual Basic 编辑器,然后右键单击引用当前工作簿的 VBAProject 的模块节点并选择“插入>模块”:
将此代码粘贴到模块中:
Option Explicit
Public Function GetFrequency(ByRef r As Range) As String
Dim regex As Object
Set regex = CreateObject("VbScript.RegExp")
With regex
.Global = True
.IgnoreCase = False
.Pattern = "_[0-9]+?_kHz_"
GetFrequency = .Execute(r).Item(0).Value
End With
End Function
然后,您可以在工作簿中使用该函数。例如:
=GetFrequency(A2)