如何在不手动输入的情况下在 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怎么做)。