VBAコードのヘルプが必要です。間隔が0から始まるときに新しいループを検出する
私は名前が記載されたデータベースを持っています。それぞれの名前にはいくつかの間隔があります。値が「0」である最大の頂点から開始し、特定の深度(2000〜4000)で最大の底で終了する。
各区間は、番号(1~6)で分類されます。 私は一定の増分ステップで連続シリーズを作りたいと思っています。これは、間隔が小さなインクリメンタルステップで連続した系列に置き換えられることを意味します。連続シリーズの隣には、分類が記載されています。
結果は2番目のワークシート( 'Samples'シート)に入れられます。 私は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
End Subのここ
'Sheet1' in new workbook 'Well1'
「各名前には複数の間隔があります」とはどういう意味ですか? – Kyle
したがって、新しい名前が出現するたびに、データをループダウンして手順を再開しますか? – TheEngineer
一般的なコメントとして、変数が期待どおりに宣言されているわけではありません。 'Dim Canceled、OldStatusbar As Boolean'は、バリアントとして' Cancelled'を、ブール値として 'OldStatusbar'を宣言します。それらを両方ともブール値にしたい場合は、それを「Dim Canceled As Boolean、OldStatusbar As Boolean'」に変更する必要があります。 – TheEngineer