[Risolto]:Modificare macro per avere ordine decrescente

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
solitariopc
Messaggi: 63
Iscritto il: mercoledì 1 febbraio 2012, 12:36

[Risolto]:Modificare macro per avere ordine decrescente

Messaggio da solitariopc »

Buongiorno,
come molti iscritti al forum anche io sono un semplice fruitore delle conoscenze condivise, molti dei volontari capaci e competenti sono una preziosa risorsa per la prosperità e vitalità stessa.
Mi sono lasciato andare su riflessioni soggettive e personali, chiedo scusa e inizio ad esporre la richiesta.
Come da file allegato ho adattato alle personali esigenze una discussione un po' datata (viewtopic.php?f=9&t=4565) riuscendo nella piccola e scarsa conoscenza a fare funzionare la macro inserita. Chiedo: come posso porre in ordine decrescente la classifica? Come è evidente dall'allegato essa rimane nell'ordine così come è stata costruita; certamente si può correggere intervenendo sulla stessa macro ma, non ho le capacità conoscitive per scrivere ed adattare.
Ringrazio per l'ascolto Voi tutti, con particolare interesse Gaetanopr che ha prodotto la macro in questione commentando anche le varie fasi di scrittura (cosa molto apprezzata).

Ancora una serena giornata e saluti.
Allegati
Clas_Cal_CU_2 prova.ods
Modificato titolo. Era: "Per completare macro"
(18.55 KiB) Scaricato 129 volte
Ultima modifica di solitariopc il venerdì 17 novembre 2017, 10:35, modificato 1 volta in totale.
LibreOffice 5.1.6.2 su LinuxMint 18
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Per completare macro

Messaggio da patel »

La macro preleva i dati e li inserisce nella tabella, i punteggi sono ottenuti tramite formule, quindi non lo puoi fare, però potresti copiare la tabella su un altro foglio incollando con Incolla speciale (testo e numeri) e poi ordinarla da Dati, Ordina e quindi stamparla
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
solitariopc
Messaggi: 63
Iscritto il: mercoledì 1 febbraio 2012, 12:36

Re: Modificare macro per avere ordine decrescente

Messaggio da solitariopc »

Buongiorno,
in risposta a la risposta di Patel riguardante la fattibilità o la possibilità di ottenere ciò da me richiesto, sono qui a ringraziare della spiegazione fornitami, pensavo fosse semplice ma, era solo una personale valutazione.
Con la soluzione proposta ho creato un secondo foglio (classifica) assegnando alle varie celle un collegamento e non un copia-incolla,
facendo qualche prova sembra tutto OK, ho formattato in modo decrescente e sembra funzionare, dico sembra..., perché non so come evolvera il conteggio su lungo periodo (Allego file). Smanettando per implementare il numero dei gol subiti e segnati sommando i vari incontri ho quasi sviluppato un artrosi alla mano. Scherzi a parte, esiste una funzione che riduca il lavoro.
Grazie ancora Patel della disponibilità, auguro una serena giornata a Te e ai frequentatori del forum.

Saluti, Solitariopc
Allegati
Clas_Cal_Lega_Pro.ods
(33.01 KiB) Scaricato 117 volte
LibreOffice 5.1.6.2 su LinuxMint 18
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Modificare macro per avere ordine decrescente

Messaggio da patel »

Dovresti rinunciare alle formule e fare tutto il lavoro via macro, in tal modo la tabella conterrebbe soltanto dati e sarebbe facilmente ordinabile anche via macro, però dovrsti rinunciare alle righe intermedie vuote.
Intanto prova questa e controlla i risultati

Codice: Seleziona tutto

Sub Main
Dim VC As Integer, PC As Integer, SC As Integer, VT As Integer, ST As Integer, PT As Integer
Dim Doc As Object, Sh As Object, c As Object
Dim LastRow As Long, i As Long, t As Long  
Doc = ThisComponent
Sh = Doc.Sheets(0)

   c = Sh.createCursor
   c.gotoEndOfUsedArea(false)
   LastRow = c.RangeAddress.EndRow 
 
   For i = 8 To 44 step 2
      VC = 0
      PC = 0
      SC = 0
      VT = 0
      ST = 0
      PT = 0 
     For t = 9 To LastRow
       if Sh.getCellByPosition(1, i).String =  Sh.getCellByPosition(22, t).String Then
        if Len(Sh.getCellByPosition(23, t).String) > 0 Then
         if Sh.getCellByPosition(23, t).Value >  Sh.getCellByPosition(24, t).Value Then
           VC = VC + 1
            elseif Sh.getCellByPosition(23, t).Value = Sh.getCellByPosition(24, t).Value Then  
           PC = PC + 1
            elseif Sh.getCellByPosition(23, t).Value < Sh.getCellByPosition(24, t).Value Then  
           SC = SC + 1
            end if
            end if
         elseif Sh.getCellByPosition(1, i).String =  Sh.getCellByPosition(25, t).String Then
          if Len(Sh.getCellByPosition(23, t).String) > 0 Then
            if Sh.getCellByPosition(23, t).Value >  Sh.getCellByPosition(24, t).Value Then
              ST = ST + 1
            elseif Sh.getCellByPosition(23, t).Value = Sh.getCellByPosition(24, t).Value Then  
              PT = PT + 1
            elseif Sh.getCellByPosition(23, t).Value < Sh.getCellByPosition(24, t).Value Then  
              VT = VT + 1
            end if
            end if   
          end if 
      Next t 
      
      Sh.getCellByPosition(9, i).Value = VC
      Sh.getCellByPosition(10, i).Value = PC
      Sh.getCellByPosition(11, i).Value = SC
      Sh.getCellByPosition(14, i).Value = VT
      Sh.getCellByPosition(15, i).Value = PT
      Sh.getCellByPosition(16, i).Value = ST

      Sh.getCellByPosition(8, i).Value =  Sh.getCellByPosition(18, i).Value + Sh.getCellByPosition(13, i).Value
      Sh.getCellByPosition(7, i).Value =  Sh.getCellByPosition(17, i).Value + Sh.getCellByPosition(12, i).Value
      Sh.getCellByPosition(6, i).Value =  Sh.getCellByPosition(16, i).Value + Sh.getCellByPosition(11, i).Value
      Sh.getCellByPosition(5, i).Value =  Sh.getCellByPosition(15, i).Value + Sh.getCellByPosition(10, i).Value
      Sh.getCellByPosition(4, i).Value =  Sh.getCellByPosition(14, i).Value + Sh.getCellByPosition(9, i).Value
      Sh.getCellByPosition(3, i).Value =  Sh.getCellByPosition(4, i).Value + Sh.getCellByPosition(5, i).Value+ Sh.getCellByPosition(6, i).Value
      Sh.getCellByPosition(2, i).Value =  Sh.getCellByPosition(4, i).Value * 3 + Sh.getCellByPosition(5, i).Value + 3 + Sh.getCellByPosition(6, i).Value * 3
   Next i   
     
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
solitariopc
Messaggi: 63
Iscritto il: mercoledì 1 febbraio 2012, 12:36

Modificare macro per avere ordine decrescente

Messaggio da solitariopc »

Buonasera a chi legge queste righe, a chi si adopera con consigli e tempo, chi mette a disposizione conoscenze e competenze.
La chiara risposta che Patel ha esposto, sulla scarsa compatibilità tra macro e funzioni e quindi la scelta di adottare o l'una o l'altra mi ha fatto scegliere, ho continuato a portare a termine la ricerca su ogni singola cella sommando i vari valori, la mia richiesta era una semplice informazione o suggerimento per accorciare il lavoro (esempio un cerca verticale sulle colonne X, Y, del foglio calendario incontri da sommare).
Sulla macro che Lei mi ha suggerito di provare devo dire che non ha sortito il risultato che mi ero prefisso, le prove hanno restituito valori inesatti che non corrispondono alla somma dei valori inseriti. Un po' di pazienza e lavoro in più e il risultato è stato raggiunto.
Grazie ancora della disponibilità.

Buona notte.
Allegati
Clas_Cal_Lega_Pro.ods
(42.69 KiB) Scaricato 144 volte
LibreOffice 5.1.6.2 su LinuxMint 18
Rispondi