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