Excel でマクロを使用してワークシートのデータの一覧をループ処理する方法
概要
Microsoft Visual Basic for Applications (VBA) マクロを作成する場合、ワークシート上のデータの一覧をループ処理する必要があります。 このタスクを実行するには、いくつかの方法があります。 この資料の「詳細」には、次の種類のリストを検索するために使用できる方法に関する情報が含まれています。
- 既知の定数行数を含むリスト。
- 動的リスト、または行数が不明なリスト。
- 特定のレコードを含むリスト。
詳細情報
Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。 次のコード サンプルは、リストにセル A1 で始まるヘッダー行と、セル A2 で始まるデータがあることを前提としています。
既知の一定の行数でリストを検索するには
次のコードは、列 A をリストの末尾に移動します。
Sub Test1()
Dim x As Integer
' Set numrows = number of rows of data.
NumRows = Range("A2", Range("A2").End(xldown)).Rows.Count
' Select cell a1.
Range("A2").Select
' Establish "For" loop to loop "numrows" number of times.
For x = 1 To NumRows
' Insert your code here.
' Selects cell down 1 row from active cell.
ActiveCell.Offset(1, 0).Select
Next
End Sub
動的リストまたは不明な行数を持つリストを検索するには
このコードは、列 A をリストの末尾に移動します。 (このコードは、列 A の各セルに末尾までのエントリが含まれていることを前提としています。)
Sub Test2()
' Select cell A2, *first line of data*.
Range("A2").Select
' Set Do loop to stop when an empty cell is reached.
Do Until IsEmpty(ActiveCell)
' Insert your code here.
' Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select
Loop
End Sub
メモ データ全体の列 A に空のセルがある場合は、この条件を考慮してこのコードを変更します。 空のセルが一定の距離離れているか確認してください。 たとえば、列 A の他のすべてのセルが空の場合 (たとえば、すべての 'record' が 2 つの行を使用し、2 番目の行が 1 つのセルにインデントされている場合にこの状況が発生する可能性があります)、このループは次のように変更できます。
' Set Do loop to stop when two consecutive empty cells are reached.
Do Until IsEmpty(ActiveCell) and IsEmpty(ActiveCell.Offset(1, 0))
' Insert your code here.
'
' Step down 2 rows from present location.
ActiveCell.Offset(2, 0).Select
Loop
特定のレコードのリストを検索するには
次のコードは、列 A をリストの末尾に移動します。
Sub Test3()
Dim x As String
Dim found As Boolean
' Select first line of data.
Range("A2").Select
' Set search variable value.
x = "test"
' Set Boolean variable "found" to false.
found = False
' Set Do loop to stop at empty cell.
Do Until IsEmpty(ActiveCell)
' Check active cell for search value.
If ActiveCell.Value = x Then
found = TRUE
Exit Do
End If
' Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select
Loop
' Check for found.
If found = True Then
Msgbox "Value found in cell " & ActiveCell.Address
Else
Msgbox "Value not found"
End If
End Sub
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示