내 통합 문서에는 3 개의 시트가 있습니다.Excel VBA : 다른 셀 값을 사용하여 동일한 함수를 반복합니다.
I 메인 시트 B2:B5
세포에 입력을 입력합니다.이 입력에 따라 달라집니다. 계산 결과를 내 시트 RawImport A8:G8
셀에 저장하고 있습니다. 이제 마지막으로, RawImport A8:G8
셀 값, 다른 기능 및 최종 결과 수행은 PullData A:L
열에 저장됩니다.이 릴리스에서는 사용자가 Main
시트 (일반적으로 단일 데이터 세트)에만 B2:B5
셀을 사용할 수 있습니다.
이제 다음 버전의 일환으로, 나는 즉, 하나 개 이상의 데이터 세트, C2:C5
, D2:D5
, E2:E5
등하지만 첫 세트와 완전히 동일합니다 내 다른 시트에서 실행되는 기능을 가지고 싶습니다. C2의 경우 : C5, 나는 내 다른 시트에 사용 가능한 다음 열을 사용할 필요가
홈페이지 시트 B2:B5
는 RawImport A8 :G8
(8 열) 및 PullData A3:L3
(12 열)
홈페이지 시트 C2:C5
사용 RawImport H8:N8
(다음 사용 8 열) 및 PullData M3:X3
(다음 12 열) ... .... 현재
, 나는 동일한 기능을 실행하기 위해 같은 VBA 스크립트를 여러 번 쓰고 있어요. 즉, B2 : B5의 경우 RawImport A8 :G8
(8 열) 및 PullData A3:L3
을 내 코드에 사용하고 C2 : C5 다음 다른 열 집합을 다른 시트에 사용합니다. 모든 데이터 세트에서 사용되는 열 수는 모든 시트에서 동일합니다.
내가 따르는 논리는 B2 : B5의 끝에서 C2가 비어 있는지 확인하고 그 비어있는 경우에는 거기에서 내 코드를 끝내겠다. 그렇지 않으면 C2를 위해 작성된 코드를 호출 할 것이다. C5
어쨌든 나는 여러 번 코드를 작성하는 대신 간단한 방법을 사용할 수 있습니까?
Option Explicit
Sub GetData()
Dim Main As Worksheet
Dim RawImport As Worksheet
Dim PullData As Worksheet
Dim ticker As String
Dim exchange As String
Dim interval As Integer
Dim numPastTradingDays As Integer
Dim qurl As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
'''''''Data Entry to Sheet Main'''''''''''''''
Set Main = Workbooks("1.xlsm").Sheets("Main")
Set RawImport = Workbooks("1.xlsm").Sheets("RawImport")
Set PullData = Workbooks("1.xlsm").Sheets("PullData")
ticker = Main.Range("B2").Value
exchange = Main.Range("B3").Value
interval = Main.Range("B4").Value * 60
numPastTradingDays = Main.Range("B5").Value
'''''''Fill RawImport sheet A to G using Main sheet B2 to B5'''''''''''''''
RawImport.Range("A8").Value = ticker
RawImport.Range("B8").Value = interval
RawImport.Range("C8").Value = 300
RawImport.Range("D8").Value = 400
RawImport.Range("E8").Value = 500
RawImport.Range("F8").Value = exchange
RawImport.Range("G8").Value = interval
'''''''PullData sheet fill using RawImport data from A8 to G8'''''''''''''''
Dim lrA As Integer
lrA = RawImport.Range("B" & Rows.Count).End(xlUp).Row
PullData.Range("A3:A" & lrA - 5).Value = RawImport.Range("G8:G" & lrA).Value
PullData.Range("A3:A" & lrA).NumberFormat = "d mmm yyyy h:mm;@"
PullData.Range("A:A").Columns.AutoFit
PullData.Range("B3:B" & lrA - 5).Value = RawImport.Range("E8:E" & lrA).Value
PullData.Range("C3:C" & lrA - 5).Value = RawImport.Range("C8:C" & lrA).Value
PullData.Range("D3:D" & lrA - 5).Value = RawImport.Range("D8:E" & lrA).Value
PullData.Range("E3:E" & lrA - 5).Value = RawImport.Range("B8:B" & lrA).Value
PullData.Range("F3:F" & lrA - 5).Value = RawImport.Range("F8:F" & lrA).Value
PullData.Range("G3:G" & lrA - 5).Formula = "=(C3+D3+E3)/3"
PullData.Range("H3:H" & lrA - 5).Formula = "=G3*F3"
PullData.Range("I3:I" & lrA - 5).Formula = "=sum(H$2:H3)"
PullData.Range("J3:J" & lrA - 5).Formula = "=sum(F$2:F3)"
PullData.Range("K3:K" & lrA - 5).Formula = "=sum(I3/J3)"
PullData.Range("L3:L" & lrA - 5).Formula = "=((E3-K3)/K3)"
PullData.Range("G3:G" & lrA - 5) = PullData.Range("G3:G" & lrA - 5).Value
PullData.Range("H3:H" & lrA - 5) = PullData.Range("H3:H" & lrA - 5).Value
PullData.Range("I3:I" & lrA - 5) = PullData.Range("I3:I" & lrA - 5).Value
PullData.Range("J3:J" & lrA - 5) = PullData.Range("J3:J" & lrA - 5).Value
PullData.Range("K3:K" & lrA - 5) = PullData.Range("K3:K" & lrA - 5).Value
PullData.Range("L3:L" & lrA - 5) = PullData.Range("L3:L" & lrA - 5).Value
PullData.Range("G3:G" & lrA - 5).NumberFormat = "0.00"
PullData.Range("K3:K" & lrA - 5).NumberFormat = "0.00"
PullData.Range("L3:L" & lrA - 5).NumberFormat = "0.00%"
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
암이 정확하게 설정,하지만 내 첫번째 생각은 당신이 루프를 추가 할 때마다 관련 범위를 변경하려면 오프셋을 사용하는 것입니다 시각화하기 위해 애 쓰고 : 그러나 이것은 일반적인 개념은 가능성이 구현해야합니다입니다 . – SJR
더 나은 이해를 위해 스크린 샷을 추가했습니다. – acr