|
| 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 » | |
11-10-2017, 21.51.17 | #16 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: Contare numero occorrenze data
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 |
11-10-2017, 23.52.29 | #17 |
Senior Member
WT Expert
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.302
|
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 - |
12-10-2017, 16.09.31 | #18 |
WT
Global Moderator
Registrato: 17-01-2012
Messaggi: 720
|
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 |
12-10-2017, 18.57.21 | #19 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
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 |
12-10-2017, 22.49.21 | #20 |
Senior Member
WT Expert
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.302
|
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 - |
14-10-2017, 18.31.38 | #21 |
Senior Member
WT Expert
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.302
|
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 - |
14-10-2017, 23.21.35 | #22 |
Senior Member
WT Expert
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.302
|
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 - |
18-10-2017, 19.54.49 | #23 |
WT
Global Moderator
Registrato: 17-01-2012
Messaggi: 720
|
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 |
18-10-2017, 20.32.26 | #24 |
Senior Member
WT Expert
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.302
|
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 - |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Corso VBA | Alexsandra | Guide | 85 | 16-11-2016 11.11.51 |
Riproduzione file.MKV | punkjazz | Software applicativo | 11 | 16-06-2014 11.58.26 |
Kaspersky acquisisce il 16,8% di G Data | Redazione | News dal WEB | 1 | 16-10-2012 12.03.26 |
Portabilità | Leopardo | Chiacchiere in libertà | 2 | 21-10-2004 13.52.51 |