运行多个数据集的函数并将结果输出到不同的单元格

时间:2014-04-04 21:37:52

标签: vba excel-vba excel

我一直在努力尝试解决这个问题。我的Excel文件中的某个工作表中有一组数据。我编写了代码,以便将一些信息输出到另一张表。我不知道如何让函数循环遍历所有不同的数据集,并将它们输出到我的excel文件中不同行的“输出”表中。

这是我到目前为止所拥有的。有人可以帮忙吗?

  1. 如何让函数运行大约6个包含5个单元格的数据集,直到有2个空白单元格?
  2. 如何将这些不同的结果输出到另一张纸?我已经让他们输出第一个数据集,它工作正常。我只需要知道如何做其他的。
  3. 谢谢!

    Sub EstBatch()
    
    'variables
    Dim N As String
    Dim D As Date
    Dim P As Integer
    Dim H As Single
    Dim NS As Integer
    Dim NL As Integer
    Dim BP As Currency
    Dim OH As Single
    Dim OC As Currency
    Dim TP As Currency
    Dim PPBR As Currency
    Dim EHP As Single
    Dim batches As Range
    
    'inputs
    N = Sheets("Batch Input").Range("A1").Value
    D = Sheets("Batch Input").Range("B1").Value
    P = Sheets("Batch Input").Range("A2").Value
    H = Sheets("Batch Input").Range("A3").Value
    PPBR = Sheets("User Form").Range("C22").Value
    EHP = Sheets("User Form").Range("C23").Value
    
    Range("A1").Select
    'Processes
    
    BP = P * PPBR
    OH = H - 5
    
    If P > 120 Or P < 20 Then
        MsgBox ("Cannot Accommodate Group")
    ElseIf P >= 20 And P <= 25 Then
        NS = 1
        NL = 0
    ElseIf P >= 26 And P <= 50 Then
        NS = 2
        NL = 0
    ElseIf P >= 51 And P <= 60 Then
        NS = 0
        NL = 1
    ElseIf P >= 61 And P <= 85 Then
        NS = 1
        NL = 1
    ElseIf P >= 86 And P <= 120 Then
        NS = 0
        NL = 2
    End If
    
    If OH > 4 Then
    OH = 4
    OC = BP * OH * EHP
    ElseIf 0 < OH <= 4 Then
    OC = BP * OH * EHP
    ElseIf OH <= 0 Then
    OC = 0
    End If
    
    TP = BP + OC
    
    
    'outputs
    Sheets("Batch Output").Range("A2").Value = N
    Sheets("Batch Output").Range("B2").Value = D
    Sheets("Batch Output").Range("C2").Value = P
    Sheets("Batch Output").Range("D2").Value = H
    Sheets("Batch Output").Range("E2").Value = PPBR
    Sheets("Batch Output").Range("F2").Value = EHP
    Sheets("Batch Output").Range("G2").Value = NS
    Sheets("Batch Output").Range("H2").Value = NL
    Sheets("Batch Output").Range("I2").Value = BP
    Sheets("Batch Output").Range("J2").Value = OH
    Sheets("Batch Output").Range("K2").Value = OC
    Sheets("Batch Output").Range("L2").Value = TP
    End Sub
    

1 个答案:

答案 0 :(得分:1)

欢迎使用StackOverflow。好的第一个问题。

我认为你所要达到的是如何使用循环来解决这样的问题。

一个简单的循环方法是使用计数器,如下面给出的示例中所示。如果合适,您还可以使用一系列单元格来循环遍历数据,如本答案中所述:https://stackoverflow.com/a/19394207/2665195

从第二个问题开始:如果您想为每个输出单独使用一张表格,可以使用Sheets.Add并粘贴到该新表格中。为此,您需要使用变量命名约定,如Sheets("Batch Output" & X).Range。通过这种方式,您可以Dim X as Integer循环遍历每个循环递增X整数的过程。以下是您可以根据自己的目的调整的示例代码:

Sub ExampleAddSheets()

    Dim intX As Integer
        intX = 1
    Dim wsBatchOutput As Worksheet

    For intX = 1 To 6
        Set wsBatchOutput = Worksheets.Add 'adds a worksheet and tags it to a variable
         wsBatchOutput.Name = "BatchOutput" & intX 'names the worksheet
        wsBatchOutput.Range("A1").Value = "Data here.  Example " & intX 
    Next intX

    Set wsBatchOutput = Nothing

End Sub

我不知道您的数据源是什么样的,但希望它的设置方式可以将输入请求转换为循环。例如,如果数据以行的形式进入系统(您的示例似乎没有这样做),您可以只增加行号,如下所示:

Sub ExampleSetInputs()

    'variables
        Dim N As String
        Dim D As Date
        Dim P As Integer
        Dim H As Single
        Dim PPBR As Currency
        Dim EHP As Single
        Dim intRow As Integer
            intRow = 2

    'inputs
        For intRow = 2 To 7
            N = Sheets("Batch Input").Range("A" & intRow).Value
            D = Sheets("Batch Input").Range("B" & intRow).Value
            P = Sheets("Batch Input").Range("C" & intRow).Value
            H = Sheets("Batch Input").Range("D" & intRow).Value
        Next intRow

End Sub

我希望这有助于您的挑战。