Slik går du gjennom en liste over data i et regneark ved hjelp av makroer i Excel

Sammendrag

Når du skriver en Microsoft Visual Basic for Applications (VBA)-makro, må du kanskje gå gjennom en liste over data i et regneark. Det finnes flere metoder å utføre denne oppgaven på. Delen "Mer informasjon" i denne artikkelen inneholder informasjon om metodene du kan bruke til å søke i følgende typer lister:

  • En liste som inneholder et kjent, konstant antall rader.
  • En dynamisk liste eller en liste med et ukjent antall rader.
  • En liste som inneholder en bestemt oppføring.

Mer informasjon

Microsoft gir programmeringseksempler kun for illustrasjon, uten garanti hverken uttrykt eller antydet. Dette inkluderer, men er ikke begrenset til, de underforståtte garantiene for salgbarhet eller egnethet for et bestemt formål. Denne artikkelen forutsetter at du er kjent med programmeringsspråket som blir demonstrert og verktøyene som brukes til å opprette og feilsøke prosedyrer. Microsoft kundestøtte-teknikere kan hjelpe til å forklare funksjonaliteten til en bestemt prosedyre, men de vil ikke endre disse eksemplene for å gi ekstra funksjonalitet eller konstruere prosedyrer for å dekke dine spesifikke behov. Følgende kodeeksempler forutsetter at listen har en overskriftsrad som starter i celle A1 og data som starter i celle A2.

Slik søker du i en liste med et konstant, kjent antall rader

Denne koden flytter ned kolonne A til slutten av listen:

   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

Slik søker du i en dynamisk liste eller en liste med et ukjent antall rader

Denne koden flyttes ned kolonne A til slutten av listen. (Denne koden forutsetter at hver celle i kolonne A inneholder en oppføring til slutten.)

   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

Merk Hvis det er tomme celler i kolonne A i hele dataene, endrer du denne koden for å ta hensyn til denne betingelsen. Kontroller at de tomme cellene er en konsekvent avstand fra hverandre. Hvis for eksempel annenhver celle i kolonne A er tom (denne situasjonen kan oppstå hvis hver 'post' bruker to rader, med den andre raden innrykket en celle), kan denne løkken endres som følger:

     ' 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

Slik søker du i en liste etter en bestemt oppføring

Denne koden flytter ned kolonne A til slutten av listen:

   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