2017-03-02 74 views
-1

我感觉我的上一个问题被误解了。因此,我会这样做。我想是这样的:如何在Excel模型中输入值而不手动执行?

Excel input and output field

在这张图片中,你看到的是,输入为4格B1。此B1单元格用作不同工作表中复杂模型的输入。该模型的输出与B2关联。我不想在另一张纸上修改复杂的模型(这部分是必需的)。

现在我想创建一个表是这样的:

Scene 2

因此,当输入为4时,从在另一片的模型的输出是1。现在我可以为手动执行此1,2和3,只需将B2(即4)写入的数字替换为1并检查其输出即可。让我们来观摩一下我们的复杂模型给我们:

enter image description here

显然,这给了我们一个9,所以我在F2填补9。现在这不是一个问题,因为我的表从1到4。但是,我该如何自动化?例如,如果我从1到100.

问题是,您无法在另一张纸上触摸或简化模型。

在VBA中如何做到这一点或在Excel本身做到这一点?

+0

谢谢您的回复,但这并不完全是我的意思。我已经用图像更新了这个问题。这个公式只是为了说明,与问题无关。 – Snowflake

回答

1

所以你想自动化通过你的模型的价值观并记录输出。

一个非常简单的方法就是将您的输入列表放入列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 

然后只需运行宏( - 为您轻松够谷歌怎么做,你可以将它链接到一个表单按钮或刚刚从VBE运行)。

2

我认为你的解释可能有问题。你的例子是A1 = 1,B1 = A1 + 5,尽管它是A1 & A2。如果我正确理解了你的困境,你正在寻找将公式拖到下一行(自动填充)。你可以用VBA做到这一点,但是你可以不用这样做

假如你有第一列中的数据(A),只要你希望公式可以旅行,你可以从右下角双击公式 - 参考单元格的一角,它会填满,也可以通过单击并按住公式参考单元的右下角拖动公式。 w如果光标从相对较大的“+”(内部颜色)变为相对较小的“+”(没有内部颜色......全部黑色),则如果您的右下角有变化。

您需要确保在执行此操作时具有相对引用,或者确保您的非相对引用是您想要的。这不仅仅是你提出的问题,而且在做这类工作时很重要。

参见此:

Range("B1").Formula = A1 + 5 

在该式中,A 1是由-1柱截止组相对于B1。公式所粘贴或拖曳的每个单元格将执行与-1列相对的单元格的公式。

您可以使用“$”将细节添加到列,行或单元格。假设你有你的榜样,并希望在C栏中显示公式。使用“$”有3种情况,其结果不同:

完全相对,拖动的公式会自动指定相邻列。

Range("B1").Formula = A1 + 5 
Range("C1").Formula = B1 + 5 
Range("B2").Formula = A2 + 5 
Range("C2").Formula = B2 + 5 

如果“$”是在公式中列前,在拖曳的将“锁定”列,因此当公式被拖动,列保持不变,但该行数量将更改。

Range("B1").Formula = $A1 + 5 
Range("C1").Formula = $A1 + 5 
Range("B2").Formula = $A2 + 5 
Range("C2").Formula = $A2 + 5 

如果“$”是在公式中的行前,在拖曳的将“锁定”行,所以当公式拖累,该行保持不变,但列将改变。

Range("B1").Formula = A$1 + 5 
Range("C1").Formula = B$1 + 5 
Range("B2").Formula = A$1 + 5 
Range("C2").Formula = B$1 + 5 

如果“$”是在每一个式中, - 将拖“锁定”无论是在列和行的前面。拖动公式时,被引用的单元格保持不变。

Range("B1").Formula = $A$1 + 5 
Range("C1").Formula = $A$1 + 5 
Range("B2").Formula = $A$1 + 5 
Range("C2").Formula = $A$1 + 5 

希望这可以帮助您,并且您正在寻找!

+0

现在我更仔细地阅读它。我认为你是对的 – Snowflake

相关问题