Excel计算后缀

时间:2018-03-14 13:50:54

标签: excel vba excel-vba

我有一张包含3个侧面尺寸的纸张。 dimension column

有没有办法获得这些尺寸的乘积值?有数百行,手动会占用太多时间。

谢谢。

7 个答案:

答案 0 :(得分:1)

或者编写一个简单的UDF来对字符串进行Evaluate。如果将数据设置为表格,则UDF将根据需要自动填充多行。

在标准模块中

Option Explicit

Public Function GetSum(ByVal myRange As Range) As Long
    GetSum = Evaluate(myRange.Value)
End Function

Output

这里讨论了类似的想法:

https://superuser.com/questions/253353/excel-function-that-evaluates-a-string-as-if-it-were-a-formula

一个快速而又脏的版本,您可以在其中指定分隔符,例如“*”或其他分隔数字的内容

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)

没有VBA

A1 中的数据,在 B1 中输入:

=TRIM(MID(SUBSTITUTE($A1,"*",REPT(" ",999)),999-998,999))*TRIM(MID(SUBSTITUTE($A1,"*",REPT(" ",999)),2*999-998,999))*TRIM(MID(SUBSTITUTE($A1,"*",REPT(" ",999)),3*999-998,999))

enter image description here