Så här går du igenom en lista med data i ett kalkylblad med hjälp av makron i Excel

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Sammanfattning

När du skriver ett Microsoft Visual Basic for Applications (VBA) -makro kan du behöva gå igenom en lista med data i ett kalkylblad. Det finns flera metoder för att utföra den här uppgiften. Avsnittet ”Mer information” i den här artikeln innehåller information om de metoder som du kan använda för att söka i följande typer av listor:

  • En lista som innehåller ett känt och konstant antal rader.
  • En dynamisk lista eller en lista med ett okänt antal rader.
  • En lista som innehåller en specifik post.

Mer information

Microsoft tillhandahåller programmeringsexempel enbart i förklarande syfte och gör inga utfästelser, varken uttryckligen eller underförstått. Detta omfattar men begränsas inte till underförstådd garanti för säljbarhet eller lämplighet för ett visst syfte. I denna artikel förutsätts att du känner till det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsofts supportexperter kan hjälpa till att förklara funktionerna i en viss procedur, men de kommer inte att ändra dessa exempel för att tillhandahålla extra funktioner eller konstruera procedurer för att uppfylla dina specifika behov. Följande kodexempel förutsätter att listan har en rubrikrad som börjar i cell A1 och data som börjar i cell A2.

Så här söker du i en lista med ett konstant och känt antal rader

Den här koden flyttar ned kolumn A till slutet av listan:

   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

Så här söker du i en dynamisk lista eller en lista med ett okänt antal rader

Den här koden flyttar ned kolumn A till slutet av listan. (Den här koden förutsätter att varje cell i kolumn A innehåller en post fram till slutet.)

   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

Obs Om det finns tomma celler i kolumn A över alla data bör du ändra den här koden för att ta hänsyn till det här villkoret. Se till att de tomma cellerna är ett konsekvent avstånd från varandra. Om till exempel varannan cell i kolumn A är tom (till exempel kan den här situationen uppstå om varje ”post” använder två rader, med den andra raden indragen en cell), kan den här loopen ändras på följande sätt:

     ' 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

Så här söker du i en lista efter en specifik post

Den här koden flyttar ned kolumn A till slutet av listan:

   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