我为汽车应用设计了一个excel数学工具。该工具输入5个输入(1个数据组),并返回4个输出。问题是我有20000个数据集(每个数据集有5个输入),我需要为20000个数据集计算输出(每个数据集4个输出)。如果你们可以尝试帮助我,真的很感激。我真的很感激,如果有人可以一步一步解释我必须要做的事情。 或者换句话说,我有2个excel工作簿。一个是数学工具,另一个是数据表,其输入数据为20000套。我希望数学工具从数据表中调用输入数据,并将计算出的值返回到与输出相同的数据表。
答案 0 :(得分:0)
根据您上一次评论的图片,我现在有一个像这样的TOOL.xlsm:
和这样的DATA.xlsx:
注意TOOL.xlsm的.xlsm,因为其中必须有宏。
然后我在TOOL.xlsm中有一个带有以下宏的模块:
Sub calculateInputRange()
Dim oWBTOOL As Workbook, oWBDATA As Workbook
Set oWBTOOL = ThisWorkbook
Set oWBDATA = Workbooks("DATA.xlsx")
'DATA.xlsx has to be open. TODO:Error handling if not
oWBDATA.Activate
Dim oInputRange As Range, oOutputStartRange As Range
On Error Resume Next
Set oInputRange = Application.InputBox("Select range with INPUT values", Type:=8)
Set oOutputStartRange = Application.InputBox("Select start range for Output values", Type:=8)
On Error GoTo 0
If oInputRange Is Nothing Or oOutputStartRange Is Nothing Then Exit Sub
Dim oRow As Range
Dim i As Long
For Each oRow In oInputRange.Rows
oWBTOOL.Worksheets("INPUT|OUTPUT").Range("C3:C6").Value = WorksheetFunction.Transpose(oRow.Value)
Calculate
oOutputStartRange.Offset(i, 0).Value = oWBTOOL.Worksheets("INPUT|OUTPUT").Range("F3").Value
oOutputStartRange.Offset(i, 1).Value = oWBTOOL.Worksheets("INPUT|OUTPUT").Range("F4").Value
i = i + 1
Next
End Sub
必须打开工作簿TOOL.xlsm和DATA.xlsx。
现在你可以运行宏了。它将首先询问具有INPUT值的范围。选择所有输入值,例如B4:E20。然后它会询问OUTPUT值的起始范围。例如,选择一个单元格H4。
宏从所选输入值逐行获取,并将这些值放在oWBTOOL.Worksheets("INPUT|OUTPUT").Range("C3:C6").Value
中。然后计算并将oWBTOOL.Worksheets("INPUT|OUTPUT").Range("F3").Value
和...Range("F4").Value
的结果值带入DATA.xlsx。
这就是您所描述的要求。但这并不是我所说的最好的解决方案。如果DATA.xlsx中的输入值发生更改,则结果值不会自动更改。您必须运行宏来选择更改的输入值和输出值的起始单元格。
考虑直接在VBA中进行“计算器”表中的计算。那么你可以在TOOL.xlsm中有一个用户定义函数(UDF),如下所示:
Public Function getResultsFromMyTool(inputs As Range) As Variant
'inputs is a range
Dim arr_inputs As Variant
arr_inputs = inputs.Value
'now arr_inputs is an array
'get the single inputs from the array
'we get only the case, that inputs was a range of cells in a row
Dim i1 As Double, i2 As Double, i3 As Double, i4 As Double, i5 As Double
i1 = arr_inputs(1, 1)
i2 = arr_inputs(1, 2)
i3 = arr_inputs(1, 3)
i4 = arr_inputs(1, 4)
'simply do here what your tool does with the inputs in sheet "calculator"
Dim arr_outputs(0 To 3) As Double
arr_outputs(0) = i1 + i3 / i4 - i2
arr_outputs(1) = i2 * i3 / i2 + i4
'return the output array
getResultsFromMyTool = arr_outputs
End Function
在DATA.xlsx H4:I4中你简单地打电话:
{=TOOL.xlsm!getResultsFromMyTool(B4:E4)}
并根据需要向下填写。
每次运行工作表计算时,都会更新此UDF的结果,就像其他Excel公式一样。在我看来这会更好。