Visualizza messaggio singolo
Vecchio 11-10-2017, 23.52.29   #17
Alexsandra
Senior Member
WT Expert
 
L'avatar di Alexsandra
 
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.302
Alexsandra è conosciuto da tuttiAlexsandra è conosciuto da tuttiAlexsandra è conosciuto da tuttiAlexsandra è conosciuto da tuttiAlexsandra è conosciuto da tutti
Rif: Contare numero occorrenze data

Ho fatto una macro che dovrebbe fare quello che chiedi, questo il risultato



Ho ristretto le colonne per fare l'immagine.
In pratica esegue un ordinamento dei dati nella colonna A e poi nelle colonna P e Q ho estrapolato i dati.

Ho visto sulla guida vba usare il dizionario (poco usato) per fare un confronto di grandi moli di dati, per cui ho creato una matrice e ........ tutto il resto.

Ti lascio il codice che copierai in un nuovo modulo del tuo file, prova il tutto e vediamo come va.

Codice:
Sub prova1()
    Dim ultimaR, ty As Integer
    Dim matri As Variant
    Dim conF As Object
    
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        'ordina i dati nella colonna A
        .Range("A1").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlYes
    End With

    With ThisWorkbook.ActiveSheet
        'cancella i dati da precedenti esecuzione macro nella colonna P
        .Range("P1").Resize(1, 2).EntireColumn.ClearContents
        ultimaR = .Cells(.Rows.Count, "A").End(xlUp).Row 'ultima riga colonna A
        matri = .Range("A2:A" & ultimaR).Value     'matrice valori colonna A
        
        Set conF = CreateObject("Scripting.dictionary")
        conF.CompareMode = vbBinaryCompare
        For ty = 1 To UBound(matri, 1)
            conF.Item(matri(ty, 1)) = matri(ty, 1)
        Next
        .Range("P1") = "Date"
          matri = conF.Items
        .Range("P2").Resize(conF.Count, 1).Value = Application.Transpose(matri)
        Set conF = Nothing
        
        Range("Q1").Value = "Quantità"
        Dim intA, intB  As String
        
        With .Range("Q2").Resize(UBound(matri) + 1)
            .Formula = "=COUNTIF(A$2:A$" & ultimaR & ",P$2:P$" & UBound(matri) + 2 & " )"
            .Value = .Value
            intA = .Address
            intB = .Offset(0, -1).Address
        End With
        
        If .ChartObjects.Count = 0 Then ActiveSheet.Shapes.AddChart.Select
        .ChartObjects(1).Activate
        ActiveChart.SetSourceData Source:=Range(intA)
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SeriesCollection(1).XValues = Range(intB)
        ActiveCell.Select
    End With
    
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With

End Sub
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato   Rispondi citando