Condividi:        

excel grafico xy a segmenti

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 xy a segmenti

Postdi wallace&gromit » 23/09/17 09:53

Ciao,
su un grafico a dispersione vorrei rappresentare dei segmenti formati sempre da 3 punti (x1,y1 / x2,y2 / x3,y3) collegati tra di loro.
Ogni segmento deve essere però separato dal seguente.
Le uniche due soluzioni che mi sono venute in mente sono:
a) creare tante serie quanti sono i segmenti (mortale!)
b) creare delle colonne d'appoggio in cui i dati sono una sopra l'altro, per esempio nella prima ci sono le x: primo punto x1, x2, x3, riga vuota secondo punto x1,x2,x3, ecc.
La variante b funziona abbastanza bene, ma ho bisogno, per ogni punto, 4 righe al posto di 1 e, con migliaia di dati il foglio di lavoro diventa poco gestibile. C'è una soluzione c?

Qui trovate un esempio di ciò che intendo
http://www.filedropper.com/graficoasegmenti
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Sponsor
 

Re: excel grafico xy a segmenti

Postdi Anthony47 » 25/09/17 01:31

Guarda, non sono certo di aver capito la domanda, ma ti propongo guesta macro:
Codice: Seleziona tutto
Sub NewTab()
Dim XRange As Range, xVal As Double, yVal As Double, newX As Double, newY As Double
Dim xDelta As Double, yDelta As Double, nextTab As Range
Dim xFactor As Long, yFactor As Long, ciPPa As Range
'
Set XRange = Range("I2")        '<<< L'inizio della tua serie di dati
'
Set nextTab = XRange.Offset(0, 10)
Range(nextTab, nextTab.Offset(30000, 1).End(xlUp)).ClearContents
Set XRange = Range(XRange, XRange.Offset(10000, 0).End(xlUp))
mynext = 1
For j = 1 To XRange.Count
xFactor = 1: yFactor = 1
If XRange.Cells(j, 1) = "" Then
    mynext = mynext + 1
Else
    xVal = XRange.Cells(j, 1)
    yVal = XRange.Cells(j, 2)
        nextTab.Cells(mynext, 1) = xVal + xDelta * xFactor
        nextTab.Cells(mynext, 2) = yVal + yDelta * yFactor
        mynext = mynext + 2
        xDelta = (XRange.Cells(j, 1) - XRange.Cells(j, 1).Offset(1, 0)) / 10
        yDelta = (XRange.Cells(j, 2) - XRange.Cells(j, 2).Offset(1, 0)) / 10
        xdelta1 = (XRange.Cells(j, 1) - XRange.Cells(j, 1).Offset(1, 0))
        ydelta1 = (XRange.Cells(j, 2) - XRange.Cells(j, 2).Offset(1, 0))
        If (xdelta1 > 0) Xor (xDelta > 0) Then xFactor = xFactor * (-1)
        If (ydelta1 > 0) Xor (yDelta > 0) Then yFactor = yFactor * (-1)
        nextTab.Cells(mynext, 1) = xVal - xDelta * xFactor
        nextTab.Cells(mynext, 2) = yVal - yDelta * yFactor
        mynext = mynext + 1
End If
Next j
For Each ciPPa In Range(nextTab, nextTab.Offset(20000, 0).End(xlUp))
    If ciPPa <> "" And ciPPa.Offset(-1, 0) = "" And ciPPa.Offset(1, 0) = "" Then
        ciPPa.Resize(1, 2).ClearContents
    End If
Next ciPPa
MsgBox ("Create nuove serie dati")
End Sub

Va messa in un modulo standard del vba; la riga marcata <<< va adattata come da commento.

Essa crea in colonne S:T (se la tabella iniziale e' in I:J) una nuova serie di dati, piu' articolata di quella iniziale, con le interruzioni come le ho capite io: creerai il grafico su questa tabella non su quella di origine.

Vedi se e' quello che chiedevi e se puoi lavorarci sopra, altrimenti prova a fare un esempio di come vorresi il grafico (anche fatto con Paint).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel grafico xy a segmenti

Postdi wallace&gromit » 25/09/17 08:27

Ciao Anthony, grazie, ma probabilmente non mi sono spiegato bene:
le colonne I e J del mio esempio sono già elaborate in modo da ottenere la rappresentazione giusta.
Il blocco originale è nelle colonne da A a F.
Io avrei voluto ottenere la rappresentazione grafica dei segmenti senza dovere ricorrere alla trascrizione delle righe.
Visto però che anche tu proponi di passare da lì suppongo non ci siano alternative.
Però mi sta frullando per la testa qualcosa di totalmente diverso e cioè passare il tutto ad un programma cad, che, tra l'altro, mi consente di avere un risultato già referenziato in modo corretto.
Quindi per il momento chiuderei qui.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: excel grafico xy a segmenti

Postdi Anthony47 » 26/09/17 01:54

Ah ha ha... pero' per me un "segmento" e' una parte di una retta delimitata da due punti estremi...

Anche se hai a mente "la soluzione", con questa macro creeresti facilmente le serie di colonna I:J, partendo da A:F
Codice: Seleziona tutto
Sub reTab()
Dim Init As String, NwTab As String, I As Long, J As Long
'
Init = "A2"          '<<< Tabella iniziale
NwTab = "I2"         '<<< Area nuova tabella
'
Range(NwTab).Resize(10000, 2).ClearContents
For I = Range(Init).Row To Range(Init).Offset(20000, 0).End(xlUp).Row
    For J = 0 To 2
        Range(NwTab).Offset(mynext, 0) = Range(Init).Offset(mxneyt, J * 2)
        Range(NwTab).Offset(mynext, 1) = Range(Init).Offset(mxneyt, J * 2 + 1)
        mynext = mynext + 1
    Next J
    mynext = mynext + 1
    mxneyt = mxneyt + 1
Next I
End Sub

Le istruzioni marcate <<< sono come al solito da adattare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel grafico xy a segmenti

Postdi wallace&gromit » 26/09/17 10:33

Ahi, bocciato in matematica.
Però come si descrive una linea a più nodi? Polilinea è un concetto matematico o grafico?

L'importante è che ci siamo capiti sull'effetto finale. Però, come detto, ho preferito optare per il passaggio ad autocad, creando un file script che permette di tracciare i punti referenziati sull'area di lavoro. L'ultima parte della macro, in cui, dopo avere settato le variabili, nelle colonne AT e AU costruisco qualcosa di analogo a quanto proposto da Anthony e poi la mando ad autocad è questa:
Codice: Seleziona tutto
...
Range("AV" & UROut + 1) = "_pline"
Range("AT" & UROut + 2) = ProgPrec
Range("AT" & UROut + 3) = ProgM
Range("AT" & UROut + 4) = ProgSucc
Range("AU" & UROut + 2) = ZPrec
Range("AU" & UROut + 3) = ZM
Range("AU" & UROut + 4) = ZSucc
Range("AV" & UROut + 2).FormulaLocal = Range("AT" & UROut + 2) & "," & Range("AU" & UROut + 2)
Range("AV" & UROut + 3).FormulaLocal = Range("AT" & UROut + 3) & "," & Range("AU" & UROut + 3)
Range("AV" & UROut + 4).FormulaLocal = Range("AT" & UROut + 4) & "," & Range("AU" & UROut + 4) & " "

Next i

Call CreaScript

End Sub

Sub CreaScript()
    ScriptName = Application.GetSaveAsFilename("", fileFilter:="File di Testo (*.scr), *.scr")
    On Local Error Resume Next
    Kill ScriptName
    On Error GoTo 0
   
    Open ScriptName For Output As 1
        i = 2
        Do Until Range("AV" & i) = ""
                    Print #1, Range("AV" & i).Text
            i = i + 1
        Loop
    Close 1
    Range("AV2").Select

End Sub

Da notare che ho tribolato non poco per fare passare dei numeri separati da virgola, che excel voleva sempre unirmi in una cifra sola, per es. 4500,1200 veniva trasformato automaticamente in 45001200. Da lì l'uso (di per sé improprio) di ".FormulaLocal".
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21


Torna a Applicazioni Office Windows


Topic correlati a "excel grafico xy a segmenti":


Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti