Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Office suite

Notices

Rispondi
 
Strumenti discussione
Vecchio 11-10-2017, 22.51.17   #16
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: Contare numero occorrenze data

Si, ma non sono 57000 le date prese una sola volta.
In ogni caso, le matrici per le ascisse e le ordinate sono identiche in quantità di elementi ognuna.
Certo che con una query SELECT ed un COUNT(Colonna) AS Conteggio potrebbe far presto a ricopiare il recordset da un'altra parte...
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Vecchio 12-10-2017, 00.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
Vecchio 12-10-2017, 17.09.31   #18
Morpheus-89
WT
Global Moderator
 
L'avatar di Morpheus-89
 
Registrato: 17-01-2012
Messaggi: 720
Morpheus-89 è nella strada per il successo
Rif: Contare numero occorrenze data

Ho provato il codice Alexsandra, con il Dizionario è velocissimo, ho fatto solo una piccolissima modifica, dichiarato ty come Long al posto che come Integer perchè dava overflow.

Funziona tutto alla perfezione e crea anche il grafico solo che ha qualche problemino con alcune date che non riesco a capire...

riporto una piccola parte del risultato ottenuto nelle colonne P e Q



la data nella colonna P 12/01/2014 con quantità 0 in realtà nella colonna A è 01/12/2014 e sono 9 righe, la stessa cosa sembra accadere con tutte le date che iniziano con lo 0.





Possibile che excel stia invertendo mese e giorno quando le date iniziano con lo 0?

Ho provato a cambiare il formato delle celle mettendo la data nel formato italiano ma non porta a una soluzione, avete qualche idea?

Grazie
Morpheus-89 non è collegato   Rispondi citando
Vecchio 12-10-2017, 19.57.21   #19
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: Contare numero occorrenze data

Controlla bene il range di COUNTIF...Alexsandra ha saltato A1.
Prova a formattare correttamente le colonne: Deve agire su testo, non su date.
Buona scelta l'utilizzo del dizionario poichè indicizza.
Io, visto che hai il 2013, ti esorto ad utilizzare le queries SQL utilizzando come base dati lo stesso foglio di Excel.
Cerca su internet, poi crea una macro col registratore di macro (che anche Alex ha utilizzato) e sfrutta tutta la potenza di SQL.
In un unico passaggio, una query del genere:
SELECT Colonna1, COUNT(Colonna1) AS Contatore FROM Sheet1 GROUP BY Colonna1 ORDER BY Colonna1 ASC, ti crea un recordset contenente elementi univoci ordinati nella prima colonna e le occorrenze di ognuno nella seconda.
SQL internamente sfrutta i migliori algoritmi di addressing, indexing e sorting dei dati, traducendosi in performances di notevole impatto.
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Vecchio 12-10-2017, 23.49.21   #20
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

E' vero che c'è un problema con le date che iniziano con 0
nel riepilogo nella colonna P inverte il mese.
da 01/10 riepiloga in 10/01 per cui inserisce lo 0 nella colonna Q
e anche modificando il parametro di ricerca in vbTextCompare la situazione non cambia. provo a vedere cosa può essere.

Comunque usare SQL come dice Lory è certamente una soluzione ad Hoc sia per affidabilità, semplicità e precisione nell'estrazione.
Sistemato il problema della data è sicuramente un argomento da approfondire.

Ahh avevo iniziato dalla riga 2 considerando che nella riga 1 c'erano le intestazioni, anche se poi ho ordinato i dati dalla riga 1.
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato   Rispondi citando
Vecchio 14-10-2017, 19.31.38   #21
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

Il formato data delle celle crea non pochi problemi .. non pochi.
Ho parzialmente risolto con una conversione dei dati (seriale) e una formattazione *al volo* delle celle.

.... ma questo mi crea dei problemi col grafico

Per il momento ho tolto il grafico e ti posto il codice, così puoi provare a fare le elaborazioni dei tuoi dati. intanto vedo di sistemare anche il grafico

Codice:
Sub prova1()
    Dim ultimaR As Integer
    Dim matri As Variant
    Dim conF As Object
    
    With Application
        .ScreenUpdating = False
        .Range("A2").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlYes
    End With

    With ThisWorkbook.ActiveSheet
        .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 = vbTextCompare
        
        For ty = 1 To UBound(matri, 1)
            conF.Item(matri(ty, 1)) = CLng(matri(ty, 1))
        Next

          .Range("P1") = "Data"
           matri = conF.Items
          .Range("P2").Resize(conF.Count, 1).Value = Application.Transpose(matri)
        Set conF = Nothing
         
        .Range("P:P").NumberFormat = "dd-mm-yy"
        Range("Q1").Value = "Quantità"
        
        With .Range("Q2").Resize(UBound(matri) + 1)
            .Formula = "=COUNTIF(A$2:A$" & ultimaR & ",P$2:P$" & UBound(matri) + 2 & " )"
            .Value = .Value
        End With
    End With
    
    With Application
        .ScreenUpdating = True
    End With

End Sub
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato   Rispondi citando
Vecchio 15-10-2017, 00.21.35   #22
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 un po' di ritocchi, e sistemato anche il grafico, così dovrebbe andare.
Codice:
Sub prova1()
    Dim ultimaR As Integer
    Dim matri As Variant
    Dim conF As Object
    
    With Application
        .ScreenUpdating = False
        .Range("A2").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlYes
        .Range("A:A").NumberFormat = "dd-mm-yy"
    End With

    With ThisWorkbook.ActiveSheet
        .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 = vbTextCompare
        
        For ty = 1 To UBound(matri, 1)                          'leggo tutte le date colonna 1
            conF.Item(matri(ty, 1)) = CLng(matri(ty, 1))
        Next

          .Range("P1") = "Data"
           matri = conF.Items
          .Range("P2").Resize(conF.Count, 1).Value = Application.Transpose(matri)
    
        Set conF = Nothing
        .Range("P:P").NumberFormat = "dd-mm-yy"
        Range("Q1").Value = "Quantità"
        
        With .Range("Q2").Resize(UBound(matri) + 1)
            .Formula = "=COUNTIF(A$2:A$" & ultimaR & ",P$2:P$" & UBound(matri) + 2 & " )"
            .Value = .Value
            intervA = .Address
            intervB = .Offset(0, -1).Address
        End With
        End With
       
If ActiveSheet.ChartObjects.Count > 0 Then ActiveSheet.ChartObjects.Delete

ActiveSheet.Shapes.AddChart xl3DColumnClustered, 100, 200
    ActiveSheet.Shapes(1).Select
    ActiveChart.SetSourceData Source:=Range(intervA, intervB), PlotBy:=xlRows
    
     ActiveChart.HasTitle = True
    ActiveChart.ChartTitle.Caption = "Riepilogo Frequenze"
    With ActiveChart.Axes(xlCategory)
    .HasTitle = True
    .AxisTitle.Text = "Elenco Date"
    .AxisTitle.Orientation = 0
    End With

    With ActiveChart.Axes(xlValue)
    .HasTitle = True
    .AxisTitle.Text = "Quantità"
    .AxisTitle.Orientation = 90
    
    End With
        ScreenUpdating = True
End Sub
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato   Rispondi citando
Vecchio 18-10-2017, 20.54.49   #23
Morpheus-89
WT
Global Moderator
 
L'avatar di Morpheus-89
 
Registrato: 17-01-2012
Messaggi: 720
Morpheus-89 è nella strada per il successo
Rif: Contare numero occorrenze data

grazie mille Alexandra, il nuovo codice funziona ha solo qualche problema con la creazione del grafico con un overflow, c'è qualche variabile, non sono riuscito a capire quale, che accetta come valore massimo 255 e non è sufficiente.
Però escludendo la parte che fa il grafico effettua il conteggio delle occorrenze di ogni data in modo perfetto, poi ho fatto il grafico sui dati calcolati dalla macro.

Grazie
Morpheus-89 non è collegato   Rispondi citando
Vecchio 18-10-2017, 21.32.26   #24
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

Si in effetti avevo notato che nella creazione del grafico c'era qualche problema, ma non avevo capito dove.
comunque leggo che hai risolto meglio così

ciao
___________________________________

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


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Corso VBA Alexsandra Guide 85 16-11-2016 12.11.51
Riproduzione file.MKV punkjazz Software applicativo 11 16-06-2014 12.58.26
Kaspersky acquisisce il 16,8% di G Data Redazione News dal WEB 1 16-10-2012 13.03.26
Portabilità Leopardo Chiacchiere in libertà 2 21-10-2004 14.52.51

Orario GMT +2. Ora sono le: 15.11.44.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.