VBA 코드와 관련하여 도움이 필요합니다.간격이 0에서 다시 시작될 때 새 루프 감지
나는 이름이 나열된 데이터베이스가 있습니다. 각 이름에는 여러 개의 간격이 있습니다! 값이 '0'인 최대 상단에서 시작하여 특정 깊이 (2000-4000)에서 최대 기준으로 끝납니다.
각 간격은 숫자 (1 - 6)로 분류됩니다. 나는 일정한 증분 단계로 연속적인 시리즈를 만들고 싶다. 이것은 간격이 작은 증분 단계가있는 연속 시리즈로 대체됨을 의미합니다. 연속 시리즈 옆에는 분류가 표시됩니다.
결과는 두 번째 워크 시트 ('샘플'시트)에 저장됩니다. 나는 1 개의 이름에 대해 원하는 결과를 얻을 수 있었다. 이제 더 많은 이름에 대한 결과를 얻고 싶지만 코드에 새로운 이름으로 새 루프를 시작하고 동일한 작업을 반복해야한다는 것을 코드에 알려주는 방법을 모르겠습니다 (새로운 최대 값 '0'). .
가능한 경우 새 통합 문서에 모든 새 이름의 결과가 표시됩니다. 세척 된입니다
[코드]
Sub IntervalToSample()
Dim Cancelled As Boolean, OldStatusbar As Boolean
Dim NOI As Integer, TI As Integer, TS As Integer, DOF As Integer
Dim i As Integer, j As Integer, Samples As Integer, SII As Integer
Dim Counter As Long, Bounter As Long
Dim Top As Double, Base As Double, Inc As Double, TopI As Double, BaseI As Double
Dim WellN As String, Well_Name As String, Well_Top As String, Well_Base As String
Dim Incremental_Step As String, Total_Intervals As String, Total_Samples As String
Dim MainWkbk As Workbook, Well1 As Workbook
Dim Start As Worksheet, Data As Worksheet, Sheet1 As Worksheet
OldStatusbar = Application.DisplayStatusBar
Set MainWkbk = ActiveWorkbook
DOF = 5
Counter = 0
Bounter = 0
SII = 0
WellN = Sheets("Data").Cells(DOF + 1, 1)
Top = Sheets("Data").Cells(DOF + 1, 2)
Inc = Sheets("Start").Cells(1, 6)
Sheets("Data").Select
Range("A1").End(xlDown).Select
TI = ActiveCell.Row - DOF
Base = Sheets("Data").Cells(ActiveCell.Row, 3)
TS = Int((Base - Top)/Inc) + 2
Incremental_Step = Sheets("Start").Cells(1, 5)
Well_Name = Sheets("Start").Cells(2, 5)
Well_Top = Sheets("Start").Cells(3, 5)
Well_Base = Sheets("Start").Cells(4, 5)
Total_Intervals = Sheets("Start").Cells(5, 5)
Total_Samples = Sheets("Start").Cells(6, 5)
Workbooks.Add
ActiveWorkbook.SaveAs "H:\.......\.......\VBA\Code Set-up\VBA-DATABASE\Well1.xls"
Set Well1 = ActiveWorkbook
ActiveWorkbook.Sheets("Sheet1").Cells(1, 5) = Well_Name
ActiveWorkbook.Sheets("Sheet1").Cells(2, 5) = Well_Top
ActiveWorkbook.Sheets("Sheet1").Cells(3, 5) = Well_Base
ActiveWorkbook.Sheets("Sheet1").Cells(4, 5) = Total_Intervals
ActiveWorkbook.Sheets("Sheet1").Cells(5, 5) = Incremental_Step
ActiveWorkbook.Sheets("Sheet1").Cells(6, 5) = Total_Samples
ActiveWorkbook.Sheets("Sheet1").Cells(1, 6) = WellN
ActiveWorkbook.Sheets("Sheet1").Cells(2, 6) = Top
ActiveWorkbook.Sheets("Sheet1").Cells(3, 6) = Base
ActiveWorkbook.Sheets("Sheet1").Cells(4, 6) = TI
ActiveWorkbook.Sheets("Sheet1").Cells(5, 6) = Inc
ActiveWorkbook.Sheets("Sheet1").Cells(6, 6) = TS
Application.ScreenUpdating = False
Application.StatusBar = True
If Not Cancelled Then
MainWkbk.Activate
For i = 1 To TI
MainWkbk.Activate
TopI = Sheets("Data").Cells(i + DOF, 2)
BaseI = Sheets("Data").Cells(i + DOF, 3)
Samples = CInt((BaseI - TopI)/Inc)
Well1.Activate
Sheets("Sheet1").Cells(i, 12) = Samples
Application.StatusBar = i
Next i
For i = 1 To TS
Sheets("Sheet1").Cells(i, 8) = Top + (i - 1) * Inc
Next i
For i = 1 To TI
SII = Sheets("Sheet1").Cells(i, 12)
If i = TI Then SII = SII + 1
For j = 1 To SII
Counter = Counter + 1
Well1.Sheets("Sheet1").Cells(Counter, 9) = MainWkbk.Sheets("Data").Cells(i + DOF, 13)
Bounter = Bounter + 1
Well1.Sheets("Sheet1").Cells(Bounter, 10) = MainWkbk.Sheets("Data").Cells(i + DOF, 34)
Next j
Next i
End If
Well1.Activate
ActiveWorkbook.Close True
MainWkbk.Activate
Range("A1").Select
ActiveWindow.ScrollRow = Range("A1").Row
Application.ScreenUpdating = True
Application.DisplayStatusBar = OldStatusbar
최종 하위 여기
'Sheet1' in new workbook 'Well1'
"각 이름마다 몇 개의 간격이 있습니까?" – Kyle
그래서 새 이름이 생길 때마다 데이터를 반복하고 프로 시저를 다시 시작 하시겠습니까? – TheEngineer
일반적인 의견으로는 변수가 모두 예상대로 선언되지는 않습니다. 'Dim Canceled, OldStatusbar As Boolean'은 Variant로'Cancelled'를 선언하고 Boolean으로'OldStatusbar'를 선언합니다. 둘 다 부울로 사용하려면 '부울로 희미하게 취소됨, 부울로 OldStatusbar'로 변경해야합니다. – TheEngineer