| Istogrammi e intervalli
variabili di Elena 20 |
Ciao a tutti e complimenti per il bellissimo sito.
ho predisposto in un foglio excel un istogramma per
rappresentare i successivi risultati di un’elaborazione. il mio
problema consiste nel fatto che l’intervallo dati origine sui cui si
basa l’istogramma è, parzialmente, variabile e non so in questo caso
come impostare il codice vba. mi spiego con un esempio. il primo
estremo dell’intervallo (che è sempre fisso) è costituito dalla
cella a1. il secondo estremo è situato nella colonna b (fissa) ed in
un numero di riga (variabile) contenuto nella cella f1. quindi,
a seconda del contenuto della cella f1, l’intervallo dei dati
origine avrà un’estensione più o meno ampia . in altri termini se in
f1 c’è ad. esempio il numero 8, l’intervallo da considerare per
l’istogramma sarà a1:b8. ora, ciò che cerco è un codice vba che mi
consenta di tracciare un istogramma basato su un intervallo dati
origine definito dal contenuto di f1. ringrazio sin d’ora
chiunque voglia aiutarmi.-- elena
|
|
| Ciao elena di Big
ronnie |
Vedi se questa riga di codice ti và
bene.sicuramente dovrai adattarla alle tue esigenze.
ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1" & ":" & "B" & Worksheets(1).Range("f1")), PlotBy _
:=xlColumns | |
|
| di Elena20 |
Ciao ronnie e grazie per la risposta. non ho capito
bene come devo utilizzare la tua riga di codice. ti spiego
comunque ciò che ho fatto per provarla. dimmi poi se va bene.
sul foglio1 di una cartella excel ho inserito numeri progressivi
da 1 a 10 nell’intervallo a1:a10 poi altri numeri nell’intervallo
b1:b10. nella cella f1 ho inserito il numero 3. ciò fatto, ho
registrato una macro da tastiera (macro1) per l’inserimento nel
foglio1 di un istogramma con dati origine ricavati dall’intervallo
a1:b10. riandando poi a vedere il codice della macro1, ho
modificato la parte con “activechart.setsourcedata…ecc.†sostituendo
ad essa il codice che mi hai inviato. purtroppo rilanciando la
macro ottengo un errore run-time ‘1004’ mentre mi aspettavo un
istogramma tracciato sui dati origine contenuti esclusivamente in
a1:b3. puoi dirmi cosa sbaglio in questa procedura? ciao -- elena
|
|
| di Big ronnie |
Ciao elena, ho riprodotto il tuo esempio ed ho
ricavato questo codice,provalo stando molto attenta ai
riferimenti(tipo il nome del foglio).un consiglio che posso darti è
nei momenti di difficoltà usa il registratore di
macro.ciao
Sub Grafico()
Range("A1:B10").Select
Charts.Add
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1" & ":" & "B" & Sheets("foglio1").Range("f1")), PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio1"
End Sub
| |
|
| di Elena20 |
Funziona, ronnie!!! una chiarificazione.
nell'applicazione per la quale sto utilizzando l'istogramma, il
grafico è, per così dire, "residente" a tempo pieno nel foglio, nel
senso che non devo rilanciarlo ad ogni nuova elaborazione. mi sto
chiedendo se sia possibile fare lo stesso anche con il tuo codice.
mi spiego. e' possibile avere stabilmente nel foglio un grafico che
oltre a riportare i risultati delle elaborazioni (colonna b) come
già avviene, tenga conto (tramite la cella f1) dell'intervallo su
cui deve basarsi, ed il tutto senza bisogno di essere rilanciato di
volta in volta? un grosso ringraziamento per l'aiuto che già mi
hai dato. --elena |
|
| Automazione grafico di Big
ronnie |
Ciao elena,se ho ben capito vuoi che al variare di
"f1" il grafico si aggiornasse automaticamente.ti mando del
codice(che sfrutta una idea di luca del 30/08 esecuzione automatica
macro)vedi se ti và bene.
Copia la macro nell'editor di foglio1:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("f1")) Is Nothing Then
Exit Sub
End If
Grafico ' il nome della macro da lanciare
End Sub
Copia la macro in un modulo:
Sub Grafico()
'Con questa riga elimino ogni volta il vecchio grafico.
Worksheets(1).ChartObjects.Delete
Range("A1:B10").Select
Charts.Add
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1" & ":" & "B" & Sheets("foglio1").Range("f1")), PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio1"
End Sub
| |
|
| di Elena20 |
Grazie, ronnie, per il codice che mi hai mandato.
nella sezione scambio files ti invio alcuni commenti. elena--
|
|
| Istogrammi e intervalli
variabili di Ricky53 |
Per aggiornare il grafico (avendo inserito la
formula conta.numeri in "f1") quando modifichi un valore nel range
b1.b10 occorre che nella macro "worksheet_change" presente nel
foglio1 tu sostituisca il range da "f1" con "b1:b10" altrimenti non
viene rilevato nessun cambiamento e non viene eseguita la macro
"nuovo_grafico".
prova e vedrai che il grafico si aggiorna.
in alternativa banale, quando sei posizionata sulla cella
"f1", puoi premere il tasto "f2" e poi "invio". ciao da
ricky53 |
|
| di Elena 20 |
| Grazie ricky per il suggerimento ed ancora un
ringraziamento a big ronnie! --elena20 |