我在一列中的每个单元格中都有字母数字文本,并希望借助公式获取每个单元格数字的乘积(忽略字母字符)。每个单元格中的字符数不同,例如:
24R2 should return product of 48
7S11 should return product of 77
12R4 should return product of 48
2P6 should return product of 12
等等。有没有一个简单的函数可以做到这一点?
答案1
好吧,我当然不会称其为简单,但这就是我想出的:
=LEFT(A1,IF(LEN(A1)=0,0,MIN(IF(1*ISNUMBER(1*MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))*(ISNUMBER(A1)=FALSE)-1)*RIGHT(A1,LEN(A1)-IF(LEN(A1)=0,0,MIN(IF(1*ISNUMBER(1*MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))*(ISNUMBER(A1)=FALSE))
其中 A1 包含值。
怎么运行的:
=IF(LEN(A1)=0,0,MIN(IF(1*ISNUMBER(1*MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))*(ISNUMBER(A1)=FALSE)
将获取字符串的第一个字母字符索引。
然后只需将该索引插入到:
=LEFT(A1,(alpha index) -1)*RIGHT(A1,LEN(A1)-(alpha index))
解析出左边和右边的数字,然后将它们相乘。
答案2
答案3
答案4
与仅使用本机工作表函数的工作表公式相比,VBA 至少有两个优点。
- 这Val 函数将读取一个前缀数值直到一个字母字符,而不提供字母字符的位置。例如
Val("24R2")
返回24
。 - VBA 有一个原生分割功能它可以使用字母作为分隔符,快速将前缀和后缀数值划分为变体数组。
VBA 用户定义函数将被放置在标准模块代码表中(例如 Module1):
Option Explicit
Function sumBits(ByVal str As String) As Long
Dim ems As Variant
ems = Split(str, Mid(str, Len(CStr(Val(str))) + 1, 1))
sumBits = ems(0) * ems(1)
End Function
警告:这假定前缀数值中没有前导零。