Come scorrere un elenco di dati in un foglio di lavoro utilizzando le macro in Excel

Riepilogo

Quando si scrive una macro di Microsoft Visual Basic for Applications (VBA), potrebbe essere necessario scorrere un elenco di dati in un foglio di lavoro. Esistono diversi metodi per eseguire questa attività. La sezione "Ulteriori informazioni" di questo articolo contiene informazioni sui metodi che è possibile utilizzare per cercare i seguenti tipi di elenchi:

  • Un elenco che contiene un numero noto e costante di righe.
  • Un elenco dinamico o un elenco con un numero sconosciuto di righe.
  • Un elenco che contiene un determinato record.

Ulteriori informazioni

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze. Negli esempi di codice seguenti si presuppone che l'elenco conterà una riga di intestazione che inizia nella cella A1 e di dati che iniziano nella cella A2.

Come cercare un elenco con un numero di righe costante e noto

Questo codice sposta la colonna A alla fine dell'elenco:

   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

Come eseguire una ricerca in un elenco dinamico o in un elenco con un numero sconosciuto di righe

Questo codice sposta la colonna A alla fine dell'elenco. (Questo codice presuppone che ogni cella della colonna A contenga una voce fino alla fine.)

   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

              Notare Se nella colonna A sono presenti celle vuote nei dati, modificare questo codice per gestire questa condizione. Assicurarsi che le celle vuote siano distanti l'una dall'altra. Ad esempio, se ogni altra cella nella colonna A è vuota (ad esempio, questa situazione può verificarsi se ogni "record" utilizza due righe, con la seconda riga rientrata di una cella), questo ciclo può essere modificato come segue:

     ' 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

Come cercare un record specifico in un elenco

Questo codice sposta la colonna A alla fine dell'elenco:

   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