我需要从给定的字符串中提取相乘的数字。
乘法参数(作为字符串)是"x"
或"*"
(星号符号)。
数字本身可能包含(或不包含)英寸符号(双引号“)。
在乘法参数和数字本身之间可能存在(或不存在)白色。
我已经尝试了下面的函数,但它提取所有数字从字符串和合并它们.
另外,大小写敏感性并不重要,因为我总是在所有宏上使用Option Compare Text
。
| 当前字符串|预期结果|
| --------------|--------------|
| XX 2” 3”RRR|2x3|
| BBB 2”3”HHH|2x3|
| MMMM 235 FF EE|2x3x5|
| RTE 23 EE XX|2x3|
| AAA 4.5 x 5'' ERT EE|4.5x5|
| XX 4''x5'' XX|4x5|
| WWW 4''x 3.5 WWW|4x3.5|
| EEE 45 NN|4x5|
Function GetNumeric(CellRef As String)
Dim StringLength As Long, i As Long, Result As Variant
StringLength = Len(CellRef)
For i = 1 To StringLength
If IsNumeric(Mid(CellRef, i, 1)) Then
Result = Result & Mid(CellRef, i, 1)
End If
Next i
GetNumeric = Result
End Function
4条答案
按热度按时间pwuypxnk1#
这个答案是基于你之前的问题和给出的答案。它假设你也有不同的外观样本数据,例如
3 inch * 5 in
。你可以再次基于正则表达式创建自己的UDF。对于这个例子,我创建了一个'RegexExtract'和'RegexReplace'函数:我使用以下命令调用函数:
这导致:
RegexExtract:
这部分将查看您的输入并基于以下模式提取子字符串:
查看在线demo
\d+(?:\.\d+)?(?:''|"|in(?:ch)?\b)?
-用可选小数 * 和 * 可选尾随英寸分界匹配数字;(?:
-打开非捕获组;\s*[*x]\s*
-在0+空格字符之间匹配星号或文字'x';\d+(?:\.\d+)?(?:''|"|in(?:ch)?\b)?
-匹配与第一个bullit中相同的图案;)*
-关闭非捕获组并匹配0+次。RegexReplace:
这部分将查看您的输入并基于以下模式替换子字符串:
查看在线demo
(\d+(?:\.\d+)?)
-第一个捕获组,用于匹配具有可选小数的数字;[^\d.]+
- 1+(Greedy)除数字或点以外的字符。替换为对此第一组的反向引用:
**注意:**链接将显示不同的模式,以排除示例中的换行符。
yvfmudvl2#
使用简单替换:
pnwntuvh3#
这将工作,但是,
Option Compare Text
将导致问题,如果你有大写的X
s在您的样本数据。如果你需要一个可以使用
Option Compare Text
的函数,你可以用途:最后,一个应该允许
2X2
的版本:感谢FunThomas的帮助。
结果:
axzmvihb4#
您可以将此函数与查找表一起使用:
CHAR(SEQUENCE(26,,65)
创建从A到Z的列表---更新:VBA解决方案