EXCEL的一个单元格包含多组文字对应数字(如图),请问如何进行公式计算

2025-03-11 08:59:00
推荐回答(4个)
回答1:

因为比较复杂,直接用公式书写麻烦、不易实现,建议使用VBA

Alt+F11,调出VBA,然后“插入”——“模块”

问题1:

Function Suma(Rng As Range) As Integer
    Dim Tmp As String, Arr
    Tmp = Rng.Text
    Tmp = Replace(Tmp, "空粒(板、袋、装量不足)(", "")
    Tmp = Replace(Tmp, ") 残(半)片(粒)(", ",")
    Tmp = Replace(Tmp, ")双(多)片(粒)(", ",")
    Tmp = Replace(Tmp, ")漏粉(液)(", ",")
    Tmp = Replace(Tmp, ")异物(", ",")
    Tmp = Replace(Tmp, ")空胶囊(", ",")
    Tmp = Replace(Tmp, ")板面不净(", ",")
    Tmp = Replace(Tmp, ")双帽(", ",")
    Tmp = Replace(Tmp, ")", "")
    Arr = Split(Tmp, ",")
    Suma = 0
    For i = 0 To 6
        If Arr(i) <> "" Then Suma = Suma + Arr(i) * IIf(i = 0, 10, 1)
    Next i
 End Function

如果数据在A1,在B1可以输入公式:=Suma(A1)  就可以得到和,82


问题2:  也可以用VBA循环得到,但是建议将数据先单独取出来再计算。用VBA:

Function EachData(Rng As Range, n) As Integer
    Dim Tmp As String, Arr
    Tmp = Rng.Text
    Tmp = Replace(Tmp, "空粒(板、袋、装量不足)(", "")
    Tmp = Replace(Tmp, ") 残(半)片(粒)(", ",")
    Tmp = Replace(Tmp, ")双(多)片(粒)(", ",")
    Tmp = Replace(Tmp, ")漏粉(液)(", ",")
    Tmp = Replace(Tmp, ")异物(", ",")
    Tmp = Replace(Tmp, ")空胶囊(", ",")
    Tmp = Replace(Tmp, ")板面不净(", ",")
    Tmp = Replace(Tmp, ")双帽(", ",")
    Tmp = Replace(Tmp, ")", "")
    Arr = Split(Tmp, ",")

    EachData = IIf(Arr(n - 1) = "", 0, Arr(n - 1))
    

End Function

使用方法:

如果这样,其实问题一的求和不用单独写一个VBA。得到每个项的数字,在后面直接计算就行。纵向计算也方便。

问题3:没看懂

回答2:

这种写法的格式,造成了写函数的复杂性

回答3:

格式一致,最好分列,然后处理数据。

回答4:

可以用正则提取出数字,再进行计算。
但是需要确定表格中的文本的格式是否规律、一致。
例如:是否每个单元格都有这几项,数量是否都在括号中,数量括号中是否一定有数字,文本是半角还是全角输入的等等,最好上传一部分数据。