Vba Excel计算后缀
我有一张纸,上面有一个包裹的3个侧面尺寸。 有没有办法得到这些尺寸的乘数值?有数百行,手动将花费太多时间Vba Excel计算后缀,vba,excel,Vba,Excel,我有一张纸,上面有一个包裹的3个侧面尺寸。 有没有办法得到这些尺寸的乘数值?有数百行,手动将花费太多时间 谢谢。这里最简单的选择可能是将当前工作表保存为CSV文本文件。然后使用屏幕截图中的菱形符号作为分隔符重新导入此文件。这将三个值分别放在单独的列中。一旦你做到了这一点,你可以简单地使用三列的乘积。这里最简单的选择可能是将当前工作表保存为CSV文本文件。然后使用屏幕截图中的菱形符号作为分隔符重新导入此文件。这将三个值分别放在单独的列中。一旦你做到这一点,你可以简单地取三列的乘积。或者写一个简单
谢谢。这里最简单的选择可能是将当前工作表保存为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的原因。我是否错过了一个技巧?很酷的公式!………..我们还可以将3MID()相乘
sMy公式允许任何数量的数字相乘,但仅当它们是3位数字时才允许相乘。@ScottCraner的答案将3个数字相乘,而不考虑数字。如果您将他的行(1:3)
替换为我的行(偏移量($1,0,0,1+LEN(B1)-LEN(替换为(B1,“*”,