答案 0 :(得分:1)
或者编写一个简单的UDF来对字符串进行Evaluate。如果将数据设置为表格,则UDF将根据需要自动填充多行。
在标准模块中
Option Explicit
Public Function GetSum(ByVal myRange As Range) As Long
GetSum = Evaluate(myRange.Value)
End Function
这里讨论了类似的想法:
一个快速而又脏的版本,您可以在其中指定分隔符,例如“*”或其他分隔数字的内容
Public Function GetSum2(ByVal myRange As Range, ByVal delimiter As String) As Long
Dim myArr() As String
myArr = Split(myRange.Value, delimiter)
Dim outputValue As Long
outputValue = 1
Dim i As Long
For i = LBound(myArr) To UBound(myArr)
outputValue = outputValue * CLng(myArr(i))
Next i
GetSum2 = outputValue
End Function
答案 1 :(得分:1)
评估功能有效,但需要几个步骤才能使其正常工作,您不能像在评估中那样放入单元格($ A1) 您需要先设置命名范围
选择单元格B1
转到FORMULAS选项卡,然后单击Define Name
在对话框中,输入类似Result
的名称在“引用”框中,输入公式=评估($ A1)
单击“确定” 现在在B1类型中=结果
您可以将所有单元格向下拖动。
答案 2 :(得分:1)
如果您总是有3位数字,那么此数组公式将起作用(请记住,您需要按[Ctrl] + [Shift] + [Enter]将公式转换为数组公式)
=PRODUCT(0+(MID(B1,1+(4*(ROW(OFFSET($A$1,0,0,1+LEN(B1)-LEN(SUBSTITUTE(B1,"*","")),1))-1)),3)))
令人讨厌的是,MID
不能处理SUMPRODUCT
中的数组,所以这需要一个合适的数组公式:(
B1
是包含数字的单元格,$A$1
只是为了确保我们提取足够的3位数字(将其保留在第1行!)和{{1}应该是分隔符
答案 3 :(得分:1)
另一种选择:
=PRODUCT(--TRIM(MID(SUBSTITUTE($A1,"*",REPT(" ",999)),(ROW(1:3)-1)*999+1,999)))
使用Ctrl-Shift-Enter而不是Enter。作为数组公式。
答案 4 :(得分:0)
此处最简单的选项可能是将当前工作表另存为CSV文本文件。然后使用屏幕截图中的菱形符号作为分隔符重新导入此文件。这会将三个值中的每一个放在不同的列中。一旦你做到这一点,你可以简单地采用三列的产品。
答案 5 :(得分:0)
试试这段代码:
Sub CalculateVolumes()
Dim column As Long, lastRow As Long, i As Long, number As Variant, volume As Long
column = 1 'A column
lastRow = Cells(Rows.Count, column).End(xlUp).Row
For i = 1 To lastRow
volume = 1
For Each number In Split(Cells(i, column).Value, "*")
volume = volume * number
Next
'column + 1 means that I will put calculated volume next to the cell
Cells(i, column + 1).Value = volume
Next
End Sub
答案 6 :(得分:0)