首页 > 解决方案 > 在 Excel VBA 中循环并为每次迭代生成输出

问题描述

我试图通过创建一个循环来简化现有的宏录制。

在 Sheet1 上有一个活动方案设置为 1(“F4”)

'这将由用户手动从 1 更改为 6

当单元格 ("F4") 发生更改时,将在单元格 ("F8") 中产生相应的输出。

我想创建一个遍历每个场景(1-6)的宏,然后将单元格(“F8”)中每个场景的相应输出复制并粘贴到Sheet2上,作为“特殊值”,没有任何公式。例如,方案 1 的输出与 sheet2 上的单元格(“G25”)相关。

你知道如何简单地做到这一点吗?

这大致就是我的处理方式。

  Dim Scenario As Integer
    Dim Sheet1 As Worksheet
    Dim Sheet2 As Worksheet
    
    Set Sheet1 = ActiveWorkbook.Sheets("Sheet1")
    Set Sheet2 = ActiveWorkbook.Sheets("Sheet2")
    
       Sheet1.Range("F4").Select 'this is where i don't understand how to run through options 1 to 5 in cell F4 
    
For Scenario = 1 To 5
    
        If Scenario.Value = 1 Then
        Sheet1.Range("F8").Copy
        Sheet2.Range("G25").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
        ElseIf i.Value = 2 Then
          Sheet1.Range("F8").Copy
        Sheet2.Range("G25").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Else
        'nothing'
         End If
      Next Cell

标签: excelvba

解决方案


看来你只需要迭代场景的值,然后复制,像这样:

Sub scenarios()
Dim Scenario As Integer
    Dim Sheet1 As Worksheet
    Dim Sheet2 As Worksheet
    
    Set Sheet1 = ActiveWorkbook.Sheets("Sheet1")
    Set Sheet2 = ActiveWorkbook.Sheets("Sheet2")
    
    For Scenario = 1 To 5
    
        Sheet1.Range("F4").Value = Scenario
    
        Sheet1.Range("F8").Copy

        '
        ' if elif to paste to different destinations according to scenario
        '
        Sheet2.Range("G25").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
      Next
End Sub

推荐阅读