Excel에서 매크로를 사용하여 워크시트의 데이터 목록을 반복하는 방법

요약

Microsoft VBA(Visual Basic for Applications) 매크로를 작성할 때 워크시트의 데이터 목록을 반복해야 할 수 있습니다. 이 작업을 수행하는 방법에는 여러 가지가 있습니다. 이 문서의 "추가 정보" 섹션에는 다음 유형의 목록을 검색하는 데 사용할 수 있는 방법에 대한 정보가 포함되어 있습니다.

  • 알려진 일정한 행 수를 포함하는 목록입니다.
  • 동적 목록 또는 행 수를 알 수 없는 목록입니다.
  • 특정 레코드가 포함된 목록입니다.

추가 정보

Microsoft에서 제공하는 프로그래밍 예제는 예시를 위한 것일 뿐이며 이와 관련하여 명시적이거나 묵시적인 어떠한 보증도 하지 않습니다. 이는 상품성이나 특정 목적에 대한 적합성의 묵시적인 보증을 포함하며 이에 제한되지 않습니다. 이 문서에서는 예제에 사용되고 있는 프로그래밍 언어와 프로시저를 만들고 디버깅하는 데 사용되는 도구를 사용자가 잘 알고 있는 것으로 가정합니다. 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열의 다른 모든 셀이 비어 있는 경우(예: 모든 '레코드'가 두 행을 사용하고 두 번째 행이 하나의 셀을 들여쓰는 경우에 이 상황이 발생할 수 있음) 이 루프는 다음과 같이 수정할 수 있습니다.

     ' 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