Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Geacs,
Mentre il mio codice dovrebbe funzionare per qualsiasi versione di Excel, se utilizzi Excel 365 Excel 2019 o Excel 2021 e la tua tabella di dati è una tabella di Excel, potresti utilizzare il seguente codice molto più conciso:
'========>>
Option Explicit
'-------->>
Public Sub Tester()
Dim WB As Workbook
Dim srcSH As Worksheet, destSH As Worksheet
Dim srcRng As Range, destRng As Range, headerRng As Range
Dim rNominativi As Range
Dim oTabella As ListObject
Dim arrNominativi As Variant, arrOut As Variant
Dim sNominativo As String
Dim i As Long, iCol As Long
Const sFoglio\_Sorgente As String = **"Foglio1" '<<=== Modifica**
Const sColonna As String = **"E" '<<=== Modifica**
Const sTabella As String = **"Tabella1" '<<=== Modifica**
Set WB = ThisWorkbook
Set srcSH = WB.Sheets(sFoglio\_Sorgente)
With srcSH
Set oTabella = .ListObjects(sTabella)
Set srcRng = oTabella.Range
Set headerRng = oTabella.HeaderRowRange
Set rNominativi = Intersect(oTabella.DataBodyRange, .Columns(sColonna))
iCol = .Columns(sColonna).Column
End With
arrNominativi = Application.Unique(rNominativi)
For i = 1 To UBound(arrNominativi)
sNominativo = arrNominativi(i, 1)
With WB
If Not SheetExists(sNominativo) Then
Set destSH = .Sheets.Add(After:=.Sheets(.Sheets.Count))
destSH.Name = arrNominativi(i, 1)
Else
Set destSH = .Sheets(sNominativo)
destSH.UsedRange.ClearContents
End If
End With
With Application
arrOut = .Filter(srcRng, .IsNumber(.Search(arrNominativi(i, 1), srcRng.Columns(5))))
End With
Set destRng = destSH.Range("A2").Resize(UBound(arrOut), UBound(arrOut, 2))
destRng.Value = arrOut
With headerRng
.Copy Destination:=destRng.Rows(0)
.Copy
destRng.Rows(0).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, \_
SkipBlanks:=False, Transpose:=False
End With
Next i
End Sub
'--------->>
Public Function SheetExists(sSheetName As String, _
Optional ByVal WB As Workbook) As Boolean
On Error Resume Next
If WB Is Nothing Then
Set WB = ThisWorkbook
End If
SheetExists = CBool(Len(WB.Sheets(sSheetName).Name))
End Function
'<<========
Potresti scaricare il mio file di prova Geacs2_20230110.xlsm
===
Regards,
Norman