如何用通用方法从多种格式字符串中提取6位数字?
通用提取字符串中6位数字的Excel方案
VBA自定义函数(推荐,完全通用)
用正则表达式匹配任意位置的独立6位数字,无需手动适配格式:
- 按
Alt + F11打开VBA编辑器,右键左侧工程窗口的工作簿名 → 插入 → 模块 - 粘贴以下代码:
Function Extract6Digits(str As String) As String Dim regEx As Object, matches As Object, result As String, i As Integer Set regEx = CreateObject("VBScript.RegExp") With regEx .Global = True .Pattern = "\b\d{6}\b" ' 匹配独立6位数字,避免截取长数字片段 End With Set matches = regEx.Execute(str) If matches.Count > 0 Then For i = 0 To matches.Count - 1 result = result & matches(i).Value & ", " Next i Extract6Digits = Left(result, Len(result) - 2) Else Extract6Digits = "" End If End Function
- 返回Excel,在目标单元格输入
=Extract6Digits(A1)(A1为待提取的字符串单元格),即可得到所有6位数字(多结果用逗号分隔)。
示例效果
- 输入:
表'East Contingency'中主键=21733的记录指定的分支'100235 to 100236 Ckt 1'未在分支或变压器数据中找到
输出:100235, 100236 - 输入:
补充分支表中定义的Loadflow分支ID'256574_701027_1'未在分支或变压器输入中找到
输出:256574, 701027 - 输入:
为走廊'IESO-NYISO'定义的、从母线编号135415到157062、电路ID=1的输电元件未在输入数据中找到
输出:135415, 157062
如果只需要第一个匹配的6位数字,用简化版函数:
Function ExtractFirst6Digits(str As String) As String Dim regEx As Object, matches As Object Set regEx = CreateObject("VBScript.RegExp") With regEx .Global = False .Pattern = "\b\d{6}\b" End With Set matches = regEx.Execute(str) ExtractFirst6Digits = IIf(matches.Count > 0, matches(0).Value, "") End Function
无VBA数组公式方案
适用于Excel 2019及以上版本,输入后按Ctrl + Shift + Enter确认数组公式:
=TEXTJOIN(", ", TRUE, IF(ISNUMBER(--MID(A1, ROW($1:$100), 6)), IF(OR(ROW($1:$100)=1, NOT(ISNUMBER(--MID(A1, ROW($1:$100)-1, 1)))), IF(OR(ROW($1:$100)+6>LEN(A1), NOT(ISNUMBER(--MID(A1, ROW($1:$100)+6, 1)))), MID(A1, ROW($1:$100), 6), ""), ""), ""))
注:ROW($1:$100)对应字符串最大长度,若字符串更长可调整为更大范围(如ROW($1:$200))。
内容的提问来源于stack exchange,提问作者Mubash
相关产品推荐
相关产品推荐

