Jak vytvořit smyčku seznamu dat na listu pomocí maker v aplikaci Excel

Souhrn

Při psaní makra Microsoft Visual Basic for Applications (VBA) bude pravděpodobně muset procházet seznam dat na listu. Existuje několik metod pro provedení tohoto úkolu. Část "Další informace" v tomto článku obsahuje informace o metodách, které můžete použít k vyhledávání následujících typů seznamů:

  • Seznam, který obsahuje známý konstantní počet řádků.
  • Dynamický seznam nebo seznam s neznámým počtem řádků.
  • Seznam obsahující určitý záznam.

Další informace

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené, včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků uživatele. Následující ukázky kódu předpokládají, že seznam obsahuje řádek záhlaví, který začíná v buňce A1 a data, která začínají v buňce A2.

Hledání v seznamu s konstantním, známým počtem řádků

Tento kód přesune sloupec A na konec seznamu:

   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

Hledání Dynamického seznamu nebo seznamu s neznámým počtem řádků

Tento kód přesune dolů sloupec A na konec seznamu. (Tento kód předpokládá, že každá buňka ve sloupci A obsahuje položku až do konce.)

   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

Poznámka Pokud jsou v datech ve sloupci A prázdné buňky, upravte tento kód tak, aby tuto podmínku zohlednil. Ujistěte se, že prázdné buňky jsou od sebe rovnoměrně vzdáleny. Pokud je například každá další buňka ve sloupci A prázdná (například k této situaci může dojít, pokud každý "záznam" používá dva řádky s druhým řádkem odsazeným do jedné buňky), lze tuto smyčku upravit následujícím způsobem:

     ' 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

Hledání konkrétního záznamu v seznamu

Tento kód přesune sloupec A na konec seznamu:

   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