Vba Excel计算后缀

Vba Excel计算后缀,vba,excel,Vba,Excel,我有一张纸,上面有一个包裹的3个侧面尺寸。 有没有办法得到这些尺寸的乘数值?有数百行,手动将花费太多时间 谢谢。这里最简单的选择可能是将当前工作表保存为CSV文本文件。然后使用屏幕截图中的菱形符号作为分隔符重新导入此文件。这将三个值分别放在单独的列中。一旦你做到了这一点,你可以简单地使用三列的乘积。这里最简单的选择可能是将当前工作表保存为CSV文本文件。然后使用屏幕截图中的菱形符号作为分隔符重新导入此文件。这将三个值分别放在单独的列中。一旦你做到这一点,你可以简单地取三列的乘积。或者写一个简单

我有一张纸,上面有一个包裹的3个侧面尺寸。

有没有办法得到这些尺寸的乘数值?有数百行,手动将花费太多时间


谢谢。

这里最简单的选择可能是将当前工作表保存为CSV文本文件。然后使用屏幕截图中的菱形符号作为分隔符重新导入此文件。这将三个值分别放在单独的列中。一旦你做到了这一点,你可以简单地使用三列的乘积。

这里最简单的选择可能是将当前工作表保存为CSV文本文件。然后使用屏幕截图中的菱形符号作为分隔符重新导入此文件。这将三个值分别放在单独的列中。一旦你做到这一点,你可以简单地取三列的乘积。

或者写一个简单的UDF对字符串进行求值。如果将数据设置为表格,则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

或者编写一个简单的UDF对字符串进行求值。如果将数据设置为表格,则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
请尝试以下代码:

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
请尝试以下代码:

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

Evaluate函数可以工作,但需要几个步骤才能工作,不能像in=Evaluate($A1)那样放入单元格 您需要先设置一个命名范围

选择单元格B1

转到“公式”选项卡,然后单击“定义名称”

在对话框中,键入类似结果的名称

在“引用”框中,输入公式=评估($A1)

单击“确定” 现在在B1中键入in=结果


您可以将其向下拖动到所有单元格。

求值函数可以工作,但需要几个步骤才能使其工作,您不能将其作为in=Evaluate($A1)放入单元格中 您需要先设置一个命名范围

选择单元格B1

转到“公式”选项卡,然后单击“定义名称”

在对话框中,键入类似结果的名称

在“引用”框中,输入公式=评估($A1)

单击“确定” 现在在B1中键入in=结果

对于所有单元格,您都可以将其向下拖动。

不使用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))
不带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))

如果您总是有3位数字,那么此数组公式将起作用(请记住,您需要按[Ctrl]+[Shift]+[Enter]将公式转换为数组公式)

令人烦恼的是,
MID
SUMPRODUCT
中的数组上不起作用,因此这需要一个合适的数组公式:(


B1
是带有数字的单元格,
$A$1
只是为了确保我们提取出足够的3位数字(保留在第1行!),并且
“*”
应该是除数字符

如果你总是有3位数字,那么这个数组公式将起作用(记住你需要点击[Ctrl]+[Shift]+[Enter]将公式转换为数组公式的步骤)

令人烦恼的是,
MID
SUMPRODUCT
中的数组上不起作用,因此这需要一个合适的数组公式:(

B1
是带有数字的单元格,
$A$1
只是为了确保我们提取足够的3位数字(保留在第1行!),而
“*”
应该是除味器字符

另一个选项:

=PRODUCT(--TRIM(MID(SUBSTITUTE($A1,"*",REPT(" ",999)),(ROW(1:3)-1)*999+1,999)))
作为数组公式,使用Ctrl-Shift-Enter键代替Enter键。

另一个选项:

=PRODUCT(--TRIM(MID(SUBSTITUTE($A1,"*",REPT(" ",999)),(ROW(1:3)-1)*999+1,999)))


作为一个数组公式,使用Ctrl-Shift-Enter而不是Enter。

这就是值在单元格中的显示方式吗?此解决方案需要一些VBA代码,这就是我编辑的原因tags@MichałTurczyn VBA可能是一种方法,但为什么不重新导入并分离这三个值呢?您可以使用evalute,例如
evaluate(“=”&range(“A1”))
。单元格中的值就是这样显示的吗?此解决方案需要一些VBA代码,这就是我编辑的原因tags@MichałTurczyn VBA可能是一种方法,但为什么不重新导入并分离这三个值呢?您可以使用evalute,例如
evaluate(“=”&range(“A1”))
。您可以跳过导出和导入,只使用文本到列。@ScottCraner我不知道这个功能。您可以跳过导出和导入,只使用文本到列。@ScottCraner我不知道这个功能。我不能100%确定分隔符实际上是一个星号。您的眼睛多么锐利!这是一个很好的答案,肯定有用对于需要VBA解决方案的人+1。这似乎是需要指定Value属性的情况之一。
Evaluate(Range(“A1”)
不起作用,尽管
Evaluate(“=”&Range(“A1”))
是的。正如SJR所同意的。这就是我使用myRange.Value的原因。我是否错过了一个技巧?我不能100%确定分隔符实际上是一个星号。你的眼睛多么锐利!这是一个很好的答案,对于需要VBA解决方案+1的人来说肯定很有用。这似乎是需要指定Value属性的情况之一。
Evaluate(Range(“A1”)
不起作用,尽管
Evaluate(“=”&Range(“A1”)
起作用。正如SJR所同意的。这就是我使用myRange.Value的原因。我是否错过了一个技巧?很酷的公式!………..我们还可以将3
MID()相乘
sMy公式允许任何数量的数字相乘,但仅当它们是3位数字时才允许相乘。@ScottCraner的答案将3个数字相乘,而不考虑数字。如果您将他的
行(1:3)
替换为我的
行(偏移量($1,0,0,1+LEN(B1)-LEN(替换为(B1,“*”,