Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel]-Grafico: selezionare dati da visualizzare....

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel]-Grafico: selezionare dati da visualizzare....

Postdi olaffo » 01/02/12 16:02

Salve a tutti,
mi presento come nuovo utente di questo forum che trovo utilissimo. Ho già risolto un paio di problemi leggendo qualcche post. Grazie mille!

Vi sottopongo ora un problema al quale non riesco a venire a capo leggendo le varie discussioni.

Ho un file .csv che viene creato giornalmente nel quale vi sono:
PRIMA COLONNA: Intestazione DATA e i successivi orari di acquisizione dei dati
SECONDA E SUCCESSIVE COLONNE: intestazione LETTURA# e i successivi dati acquisiti
Codice: Seleziona tutto
DATA      LETT1      LETT2    .......
15:10     3            5        ........
15:15     4            6         .......
15:20     4,5         3,5       ......
ecc...


Con un bottone ho creato un a macro che mi fa selezionare il file da "importare" nel folglio "DATI" e tutto va liscio.
Vorrei adesso:

1 - poter selezionare in un grafico la fascia di minuti da visuaizzare (es. 15:00-18:00) ed ho provato con due combobox nelle quali compaiono gli elenchi delle fasce orarie (00:00, 01:00, 02:00, ....) uno per ora inizio el'altro per l'ora fine.

2 - poter selezionare nello stesso grafico la serie di dati da visualizzare (LETT1, LETT2, LETT1 e LETT2 contemporaneamente)

Ho provato un paio di soluzioni ma con nessuna riesco ad ottenere il risultato voluto (anzi nessun risultato)

Detto ciò, non ho moltissima dimistichezza con VBA ma se mi ci applico posso farcela.
Potreste aiutarmi? Grazie mille!
olaffo
Newbie
 
Post: 5
Iscritto il: 01/02/12 15:45

Sponsor
 

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi Anthony47 » 01/02/12 22:48

Ciao olaffo, benvenuto nel forum
Provo a cavarmela con questo suggerimento:
-i tuoi dati sono in Foglio1, l' orario in col A, le due serie sono in col B e C
-ti crei tre intervalli dinamici
--Menu /Inserisci /Nome /Definisci
--come Nome usi Dinaore; come "Riferito a" usi la formula
Codice: Seleziona tutto
 =SCARTO(Foglio1!$A$2;CONFRONTA(Foglio1!$E$1;Foglio1!$A:$A);0;CONFRONTA(Foglio1!$F$1;Foglio1!$A:$A)-CONFRONTA(Foglio1!$E$1;Foglio1!$A:$A);1)

--come secondo intervallo userai DinaL1 e la formula
Codice: Seleziona tutto
=SCARTO(Foglio1!$A$2;CONFRONTA(Foglio1!$E$1;Foglio1!$A:$A);1+10*(1-Foglio1!$G$1);CONFRONTA(Foglio1!$F$1;Foglio1!$A:$A)-CONFRONTA(Foglio1!$E$1;Foglio1!$A:$A);1)

--come terzo intervallo: DinaL2 e
Codice: Seleziona tutto
=SCARTO(Foglio1!$A$2;CONFRONTA(Foglio1!$E$1;Foglio1!$A:$A);2+10*(1-Foglio1!$H$1);CONFRONTA(Foglio1!$F$1;Foglio1!$A:$A)-CONFRONTA(Foglio1!$E$1;Foglio1!$A:$A);1)


A questo punto in E1 scrivi l' orario di inizio e in F1 l' orario di fine; nessuno di questi valori puo' essere inferiore al primo orario in lista.
In G1 e H1 inserisci 1 e 1

A questo punto creati un grafico nuovo:
-vai direttamente a Definisci dati di origine
-aggiungi una serie, dove come "valore" scriverai "=Foglio1!DinaL1" (senza gli apici)
-aggiungi la seconda serie, dove come "valore" scriverai "=Foglio1!DinaL2" (senza gli apici)
-aggiungi infine la serie per l' asse x, dove scriverai "=Foglio1!Dinaore" (senza gli apici)

In G1 e H1 potrai impostare se visualizzare o meno le due serie (1/0), in E1/F1 imposterai l' orario di inizio/fine del grafico.

Prova e fai sapere.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi Flash30005 » 01/02/12 23:05

Ciao Olaffo e benvenuto anche da parte mia
Vedo ora che hai un'ottima soluzione di Anthony realizzata con formule

ma visto che ci ho lavorato un po' per questa soluzione macro la propongo
Ho previsto in
col A HH:mm
Col B Lett1
Col C Lett2
Col C Lett3

Realizzi un grafico selezionando da A1:Cx (x = ultima riga della tabella)
Suppongo sia "Grafico1" poi
In G1 scrivi "OraInizio"
In H1 scrivi "OraFine"
In una colonna non utilizzata es. Y
tutte le ore che faranno da filtro
da
00:00
01:00
02:00
..
..
23:00
Ti posizioni in G2 e convalidi l'elenco delle ore in colonna Y
nella convalida elenco scrivi questa formula
Codice: Seleziona tutto
=$Y$1:$Y$24

Stessa cosa in H2
Formattando queste due celle in hh:mm

Ora in un modulo incollerai questa macro
Codice: Seleziona tutto
Sub GraficoCondiz()
UR = Range("A" & Rows.Count).End(xlUp).Row
HIni = Hour(Range("G2").Value)
HFine = Hour(Range("H2").Value) - 1
If HFine < HIni Then
    MsgBox "L'ora Fine deve essere maggiore dell'ora Inizio"
Exit Sub
End If
For RR = 2 To UR
If Hour(Range("A" & RR).Value) = HIni Then
RigaI = RR
GoTo EsciI
End If
Next RR
EsciI:

For RR = UR To RigaI Step -1
If Hour(Range("A" & RR).Value) = HFine Then
RigaF = RR
GoTo EsciF
End If
Next RR
EsciF:

    ActiveSheet.ChartObjects("Grafico 1").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(1).XValues = "=Foglio1!R" & RigaI & "C1:R" & RigaF & "C1"
    ActiveChart.SeriesCollection(1).Values = "=Foglio1!R" & RigaI & "C2:R" & RigaF & "C2"
    ActiveChart.SeriesCollection(2).Values = "=Foglio1!R" & RigaI & "C3:R" & RigaF & "C3"
    ActiveChart.SeriesCollection(3).Values = "=Foglio1!R" & RigaI & "C4:R" & RigaF & "C4"
    Range("A1").Select
End Sub


E nel vba del foglio
questo codice
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$H$2" Then Exit Sub
Call GraficoCondiz
End Sub

Al variare delle cella in H2 il grafico si aggiornerà come voluto

Allego questo file

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi olaffo » 02/02/12 09:25

Grazie mille per le risposte.

ho lavorato un po da solo è sono arrivato a questa soluzione:

Ho creato una combobox che mi seleziona la colonna dei dati e il riferimento della selezione lo metto in "colonna"; un'altra combobox mi seleziona l'ora d'inizio e il riferimento lo mette in "inizio"; l'ultima combo mi seleziona l'ora di fine e lo mette in "fine".
Essendo il numero di dati acquisiti sempre lo stesso (12 celle per ora), mi calcolo la cella riferita all'ora di inizio e fine aggiorno il grafico.

Ho escluso la possibilità di poter selezionare più serie di dati sullo stesso grafico.

il codice viene eseguito ogni volta che il valore di una combo varia.

Codice: Seleziona tutto
Sub selOraInizio_Cambia() 'macro che viene eseguita ogni volta che cambia lo stato di una combobox

Dim inizio As Integer
Dim fine As Integer
Dim sh1, sh2, sh3 As Worksheet
   
With ThisWorkbook
       Set sh1 = .Worksheets("Grafici")
       Set sh2 = .Worksheets("dati")
       Set sh3 = .Worksheets("calcoli")
End With

colonna = sh3.Cells(1, 8) + 1 'seleziona la colonna dei dati delle stringhe

inizio = sh3.Cells(2, 3) 'seleziona il valore usato per calcolare la cella corrispondente all'ora d'inizio
fine = sh3.Cells(3, 3) 'selziona il valore usato per calcolare la cella corrispondente all'ora di fine

If inizio < fine Then
    a = sh2.Cells((((inizio - 1) * 12) + 2), 1).Address 'calcola la cella dell'ora di inizio selezionata
    c = sh2.Cells((((inizio - 1) * 12) + 2), colonna).Address 'calcola la cella di inizio dei dati selezionata

    b = sh2.Cells((((fine - 1) * 12) + 14), 1).Address 'calcola la cella dell'ora di fine selezionata
    d = sh2.Cells((((fine - 1) * 12) + 14), colonna).Address 'calcola la cella di fine dei dati selezionata
   
    'modifica il grafico a secondo della selezione fatta
    sh1.ChartObjects("Grafico").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(1).XValues = sh2.Range(a, b)
    ActiveChart.SeriesCollection(1).Values = sh2.Range(c, d)
Else
    MsgBox ("ATTENZIONE - Selezionare un ora di fine successiva a quella d'inizio")
    GoTo Esci
End If

Esci:
   
End Sub


Che ne dite della mia soluzione?
olaffo
Newbie
 
Post: 5
Iscritto il: 01/02/12 15:45

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi olaffo » 02/02/12 09:35

Ora ho un altro problemino.

Devo bloccare la cartella di lavoro per non far fare danni a chi la usa. Le macro che aggiornano le celle e il grafico non funzionano se il foglio è protetto. c'è un modo per eliminare la protezione quando inizio la macro e rimetterla quando finisce?
olaffo
Newbie
 
Post: 5
Iscritto il: 01/02/12 15:45

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi Flash30005 » 02/02/12 09:50

Penso che non c'è soluzione migliore di quella che soddisfi l'esigenza
tanto più se a realizzarla è lo stesso richiedente perché la crea secondo il proprio gusto e praticità di uso.

L'unica cosa è quel "Goto to esci"
che puoi sostituire con Exit Sub
(visto che sei alla fine della macro)
Normalmente quel rinvio lo si fa quando devi processare del codice al di sotto del "salto", che, a quanto vedo non è il tuo caso

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi olaffo » 02/02/12 10:43

mi risulta un nuovo problema:
devo proteggere la cartella di lavoro ed eseguire le macro.

Ho inserito il codice
Codice: Seleziona tutto
Sub selOraInizio_Cambia() 'macro che viene eseguita ogni volta che cambia lo stato di una combobox

Dim inizio As Integer
Dim fine As Integer
Dim sh1, sh2, sh3 As Worksheet

sh1.Unprotect Password:="xxxx"
sh2.Unprotect Password:="xxx"
sh3.Unprotect Password.="xxx"

' il codi di cui sopra

sh1.Protect Password:="xxxx"
sh2.Protect Password:="xxx"
sh3.Protect Password.="xxx"



ma mi dice che non posso aggiornare il grafico poiché è protetto. La cosa strana è che mi fa caricare il file TXT.

perché col grafico non va?
olaffo
Newbie
 
Post: 5
Iscritto il: 01/02/12 15:45

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi Flash30005 » 02/02/12 13:42

La procedura che hai usato è corretta

Sei sicuro di aver inserito la sprotezione fogli prima della modifica?
le password si sprotezione sono corrette?
(vedo una differenza tra quelle postate)
ricontrolla

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi olaffo » 02/02/12 14:30

le password sono corrette tutto va liscio solo che ho notato che il problema sta nel foglio3 dove ci sono le celle di riferimento delle combobox. la macro viene eseguita dalla modifica della combobox.

è possibile che la combo prima aggiorni la cella e poi esegua la macro?

se è così quale può essere la soluzione?
olaffo
Newbie
 
Post: 5
Iscritto il: 01/02/12 15:45

Re: [Excel]-Grafico: selezionare dati da visualizzare....

Postdi Flash30005 » 02/02/12 14:56

sproteggere il foglio prima di attivare il combobox

Anche se non vedo l'utilità del combobox quando puoi fare tutto con delle semplici celle Convalidate a Elenco come da mio esempio

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "[Excel]-Grafico: selezionare dati da visualizzare....":


Chi c’è in linea

Visitano il forum: Nessuno e 19 ospiti