如何在不手动输入的情况下在 Excel 模型中输入值?
How do I input values in the Excel model without doing it manually?
我感觉我之前的问题被误解了。因此,我将按如下方式进行。我想要的是:
在此图片中,您看到单元格 B1 中的输入为 4。此 B1 单元格用作不同 sheet 中复杂模型的输入。该模型的输出链接到 B2。我不想在另一个上修改复杂的模型sheet(这部分是必需的)。
现在我想创建一个 table 这样的:
所以当输入为 4 时,另一个 sheet 中模型的输出为 1。现在我可以手动为 1、2 和 3 执行此操作,只需替换写在 B2 处的数字 (这是 4) 到 1 并检查其输出。让我们观察一下我们的复杂模型给我们带来了什么:
显然它给了我们一个 9,所以我在 F2 中填入 9。现在这不是问题,因为我的 table 从 1 变为 4。但是我如何自动执行此操作?例如,如果我从 1 到 100。
问题是,您无法触摸或简化另一个模型 sheet。
如何在 VBA 中做到这一点或在 Excel 中做到这一点?
我认为您的解释可能有问题。你的例子是 A1 = 1, B1 = A1+5,尽管说它是 A1 & A2。当我相信你的意思是“第 3 和 4 行”时,你说的是 "Columns C & D"。
如果我对您的困境的理解正确,您希望将公式向下拖动(自动填充)到后续行。你可以使用 VBA 来做到这一点,但你也可以不用。
如果您在第一列 (A) 中有您希望公式运行的数据,您可以双击公式引用单元格的右下角,它会向下填充。您也可以通过单击并按住公式引用单元格的右下角来向下拖动公式。
如果您的光标从相对较大的“+”(有内部颜色)变为相对较小的“+”(没有内部颜色。 .. 全黑)。
您需要确保在执行此操作时有相对引用,或者确保您的非相对引用是您想要的。这不仅仅是您提出的问题,但在进行此类工作时很重要。
看到这个:
Range("B1").Formula = A1 + 5
在此公式中,A1 相对于 B1 偏移 -1 列。粘贴或拖入公式的每个单元格都将使用相对于 -1 列的单元格执行公式。
您可以使用“$”向列、行或单元格添加细节。假设您有自己的示例,并且想在 C 列中显示公式。使用“$”有 3 种情况,结果不同:
完全相对,拖动的公式会自动指定相邻的列。
Range("B1").Formula = A1 + 5
Range("C1").Formula = B1 + 5
Range("B2").Formula = A2 + 5
Range("C2").Formula = B2 + 5
如果公式中“$”在列的前面,拖拽会"lock"列,所以当公式被拖拽时,列保持不变,但行号会改变。
Range("B1").Formula = $A1 + 5
Range("C1").Formula = $A1 + 5
Range("B2").Formula = $A2 + 5
Range("C2").Formula = $A2 + 5
如果公式中“$”在行的前面,拖拽会"lock"行,所以当公式被拖拽时,行保持不变,但列会改变.
Range("B1").Formula = A + 5
Range("C1").Formula = B + 5
Range("B2").Formula = A + 5
Range("C2").Formula = B + 5
如果“$”位于公式中每一列和每一行的前面,则拖动将同时 "lock"。拖动公式时,引用的单元格保持不变。
Range("B1").Formula = $A + 5
Range("C1").Formula = $A + 5
Range("B2").Formula = $A + 5
Range("C2").Formula = $A + 5
希望对您有所帮助,这正是您要找的!
因此,您希望通过模型自动输入值并记录输出。
一个非常简单的方法是将您的输入列表放在 E 列中,如您的示例图片所示。记下开始和结束行号 - 在您的示例中为 2 和 5(因为您的输入值在 E2:E5 范围内)。
在 VBA 编辑器中,在新模块中创建了一个新的子模块来保存您的代码(您可以 Google 如何执行此操作)。代码相当简单。
Sub TurnInputsIntoOutputs()
' First we create some useful and important variables
Dim inputStartRow As Long ' The row your input values start on
Dim inputEndRow As Long ' The row your input values end on
Dim currentRow As Long ' A placeholder for when we cycle through the rows
Dim processingWorksheet As Worksheet ' How we're going to reference your worksheet
' Then we put values into those variables
inputStartRow = 2
inputEndRow = 5
Set processingWorksheet = ThisWorkbook.Sheets("*the name of your worksheet here*")
' Now we cycle through the input rows
For currentRow = inputStartRow to inputEndRow
' Put input value from the current row of column E into cell B1
processingWorksheet.Range("B1").Value = processingWorksheet.Range("E" & currentRow).Value
' Put the resulting output value into the current row of column F
processingWorksheet.Range("F" & currentRow).Value = processingWorksheet.Range("B2").Value
Next currentRow
End Sub
然后只是 运行 你的宏(你可以 link 它到一个表单按钮或者只是 运行 它来自 VBE - 很容易让你 Google怎么做)。
我感觉我之前的问题被误解了。因此,我将按如下方式进行。我想要的是:
在此图片中,您看到单元格 B1 中的输入为 4。此 B1 单元格用作不同 sheet 中复杂模型的输入。该模型的输出链接到 B2。我不想在另一个上修改复杂的模型sheet(这部分是必需的)。
现在我想创建一个 table 这样的:
所以当输入为 4 时,另一个 sheet 中模型的输出为 1。现在我可以手动为 1、2 和 3 执行此操作,只需替换写在 B2 处的数字 (这是 4) 到 1 并检查其输出。让我们观察一下我们的复杂模型给我们带来了什么:
显然它给了我们一个 9,所以我在 F2 中填入 9。现在这不是问题,因为我的 table 从 1 变为 4。但是我如何自动执行此操作?例如,如果我从 1 到 100。
问题是,您无法触摸或简化另一个模型 sheet。
如何在 VBA 中做到这一点或在 Excel 中做到这一点?
我认为您的解释可能有问题。你的例子是 A1 = 1, B1 = A1+5,尽管说它是 A1 & A2。当我相信你的意思是“第 3 和 4 行”时,你说的是 "Columns C & D"。
如果我对您的困境的理解正确,您希望将公式向下拖动(自动填充)到后续行。你可以使用 VBA 来做到这一点,但你也可以不用。
如果您在第一列 (A) 中有您希望公式运行的数据,您可以双击公式引用单元格的右下角,它会向下填充。您也可以通过单击并按住公式引用单元格的右下角来向下拖动公式。
如果您的光标从相对较大的“+”(有内部颜色)变为相对较小的“+”(没有内部颜色。 .. 全黑)。
您需要确保在执行此操作时有相对引用,或者确保您的非相对引用是您想要的。这不仅仅是您提出的问题,但在进行此类工作时很重要。
看到这个:
Range("B1").Formula = A1 + 5
在此公式中,A1 相对于 B1 偏移 -1 列。粘贴或拖入公式的每个单元格都将使用相对于 -1 列的单元格执行公式。
您可以使用“$”向列、行或单元格添加细节。假设您有自己的示例,并且想在 C 列中显示公式。使用“$”有 3 种情况,结果不同:
完全相对,拖动的公式会自动指定相邻的列。
Range("B1").Formula = A1 + 5
Range("C1").Formula = B1 + 5
Range("B2").Formula = A2 + 5
Range("C2").Formula = B2 + 5
如果公式中“$”在列的前面,拖拽会"lock"列,所以当公式被拖拽时,列保持不变,但行号会改变。
Range("B1").Formula = $A1 + 5
Range("C1").Formula = $A1 + 5
Range("B2").Formula = $A2 + 5
Range("C2").Formula = $A2 + 5
如果公式中“$”在行的前面,拖拽会"lock"行,所以当公式被拖拽时,行保持不变,但列会改变.
Range("B1").Formula = A + 5
Range("C1").Formula = B + 5
Range("B2").Formula = A + 5
Range("C2").Formula = B + 5
如果“$”位于公式中每一列和每一行的前面,则拖动将同时 "lock"。拖动公式时,引用的单元格保持不变。
Range("B1").Formula = $A + 5
Range("C1").Formula = $A + 5
Range("B2").Formula = $A + 5
Range("C2").Formula = $A + 5
希望对您有所帮助,这正是您要找的!
因此,您希望通过模型自动输入值并记录输出。
一个非常简单的方法是将您的输入列表放在 E 列中,如您的示例图片所示。记下开始和结束行号 - 在您的示例中为 2 和 5(因为您的输入值在 E2:E5 范围内)。
在 VBA 编辑器中,在新模块中创建了一个新的子模块来保存您的代码(您可以 Google 如何执行此操作)。代码相当简单。
Sub TurnInputsIntoOutputs()
' First we create some useful and important variables
Dim inputStartRow As Long ' The row your input values start on
Dim inputEndRow As Long ' The row your input values end on
Dim currentRow As Long ' A placeholder for when we cycle through the rows
Dim processingWorksheet As Worksheet ' How we're going to reference your worksheet
' Then we put values into those variables
inputStartRow = 2
inputEndRow = 5
Set processingWorksheet = ThisWorkbook.Sheets("*the name of your worksheet here*")
' Now we cycle through the input rows
For currentRow = inputStartRow to inputEndRow
' Put input value from the current row of column E into cell B1
processingWorksheet.Range("B1").Value = processingWorksheet.Range("E" & currentRow).Value
' Put the resulting output value into the current row of column F
processingWorksheet.Range("F" & currentRow).Value = processingWorksheet.Range("B2").Value
Next currentRow
End Sub
然后只是 运行 你的宏(你可以 link 它到一个表单按钮或者只是 运行 它来自 VBE - 很容易让你 Google怎么做)。