Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

invertire assi grafico excel2003

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

invertire assi grafico excel2003

Postdi wallace&gromit » 28/02/13 15:55

Ciao,
non so se la mia memoria fa solo cilecca o mi inganna proprio:
ero convinto che fosse possibile invertire gli assi x e y di un grafico a dispersione.
Selezionando una serie di dati in cui nella prima colonna ho i valori dei valori di base e nelle colonne successive quelli riferiti a dei casi specifici vorrei ottenere un grafico con i valori di base sull'asse y ed i valori successivi sull'asse x, invece excel fa il contrario (in sostanza mi ruota il grafico di 90° rispetto a quanto desiderato).
Qualcuno sa aiutarmi?
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Sponsor
 

Re: invertire assi grafico excel2003

Postdi wallace&gromit » 28/02/13 16:05

Per maggiore chiarezza allego un esempio.
Ovviamente la soluzione più facile (ma laboriosa) è invertire x e y nella selezione dei dati d'origine.
http://www.filedropper.com/graficoinvertireassi
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi wallace&gromit » 28/02/13 16:25

intanto ci sto lavorando, pensavo di riuscirci con questa macro ma non succede nulla:
Codice: Seleziona tutto
   Sub InvertiAssi()
        Sheets("Grafico1").Select
        For totale = 1 To ActiveChart.SeriesCollection.Count
        attuale = ActiveChart.SeriesCollection.Count
         vecchioY = ActiveChart.SeriesCollection(attuale).Values
         vecchioX = ActiveChart.SeriesCollection(attuale).XValues
         ActiveChart.SeriesCollection(attuale).XValues = vecchioY
         ActiveChart.SeriesCollection(attuale).Values = vecchioX
        Next totale
    End Sub
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi Flash30005 » 28/02/13 22:15

Prova a usare questa macro
Codice: Seleziona tutto
Public OnG As Integer
Sub InvertiAssi()
    ActiveSheet.ChartObjects("Grafico 2").Activate
    ActiveChart.PlotArea.Select
    ActiveChart.ChartArea.Select
    If OnG = 0 Then
    ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1:O28"), PlotBy:=xlRows
    OnG = 1
    Else
    ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1:O28"), PlotBy:=xlColumns
    OnG = 0
    End If
End Sub

Ogni volta inverte (potresti non avere l'inversione solo la prima volta ma poi...)
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: invertire assi grafico excel2003

Postdi Anthony47 » 28/02/13 23:05

Non avendo capito bene il problema non so se la macro di Flash (vedi sopra) potra' curarlo; pero' sottopongo una macro che potrebbe azzeccarci:
Codice: Seleziona tutto
Sub setColl()
'
ActiveSheet.ChartObjects("Grafico 2").Activate    '<< Il nome del grafico
'
With ActiveChart
    For I = 1 To .SeriesCollection.Count
        .SeriesCollection(I).XValues = "=Foglio1!" & Range("$A$2:$A$28").Offset(0, I).Address(, , xlR1C1)
        .SeriesCollection(I).Values = "=Foglio1!R2C1:R28C1"
    Next I
End With
Range("A1").Select
End Sub

Essa si limita ad assegnare a "value" e "xvalue" gli intervalli che mi sembrano corrispondere alla richiesta.
Da eseguire tassativamente dopo aver fatto le canoniche due copie di backup del file originale.
In una scala da 1 a 10, in quanto a certezza del risultato la posiziono su 3.14

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: invertire assi grafico excel2003

Postdi wallace&gromit » 01/03/13 08:56

Allora... malgrado un modesto Pi Greco di valutazione, la macro di Anthony fa quello che desideravo.
Quella di Flash non è adatta, perchè ribalta il concetto di prelievo di dati (su righe invece che colonne - non è ciò che desideravo).

Rimane un problema di visualizzazione del grafico: con la macro di Anthony (e del resto ho scoperto che questo succede anche facendo manualmente quello che pensavo fosse giusto fare) i punti risultano allineati in maniera strana e non come raffigurato nel grafico originale.
A questo si può rimediare inserendo manualmente dei valori 0 nelle celle vuote, ma quello che è curioso è che in realtà excel non riconosce come vuote queste celle, sebbene non contengano niente, anzi: se immetto come formattazione condizionale "colora sfondo" se il valore è maggiore di 0, tutte le celle vuote si colorano!
la tabella originale da cui ho copiato i valori conteneva una formula =SE(...;"xx";"")

Per finire, perchè la mia macro non funzionava? Mi sembrava di un principio semplicissimo:
prendo il valore originale dei due parametri e poi li attribuisco di nuovo invertendoli, ma si inceppa!
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi Anthony47 » 01/03/13 09:53

In effetti durante le mie prove ho riscontrato anche io alcune anomalie, che poi non ho indicato nel mio test.
La prima e' che non capivo perche', pur essendo in origine indicata (nelle "serie" del grafico)
valore x=Foglio1!$A$2:$A$28 poi quella serie finiva sull' asse verticale. Piu' tardi ho rinunciato a capire e invece di suggerirti di fare a mano le inversioni nelle 14 serie ho elaborato la macro.
Poi ci sono dei "<50" che alterano totalmente il grafico, e io ho rimosso i "<"
Infine c' erano quelle celle vuote/non-vuote che in una delle prime prove avevo trasformate in vuote con una macro
Codice: Seleziona tutto
Sub ppp()
For Each cell In Range("B2:O28")
  'aaa = cell.Address
  If Len(cell.Value) = 0 Then cell.ClearContents
Next cell
End Sub

La tua macro avrebbe sortito effetti visibili se invece di scrivere ActiveChart.SeriesCollection(attuale).Values = vecchioX avessi scritto ActiveChart.SeriesCollection(totale).Values = vecchioX (in realta' l' errore e' di aver scambiato "attuale" con "totale" all' inizio del loop); ma poi non avrebbe "funzionato" perche' in quel modo viene assegnato a ogni serie un elenco di "valori", cioe' si perde l' associazione ai dati del foglio; insomma qualsiasi dato scritto sul foglio il grafico sarebbe risultato immutabile.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: invertire assi grafico excel2003

Postdi wallace&gromit » 01/03/13 11:42

ciao Anthony, la nebbia nella mia mente si dirada lentamente! (pessima rima)

Adesso funziona anche la mia macro e ha quel difetto che hai descritto (valori invece di riferimenti),
ma non c'è modo di andare a "carpire" il testo presente in "ActiveChart.SeriesCollection()" per poterlo utilizzare in seguito?
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi Anthony47 » 01/03/13 14:01

Im Nebel Seltsam, im Nebel zu wandern.
Premetto che secondo me invece di andare a leggere le varie SeriesCollection sarebbe molto piu' semplice andare a leggere l' origine dei dati (che e' piu certa che non quale serie /quale valore).

Comunque con l' istruzione vecchioy = ActiveChart.SeriesCollection(attuale).Values tu hai messo in "vecchioy" un array di valori; ad esempio vecchioy(1) ora contiene il primo elemento della serie, con LBound(vecchioy) verifichi quale sia la base dell' array e ovviamente UBound(vecchioy) ti restituisce l' upper index.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: invertire assi grafico excel2003

Postdi wallace&gromit » 01/03/13 16:49

l'avevo già ammesso io che la mia rima era pessima, non era necessario umiliarmi affiancandomi Hermann Hesse :lol: (telepatia? sto leggendo il Siddharta) ma tutto questo non c'entra, ero riuscito a distinguere i contorni del problema, mi manca ancora un input ma penso che la tua risposta sia quella: è impossibile andare a leggere dai dati d'origine il riferimento dei valori (in formato range), giusto?
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi Anthony47 » 02/03/13 00:08

Ho scoperto che la Serie (elemento dell' insieme SeriesCollection) dispone della proprieta' formula; quindi per curiosita' prova
Codice: Seleziona tutto
ActiveSheet.ChartObjects("Grafico 2").Activate
SSource = ActiveChart.SeriesCollection(1).Formula
MsgBox SSource

Ti mostrera' lo stesso contenuto che vedi nella barra della formula selezionando una Serie

Tra i miei passi preferiti:
Bis die Blüten sind verweht
und der Zweig in Früchten steht,
bis das Herz, der Kindheit satt,
seine Ruhe hat
und bekennt:
voll Lust und nicht vergebens
war das unruhvolle Spiel des Lebens.
(rigorosamente col la traduzione a fronte)

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: invertire assi grafico excel2003

Postdi wallace&gromit » 05/03/13 09:24

eccomi qua, perso tra le parole di Hermann Hesse e queste belle giornate di sole invernale (che hanno diradato la nebbia) ci ho messo un po' a completare la macro, che ora, grazie al tuo ultimo spunto, funziona alla grande!
il risultato è questo:
Codice: Seleziona tutto
Sub InvertiAssi()
'   macro che inverte le ascisse con le ordinate per ogni serie del grafico attivo
'   compilata 5.3.2013 Wallace&Gromit
'    Sheets("Grafico1").Select
    For totale = 1 To ActiveChart.SeriesCollection.Count
    Ssource = ActiveChart.SeriesCollection(totale).Formula
    t = Len(Ssource)
        For i = 1 To t
            If Mid(Ssource, i, 1) = "," Then
            GoTo seconda
            End If
        Next i
seconda:
        For l = i + 1 To t
            If Mid(Ssource, l, 1) = "," Then
            GoTo terza
            End If
        Next l
terza:
        For m = l + 1 To t
            If Mid(Ssource, m, 1) = "," Then
            GoTo togli
            End If
        Next m
togli:
        primaParte = Mid(Ssource, 1, i)
        vecchioX = Mid(Ssource, (i + 1), l - i)
        vecchioY = Mid(Ssource, (l + 1), m - l)
        resto = Mid(Ssource, (m + 1))
        nuovaForm = primaParte & vecchioY & vecchioX & resto
        ActiveChart.SeriesCollection(totale).Formula = nuovaForm
    Next totale
End Sub

il principio è un po' macchinoso: cerca la posizione delle tre virgole nella formula ricavata dalla serie del grafico e ne inverte i parametri.
Se ci fosse una funzione che cerca le varie posizioni di un elemento in un testo si potrebbe semplificare ulteriormente (ma considerando che è da poco più di un anno che mi sono lanciato nelle macro ne sono già molto orgoglioso).
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi Flash30005 » 05/03/13 11:42

Potresti usare la funzione InStr
Quindi verrebbe una macro così
Codice: Seleziona tutto
Sub InvertiAssi3()
'   macro che inverte le ascisse con le ordinate per ogni serie del grafico attivo
'   compilata 5.3.2013 Wallace&Gromit
    ActiveSheet.ChartObjects("Grafico 2").Activate
    For totale = 1 To ActiveChart.SeriesCollection.Count
    SSource = ActiveChart.SeriesCollection(totale).Formula
    MyPos1 = InStr(1, SSource, ",", 1)
    MyPos2 = InStr(MyPos1 + 1, SSource, ",", 1)
    MyPos3 = InStr(MyPos2 + 1, SSource, ",", 1)
    t = Len(SSource)
        primaParte = Mid(SSource, 1, MyPos1)
        vecchioX = Mid(SSource, MyPos1 + 1, MyPos2 - MyPos1)
        vecchioY = Mid(SSource, MyPos2 + 1, MyPos3 - MyPos2)
        resto = Mid(SSource, MyPos3 + 1, t - MyPos2)
        nuovaForm = primaParte & vecchioY & vecchioX & resto
        ActiveChart.SeriesCollection(totale).Formula = nuovaForm
    Next totale
End Sub


Che mi dà lo stesso errore della tua se ripetuta due volte
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: invertire assi grafico excel2003

Postdi wallace&gromit » 05/03/13 13:39

ottima soluzione condensata,
io la posso girare e rigirare come una frittella e non mi da mai errore (e non brucia!)
se a te da errore è perchè magari i tuoi dati di partenza sono stati "contaminati" con una qualche operazione precedente? Io ho usato i dati "puliti" con la funzione di Anthony e funziona alla grande.
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi Flash30005 » 05/03/13 15:08

Può darsi ma il file originale non è più disponibile nel link inviato da te

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: invertire assi grafico excel2003

Postdi wallace&gromit » 05/03/13 15:46

ecco l'ultima versione del file, funzionante, con le due macro ("mia" e tua).
http://www.filedropper.com/graficoinvertireassi6
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: invertire assi grafico excel2003

Postdi Anthony47 » 05/03/13 18:30

Anche
Codice: Seleziona tutto
Sub InvertiAssi33()
'   macro che inverte le ascisse con le ordinate per ogni serie del grafico attivo
'
For totale = 1 To ActiveChart.SeriesCollection.Count
    SSource = ActiveChart.SeriesCollection(totale).Formula
    mySplit = Split(SSource, ",")
    nuovaForm = mySplit(0) & "," & mySplit(2) & "," & mySplit(1) & "," & mySplit(3)
    ActiveChart.SeriesCollection(totale).Formula = nuovaForm
Next totale
End Sub

Ma io preferisco ancora sistemare le serie partendo dai dati di origine, mi sembra piu' a prova di errore.

Ciao a tutti
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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "invertire assi grafico excel2003":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti