Popolare una legenda in funzione di dei valori

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
ariex
Messaggi: 40
Iscritto il: venerdì 19 ottobre 2018, 0:19

Popolare una legenda in funzione di dei valori

Messaggio da ariex »

Buonasera a tutti,

avrei bisogno di aiuto, ho un file con un intervallo di dati formato da nomi e date.
In una cella avrei bisogno di una legenda con la descrizione delle sole abbreviazioni contenute in un intervallo.

Mi spiego meglio, in un foglio ci sono tutte le abbreviazioni che sono molte, per miglioreare la legibilità voglio che si vedano solo quelle utilizzate nella selezione.

ho messo un file in allegato
grazie in anticipo per l'aiuto.
Allegati
FORUM2(1).ods
(50 KiB) Scaricato 20 volte
Suite libre office Versione: 7.1.0.3 windows 10
Avatar utente
gioh66
Volontario assiduo
Volontario assiduo
Messaggi: 1902
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Popolare una legenda in funzione di dei valori

Messaggio da gioh66 »

Ciao. Credo che per la tua soluzione ci voglia una macro.
Con le formule si potrebbe risolvere installando l'estensione lox365, che trovi qui
https://extensions.libreoffice.org/en/e ... show/27434
e che ti mette a disposizione la funzione TOCOL (oltre ad altre)
La formula è questa

Codice: Seleziona tutto

=TESTO.UNISCI(", ";1;UNICI(TOCOL(SCARTO(F2;1;CONFRONTA(E1;G2:SH2;0);7;4))))
e che come output di darebbe questo
Allegati
abbreviazioni.png
abbreviazioni.png (56.58 KiB) Visto 284 volte
...se sei soddisfatto delle risposte ricevute metti il [Risolto] viewtopic.php?f=9&t=5661

Libreoffice 25.8 LinuxMint 21/22
ariex
Messaggi: 40
Iscritto il: venerdì 19 ottobre 2018, 0:19

Re: Popolare una legenda in funzione di dei valori

Messaggio da ariex »

Grazie gioh66 ,la formula mi funziona in parte, il comando "UNICI" non mi funziona.
Comunque ho fatto una macro, però non riesco ad eliminare i valori doppi dall'Array
Qualcuno mi può aiutare??
Allegati
FORUM2.ods
(53.96 KiB) Scaricato 57 volte
Suite libre office Versione: 7.1.0.3 windows 10
Attilafdd
Volontario
Volontario
Messaggi: 593
Iscritto il: giovedì 5 aprile 2012, 8:25

Re: Popolare una legenda in funzione di dei valori

Messaggio da Attilafdd »

ariex ha scritto: mercoledì 1 gennaio 2025, 22:14 ...il comando "UNICI" non mi funziona.
La funzione UNICI è implementata in Libreoffice dalla 24.8 (https://wiki.documentfoundation.org/ReleaseNotes/24.8).
Prova ad aggiornare all'ultima versione. (https://it.libreoffice.org/download/download/)
LibreOffice 25.2.5 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
ariex
Messaggi: 40
Iscritto il: venerdì 19 ottobre 2018, 0:19

Re: Popolare una legenda in funzione di dei valori

Messaggio da ariex »

Si verissimo Attilafdd non avevo libreoffice aggiornato.
comunque sono riusctito a fare una macro che preferisco per il mio utilizzo:

Codice: Seleziona tutto

sub CicloLegenda



GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
Dim Doc As Object

Dim MatriceDati() as string
Dim RimuoveNulli() as string
Dim Ordina() as string

Dim Righe,Colonne As Variant
Dim Contatore,ContaRighe,ContaColonne As Variant
Dim SearchValue,Column,Mode As Variant

Doc   = ThisComponent
Foglio = Doc.Sheets.getByName("Foglio1")
FoglioDati= Doc.Sheets.getByName("Legenda")
Cella = Foglio.GetCellByPosition(5,3).String

Intervallo = Foglio.getCellRangeByName("G3:I9")
   Doc.CurrentController.Select(Intervallo)
   Righe=Intervallo.rangeaddress.endrow - Intervallo.rangeaddress.startrow 
   Colonne=Intervallo.rangeaddress.endcolumn - Intervallo.rangeaddress.startcolumn
  
'Somma=Righe+Colonne+5
'redim MatriceDati(Somma)
redim MatriceDati(100)
Contatore=0
For ContaRighe=Intervallo.rangeaddress.startrow to Intervallo.rangeaddress.endrow
For ContaColonne=Intervallo.rangeaddress.startcolumn to Intervallo.rangeaddress.endcolumn
Cella = Foglio.GetCellByPosition(ContaColonne,ContaRighe).String

MatriceDati(Contatore) = Cella

Contatore=Contatore+1
Next ContaColonne
Next ContaRighe



'TrimArray
'Rimuove da una matrice unidimensionale tutti gli elementi Null, Empty e di lunghezza zero. 

'Dim RimuoveNulli As Variant
RimuoveNulli = SF_Array.TrimArray(MatriceDati())

'Unique
'Costruisce un insieme di valori univoci derivati dalla matrice di partenza. 

'Dim Ordina As Variant
Ordina = SF_Array.Unique(RimuoveNulli(), CaseSensitive := True)

'Cercare i dati da scrivere

svc = createUnoService( "com.sun.star.sheet.FunctionAccess" )

CellRange = FoglioDati.getCellRangeByName("A1:B10000")
Column = 2
Mode = 0
   for ii= LBound(Ordina()) To UBound(Ordina())
   SearchValue = Ordina(ii)
 
   arg = Array(SearchValue, CellRange, Column, Mode)
   Value = svc.callFunction("VLOOKUP",arg)
   ssss=ssss & SearchValue & "=" & Value & ";"
   '
   next
msgbox ssss

Foglio.getCellByPosition(5,12).setstring ssss
end sub

in allegato il file conla macro.

un unico problema nella macro volevo dimensionare l'ARRAY che utilizzo in funzione del Range che viene memorizzato, ma di da errore

Somma=Righe+Colonne+5
redim MatriceDati(Somma)
così mi da errore e allora ho dimensionato così:

redim MatriceDati(100)
Garzie a tutti
Allegati
FORUM-Def.ods
(55.89 KiB) Scaricato 10 volte
Suite libre office Versione: 7.1.0.3 windows 10
Rispondi