VBA には Java の .hasnext メソッドに相当するものがありますか?
Excelワークブックで多くのシートをループしようとしていますが、使用する予定でした
ActiveSheet.Next.Select
ループ内で、これよりも効果的な方法があれば教えてください。前もって感謝します!
これを行う最良の方法は、For Each
ループ方式を使用することです。
サンプルは次のとおりです。
Dim wks As Worksheet
'- Begin looping through workbook
For Each wks In ActiveWorkbook.Worksheets
'- Do code with each worksheet
msgbox wks.name
next wks
VBAでは、これは内のシートをループし、変数ActiveWorkbook
を使用してループ内の現在のシートを参照できるようにします。wks
すでに上で述べたように、同等のものはありません.Hasnext
任意のループを使用してワークシートをループできます。For ループの例を次に示します。
Sub Sample()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With ws
'
'~~> Your code here
'
End With
Next
End Sub
Hasnext
実際に何かを実装したい場合は、これも実行できます
Sub Sample()
If Hasnext(ActiveSheet.Index + 1) Then
MsgBox Sheets(ActiveSheet.Index + 1).Name
End If
End Sub
Function Hasnext(numb As Long) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets(numb)
On Error GoTo 0
If Not ws Is Nothing Then Hasnext= True
End Function
同等のものはありませんが、インデックスをサポートするほとんどのプロパティには、.Count
反復する必要がある数を示すプロパティがあります
のようなループを使用するのはどうFor Each x in Collection ... Next x
ですか?リストの最後に達すると、自動的に終了します。
HasNext に最も近いのは、Next が "Nothing" かどうかを確認することです。
Dim sh As Worksheet
Set sh = ActiveSheet
If Not sh.Next Is Nothing Then
Set sh = sh.Next
End If
しかし、For Each..Next を使用し、Select と Activate を回避することがより良い方法であるという他の意見に同意します。
VBA に hasext と直接同等のものがあるとは思いません。コレクションにオブジェクトが含まれているかどうかを確認したい場合は、次のようにすることができますIf colX.Count > 0 then...end if
この質問については、すべての回答が役に立ちました。
最終的に何をしたかを示したかったのですが、回答でコードがはるかに読みやすくなりました。
count メソッドを使用して、イテレータが基本的に count と等しくなるまでループしました。
Sub Total_Sheet_Compiler()
Dim sheetCount, i As Integer
sheetCount = ActiveWorkbook.Sheets.Count
i = 1
Sheets("Sheet1").Select
Do Until i = sheetCount
ActiveSheet.Next.Select
i = i + 1
Loop
End Sub