Private Sub CommandButton5_Click()
Dim tbl As ListObject
Dim ws As Worksheet, sh As Worksheet
Dim dict As Object
Dim coll As Collection
Dim Trimestre As String
Dim cella As Range
Dim dati() As Variant, chiave As Variant, elemento As Variant
Dim ur As Long, i As Long
Set ws = ThisWorkbook.Worksheets("elenco") '<-imposto il foglio
Set tbl = ws.ListObjects(1) '<-imposto la tabella
Set dict = CreateObject("Scripting.Dictionary") '<-imposto un dizionario
Application.ScreenUpdating = False
For Each cella In tbl.ListColumns("Prescrizione Reale (COVID)").DataBodyRange '<-scorro ogni cella della colonna denominata "Regione" della tabella
Trimestre = UCase(Trim(cella.Value)) '<-memorizzo il suo valore in una variabile di tipo stringa (converto in maiuscolo e tolgo gli spazi all'inizio e alla fine)
ReDim dati(1 To tbl.ListColumns.Count) As Variant '<-dimensiono "manualmente" l'array "dati" che conterrà i valori delle colonna "A" e "C"
'attenzione...di seguito c'è un piccolo ciclo For/Next per caricare i valori di colonna "A", "B" e "C" in un array. _
Il ciclo si puo' estendere tranquillamente per quante colonne occorre, basta agire sui numeri 1 e 3 (partenza e fine). _
Sarebbe anche possibile e consigliato, ricavare il tutto in automatico, calcolando la dimensione della tabella in base al numero di colonne, _
in modo da ridimensionare l'array "dati"
For i = 1 To UBound(dati)
dati(i) = ws.Cells(cella.Row, i).Value
Next i
'creo e carico i dati nel dizionario
If Not dict.Exists(Trimestre) Then '<-se non esiste un dizionario con il nome della regione allora...
Set coll = New Collection '<-imposto una nuova collezione
coll.Add dati '<-carico l'array "dati" nella nuova collezione
dict.Add Trimestre, coll '<-aggiungo al dizionario della regione, la collezione (ovvero i dati di colonna "A" e "B" in questo caso)
Else
'se invece il dizionario di quella regione già esiste, allora...
dict(Trimestre).Add dati '<-aggiungo i nuovi "dati" a quel dizionario
End If
Next cella
'se è stato creato un dizionario...
If dict.Count > 0 Then
For Each chiave In dict.Keys '<-per ogni chiave del dizionario...
Set sh = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) '<-creo un nuovo foglio
With sh
.Range("A1").Resize(1, tbl.ListColumns.Count).Value = tbl.HeaderRowRange.Value
.Name = chiave '<-lo rinomino con il nome della chiave (nome della Regione)
' HO COMMENTATO L'ARRAY
'.Range("A1:x1").Value = Array("Codice Ambito", "Provincia", "Regione", "Tipo Prescrizione", "Codice Fiscale", _
'"Numero Documento", "Tipo Spedizione", "Descrizione Tipo Spedizione", "XIDEFIL", "XIDETIA", "Data Creazione TIA", _
'"Id PCS", "Debito", "Codice Esito", "Descrizione Codice Esito", "Esito_descrizione", "Codice Esito PT", _
'"Descrizione Codice Esito PT", "Codice Sotto Motivo", "Descrizione Codice Sotto Motivo", "Data Evento", _
'"Modalità di Notifica", "Descrizione Modalità di Notifica", "Prescrizione Reale (COVID)")
'<-creo una piccola intestazione in riga 1
'adesso, per ogni elemento presente in quella chiave (regione)...
For Each elemento In dict(chiave)
ur = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 '<-calcolo la prima riga utile per poter scrivere gli elementi
'scrivo su foglio creato tutti gli elementi.
.Cells(ur, 1).Resize(1, UBound(elemento)).Value = Application.Transpose(Application.Transpose(elemento))
Next elemento
.Cells.Columns.AutoFit '<-adatto le colonne al contenuto del testo scritto.
End With
Next chiave
End If
Application.ScreenUpdating = True
End Sub