2014-04-04 25 views
1

我一直在努力試圖弄清楚這一點。我在Excel文件的某個工作表中有一組數據。我編寫了代碼,以便將其中的一些信息輸出到另一張紙上。我不知道如何讓函數遍歷所有不同的數據集並將它們輸出到我的excel文件中不同行的「輸出」表中。爲多個數據集運行函數並將結果輸出到不同的單元格

這是我到目前爲止。有人可以幫忙嗎?

  1. 我該如何獲得函數來運行約6個數據集,其中包括5個單元格在列中,直到有2個空白單元格?
  2. 如何將這些不同的結果輸出到另一張紙上?我已經有他們輸出第一個數據集,它工作正常。我只需要知道如何去做其他的。

謝謝!

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

歡迎來到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 

我不知道你的數據源的樣子,但希望它是建立在,你可以把輸入AQUISITION進入一個循環的方式。例如,如果數據行來進入系統(你的例子似乎不這樣做),你可以只增加行數,這樣的事情:

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 

我希望這有助於你的挑戰。

相關問題