Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Baricentro mobile con Macro

  • Messaggi
  • ONLINE
    L2018
    Post: 349
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 08/10/2022 12:40
    Buongiorno, mi dispiace vedere il forum silente da troppo tempo, per cui pongo un problemino a mio avviso interessante.

    Supponiamo di avere una serie di punti e che questi punti abbiano dei valori di coordinata, geografica o cartesiana.
    se noi li consideriamo coordinate geografiche o cartesiane saremmo tentati di costruire un grafico che poi non sarebbe più molto facile da gestire nel foglio, almeno per quanto mi riguarda o per quanto ne so io.
    Se invece queste coordinate le scriviamo in una colonna A (es. 4,6) o in 2 colonne A,B di un foglio (es. A=4, B=6), potremmo facilmente, con una macro, estrapolare la media dei valori delle ascisse e la media dei valori delle ordinate.
    in questo modo otterremmo un valore medio di coordinata che rappresenta esattamente il Baricentro di una poligono costituito dai punti stessi.
    La macro quindi ottiene il baricentro facendo la media delle ordinate e delle ascisse.
    Ma possiamo rendere più interessante il giochetto facendo in modo che se a fianco dei valori dei punti noi scriviamo una coordinata diversa da quella che c'è nello stesso rigo, colonna(e)precedenti, la macro automaticamente copierà nella nuova colonna i valori preesistenti nella colonna(e) precedente.
    Ed anche se noi scriviamo, in C o in C,D una nuova coordinata ma su una riga diversa dalle precedenti, la macro copierebbe in C, o in C,D i valori precedenti, realizzando così una nuova colonna aggiornata di coordinate, su cui calcolare, cioè aggiornare il Baricentro.
    Facendo in modo che il processo si ripeta automaticamente ad ogni nuova immissione o variazione di coordinate si otterrebbe una serie di valori di baricentro che puo' essere interpretata come lo spostamento della figura virtuale composta dai poligoni successivi.
    Quale è il significato di questo rompicapo ? per esempio lo spostamento di un temporale indicato dallo spostamento dei fulmini.
    L'idea mi è venuta dal sito www.lightningmaps.org che mostra i fulmini in tempo reale e quindi lo spostamento di un temporale.
    Se l'argomento puo' essere di interesse di chi è appassionato di macro mi piacerebbe avere un'idea di come congegnare il codice, non oso chiedere la pappa pronta, ma io posso creare una macro solo se (quasi)tutto il suo codice riesce a seguire il linguaggio di programmazione che uso, cioè collegare il codice al foglio per far eseguire la macro mi è davvero difficile.
    Se interessati potrei provare a fare uno schema più decente di questo qui sotto, ma che al momento non ho.
    Spero di essere stato abbastanza chiaro.
    Grazie

    A B......... C D..........E F
    1 3......... 7 9..........7 9
    2 4......... 2 4..........2 4
    3 6......... 3 6..........3 6
    6 8......... 6 8..........6 8
    .................................3 9

    Risu........ Risult......Risult.
    4 7......... 6 9..........7 12

    LEO
    [Modificato da L2018 08/10/2022 13:38]

    LEO
    https://t.me/LordBrum
  • ONLINE
    L2018
    Post: 349
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 11/10/2022 12:41
    Buongiorno
    mi sono accorto di qualche strafalcione nel mio esempio, spero che non sia stato questo il motivo della mancata risposta.
    In realtà la tabella, in qualche modo corretta, sarebbe:

    A..B......... C....D..........E....F
    1..3......... 7....9..........7....9
    2..4......... 2....4..........2....4
    3..6......... 3....6..........3....6
    6..7......... 6....7..........6....7
    ....................................3....9

    Risu........ Risult......Risult.
    3..5.........4,5..6,5......4,2..7

    sono le medie delle colonne A,B,C,D,E,F e quindi 3,5 - 4,5,6,5 e 4,2,7 sono coordinate da leggere come
    X,Y = 3,5
    X,Y = 4,5,6,5
    X,Y = 4,2,7
    eccetera

    LEO

    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.013
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 11/10/2022 17:34
    Ciao
    La mancanza di interlocutori credo dipenda principalmente da due fattori:
    a) comprensione di cosa si vuole fare (ed io, ti assicuro, non ho capito quale dovrebbe essere il risultato finale)
    b) mancanza di un tuo file che dia un'idea di cosa bisogna fare (o correggere se il risultato non soddisfa).

    Ciao,
    Mario
  • ONLINE
    L2018
    Post: 350
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 11/10/2022 18:20
    Ciao Mario

    mi permetto di dissentire un po' dalle tue spiegazioni, intanto perchè, come ho già detto, negli ultimi 10-15 giorni non ho visto traffico, certo non si puo' escludere che qualcuno abbia visto e non potuto reagire per non aver capito, ma io tengo quasi continuamente aperto il forum e vedo il traffico.

    la tua seconda spiegazione mi sconvolge abbastanza perchè con quella sorta di papiro che ho scritto ero sicuro di essermi spiegato abbastanza bene, certo molto meglio di altri utenti.
    Mi permetto di immaginare che una spiegazione, diffusa, chiara, precisa sia sufficiente a rendere l'idea, al punto che lo schema che ho pubblicato poco aggiungerebbe alla spiegazione, per questo non ho messo un file.

    Comunque mi adatto, cercherò di mettere un file, che necessariamente non avrà formule, perchè non è nell'ipotesi, e tanto meno avrà una macro, che è proprio ciò che vorrei. Quindi nel file ci sarebbe di nuovo un testo descrittivo e ripetitivo del mio desiderio.
    No problem.

    Ciao

    LEO

    LEO
    https://t.me/LordBrum
  • ONLINE
    L2018
    Post: 351
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 11/10/2022 19:00
    ed ecco quindi un file di esempio in cui ho solo potuto ripetere nelle righe di istruzione ciò che ho già detto

    la macro potrebbe essere un po' flessibile nel suo funzionamento, insomma qualche abbellimento operativo, e in seguito potrebbe essere resa più sofisticata

    LEO

    LEO
    https://t.me/LordBrum
  • OFFLINE
    rollis13
    Post: 1.277
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Veteran
    Excel 2016-32bit Win11
    10 11/10/2022 19:52
    Un saluto a tutti.
    Fino al calcolo delle medie si sono poi per il resto non ho capito granché:
    Option Explicit
    Sub CalcolaMedie()
        Dim PR     As Long                            'prima riga
        Dim PC     As Long                            'prima colonna
        Dim UR     As Long                            'ultima riga
        Dim UC     As Long                            'ultima colonna
        Dim x      As Long                            'contatore generico
        PR = 1                                        '<- adeguare come necessita
        PC = 1                                        '<- adeguare come necessita
        x = 1
        UC = Cells(PR, PC).SpecialCells(xlLastCell).Column
        Do Until x = UC
            If Cells(PR, x) <> "" And Cells(PR, x).Offset(0, 1) <> "" Then
                UR = Cells(PR, x).End(xlDown).Row
                Cells(UR + 2, x) = "Media X"
                Cells(UR + 3, x) = WorksheetFunction.Average(Range(Cells(PR, x), Cells(UR, x)))
                Cells(UR + 2, x + 1) = "Media Y"
                Cells(UR + 3, x + 1) = WorksheetFunction.Average(Range(Cells(1, x + 1), Cells(UR, x + 1)))
            End If
            x = x + 1
        Loop
    End Sub

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • ONLINE
    L2018
    Post: 352
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 11/10/2022 20:38
    ciao Rollis

    anzitutto GRAZIE dell'ottima macro
    in basso alle colonne A e B, sotto alle diciture Media X e Media Y, compaiono 2 valori : 3 e 5
    Cerchiamo di immaginarli legati in questo modo: 3,5, cioè 2 valori separati da virgola, che è la notazione di una coordinata cartesiana
    io ho messo i valori separati in 2 colonne perché da solo avrei saputo gestirli meglio, ma forse in questo modo ho creato confusione agli altri.
    quindi 3,5 è la coordinata di un punto del poligono ideale che ha 4 vertici, quelli delle 4 coppie di valori delle colonne A e B, da intendersi anche esse come coordinate.
    Di tale poligono, che non disegniamo per praticità, 3,5 è la coordinata del baricentro geometrico.
    Se in successive coppie di colonne scrivo altri valori che non differiscono molto dalle colonne precedenti, posso immaginare il tutto come una successione di poligoni, dei quali il valore in basso, baricentro, indicherà lo spostamento del primo poligono (prime 2 colonne) in una qualche direzione, come una nuvola di blob.
    Infatti se io unissi su un piano cartesiano quei valori di baricentro, otterrei una linea e potrei dire che il temporale a cui mi riferisco nel sito che ho citato, e che ha l'estensione delimitata dai suoi fulmini periferici si sta spostando in una determinata direzione.
    Troppo cervellotico ? a me non pare, tanto è vero che ho trovato almeno 2 programmi che fanno esattamente questo lavoro, ma vuoi mettere il gusto di un giocattolo fatto in casa ?

    Grazie ancora, forse si puo' sofisticare di piu la macro ma ne possiamo riparlare
    P.S.
    Se ci riesco devo fare in modo che la macro gestisca coppie di colonne anche abbastanza più lunghe di 5 valori, vediamo se trovo i punti da modificare.

    LEO


    [Modificato da L2018 11/10/2022 21:02]

    LEO
    https://t.me/LordBrum
  • OFFLINE
    rollis13
    Post: 1.278
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Veteran
    Excel 2016-32bit Win11
    00 11/10/2022 22:12

    Se ci riesco devo fare in modo che la macro gestisca coppie di colonne anche abbastanza più lunghe di 5 valori, vediamo se trovo i punti da modificare.

    Per quest'altro dettaglio non devi fare niente, l'ho già previsto. Con UR calcolo sempre l'ultima riga della colonna ed il risultato viene sempre messo poco sotto, pertanto, basta non superare il numero massimo di righe consentite da Excel -2. Se hai colonne di lunghezza diversa ma vuoi tenere le medie tutte allineate sulla stessa riga basta modificare il calcolo della variabile UR.
    Mentre in alto puoi decidere di partire da qualunque riga e colonna, basta adeguare nella macro i valori di PR e PC.
    [Modificato da rollis13 11/10/2022 22:56]

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • ONLINE
    L2018
    Post: 353
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 11/10/2022 22:19
    avevo sospettato qualcosa del genere, e poco fa ho fatto dei tentativi, devo organizzare meglio le modifiche, grazie ancora

    LEO

    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.014
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    20 12/10/2022 10:30
    Salve a tutti

    Ho fatto mia la macro di @rollis13 (ciao Rolando) ma l'ho applicata all'Evento Worksheet_Change.
    Nell'allegato prova a cambiare uno dei valori delle colonne M:N e vedrai il Grafico adeguarsi spostando anche il quadratino rosso (punto medio o baricentro come lo hai chiamato tu).

    E' quello che volevi?

    Ciao,
    Mario
  • ONLINE
    L2018
    Post: 354
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 12/10/2022 11:24
    Ciao Marius

    OTTIMO, GRANDIOSO !

    è esattamente ciò che mancava, ma mi vergognavo nel richiedere questa miglioria, e neppure avrei saputo farla.
    questo aggiornamento risolve anche un altro problema, e cioè che i valori che indicano delle coordinate devono costituire una figura chiusa, al "buio" non ci si riesce.
    Qui si vede al volo se la cosa si verifica o meno e quindi il tuo aggiornamento permette di correggere la figura.
    Veramente risolutivo.
    Grazie, grazie davvero

    La LODE accademica.....se il grafico potesse essere indirizzato, almeno alternativamente o a scelta, anche verso (le) altre coppie di colonne
    in tal modo si potrebbero correggere anche le altre coordinate, ottenere poligoni successivi, fare di ogni grafico uno screenshot, e il gioco è fatto.
    pazzesco

    LEO
    [Modificato da L2018 12/10/2022 11:48]

    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.015
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    10 12/10/2022 15:43
    Ciao
    Ho aggiunto un altro Foglio e disposto i dati in maniera leggermente diversa.
    Questa la macro
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim PR     As Long                            'prima riga
    Dim PC     As Long                            'prima colonna
    Dim UR     As Long                            'ultima riga
    Dim UC     As Long                            'ultima colonna
    Dim x      As Long                            'contatore generico
    Dim cn As Long
    Dim LC1 As String, LC2 As String
    Dim valX1 As String, valY1 As String, valX2 As String, valY2 As String
    PR = 2                                        '<- adeguare come necessita
    PC = 1                                        '<- adeguare come necessita
    x = 1
    UC = Cells(PR, PC).SpecialCells(xlLastCell).Column
    If Not Intersect(Target, Range("J2")) Is Nothing Then
      Do Until x = UC
        If Cells(PR, x) <> "" And Cells(PR, x).Offset(0, 1) <> "" Then
          UR = Cells(PR, x).End(xlDown).Row
          Cells(UR + 2, x) = "Media X"
          Cells(UR + 3, x) = WorksheetFunction.Average(Range(Cells(PR, x), Cells(UR, x)))
          Cells(UR + 2, x + 1) = "Media Y"
          Cells(UR + 3, x + 1) = WorksheetFunction.Average(Range(Cells(1, x + 1), Cells(UR, x + 1)))
        End If
        x = x + 1
      Loop
      'cerca la colonna relativa al grafico da mostrare
      cn = Application.WorksheetFunction.Match(Target, Range(Cells(1, 1), Cells(1, UC)))
      'converte numero colonna in lettera (sia per cn sia per cn+1
      LC1 = Replace(Cells(1, cn).Address(False, False), "1", "")
      LC2 = Replace(Cells(1, cn + 1).Address(False, False), "1", "")
      UR = Cells(PR, cn).End(xlDown).Row 'assume ultima riga dei dati
      valX1 = "Foglio1!$" & LC1 & "$" & PR & ":$" & LC1 & "$" & UR
      valY1 = "Foglio1!$" & LC2 & "$" & PR & ":$" & LC2 & "$" & UR
      valX2 = "Foglio1!" & LC1 & "$" & UR + 3
      valY2 = "Foglio1!" & LC2 & "$" & UR + 3
      UR = Cells(PR, cn).End(xlDown).Row
      'modifica il Grafico
      ActiveSheet.ChartObjects(1).Activate
      ActiveChart.SeriesCollecti0n(1).XValues = valX1
      ActiveChart.SeriesCollecti0n(1).Values = valY1
      ActiveChart.SeriesCollecti0n(2).XValues = valX2
      ActiveChart.SeriesCollecti0n(2).Values = valY2
      ActiveChart.ChartTitle.Text = Target
    End If
    End Sub
    
    

    Prova a selezionare un dato nella cella gialla.

    Fai sapere. Ciao,
    Mario
  • ONLINE
    L2018
    Post: 355
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 12/10/2022 16:18
    anche questa è ottima e comoda modifica, di cui ringrazio, e penso di riuscire ad estenderla un po'
    naturalmente l'appetito vien mangiando, ed allora io vorrei incaricarmi di alcune cosette
    - restringere a 4 la larghezza delle colonne, in modo che nel foglio entrino più dati, e lo so fare
    - eliminare UNA di ogni coppia di colonne vuote, lo so fare
    - fissare a 18 o circa il valore di UR, in modo che i risultati colonnari appaiano sulla stessa riga, come giustamente osservava Rollis, lo so fare
    - estendere a 10 il range delle Ordinate E delle Ascisse, penso di riuscirci ma non sono sicuro

    intanto mi son perso un passaggio nel tentativo di fare io qualcosa, ed è sparito il quadratino rosso importante, forse avendo cambiato i riferimenti alle colonne per averne cancellate una ogni coppia di vuote per risparmio spazio.
    ma ora ho il tuo ultimo aggiornamento e ricomincio volenterosamente.
    E comunque vedo con piacere che la possibilità di vedere il grafico per le varie colonne di coordinate permette di correggere l'illogicità di certi valori numerici, sempre allo scopo di realizzare poligoni chiusi.

    benissimo, un grazie "progressivo"

    LEO


    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.016
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 12/10/2022 17:16
    Ciao
    Una volta ebbi a dire: Excel è come il Mediterraneo: ci sono coste frastagliate, sabbiose, insenature, baie, isole, stretti. I Grafici rispetto al Mediterraneo sono come il Mar D'Azov (con la recent guerra tutti sappiamo dove si trova) che è si piccolo ma ha una profondità incredibile."

    Avventurarsi nei Grafici è operazione ardua ma piena di soddisfazioni.

    Ma non voglio divagare più. Veniamo ai nuovi problemi.
    Queste due righe di codice (rifacendomi alla macro di @Rollis13) calcola la Serie 2 che rappresenta il puntino
    valX2 = "Foglio1!" & LC1 & "$" & UR + 3 'ascissa
    valY2 = "Foglio1!" & LC2 & "$" & UR + 3 'ordinata
    che poi vengono passate al Grafico per segnare il quadratino rosso
    ActiveChart.SeriesCollecti0n(2).XValues = valX2
    ActiveChart.SeriesCollecti0n(2).Values = valY2
    Come noterai fanno riferimento alla cella posta 3 righe più in basso della colonna dei valori. Se cambi la posizione della media devi adeguare anche il riferimento. Se vuoi fissarlo a 18 allora invece della variabile UR + 3 devi indicare 18 (e non hai più necessità di andare a recuperare il valore di ogni coppia di colonne.

    Se elimini le colonne non avrai alcun problema. L'importante è che ci sia l'intestazione col nome del Grafico che vuoi evidenziare (quello che io avevo posto in A1, D1 e F1. La ricerca che fa la macro cerca la colonna in cui è scritto il titolo che hai scelto.

    Aspetto che tu mi dica che hai vinto🤣
    Altrimenti chiedi pure.

    Ciao,
    Mario
    [Modificato da Marius44 12/10/2022 17:17]
  • ONLINE
    L2018
    Post: 356
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 12/10/2022 17:43
    Bella la doppia similitudine Excel-Grafici-Mediterraneo-Azov, infatti per risponderti a tono dico che pur non sapendo nuotare uso il windsurf
    mo m'è piaciuta pure questa.
    intanto devo leggermi bene la tua spiegazione, e verificarla punto per punto sul campo.
    ma devo dire che non ce la faccio per oggi, con questo giochetto interessante ormai ho troppa carne al fuoco

    Soprattutto sono invaso da mail di sollecito pagamenti gestori vari a causa di fatture che ricevo via mail e confondo o dimentico, per cui devo sistemare urgentemente. (per caso hai una macro che fa pagare tutto in un solo click ?).

    Spero di riuscire ad applicare speditamente per comunicare eventuale vittoria, non è che sia tanto facile, errori ne farò e magari chiederò facendo la rima....

    Grazie
    As soon as

    LEO

    LEO
    https://t.me/LordBrum
  • 15MediaObject5,00415 4