Come definire una funzione

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
sandro merlino
Messaggi: 595
Iscritto il: giovedì 12 gennaio 2012, 20:33

Come definire una funzione

Messaggio da sandro merlino »

Ciao a tutti
Vi chiedo un aiuto per questo semplice problema. Lavoro con Openoffice 4.1.1
Ho provato a definire una funzione (es:Mese) e vi elenco i passaggi che ho fatto
Inserisci -> Nomi -> Definisci -> Nel campo Nome ho inserito il nome Mese -> nel campo Riferito a ho messo la formula con o senza = -> poi ho pigiato sia ok che aggiungi ma appare ESPRESSIONE NON VALIDA
Scusatemi ma non riesco e non capisco dove sbaglio

Grazie 1000
Sandro
openoffice 4.1.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Come definire una funzione

Messaggio da patel »

Nomi, definisci serve per assegnare un nome ad un range di celle e non a creare una funzione, questa si crea tramite macro
https://wiki.openoffice.org/wiki/IT/Doc ... _Functions
-------------------
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
sandro merlino
Messaggi: 595
Iscritto il: giovedì 12 gennaio 2012, 20:33

Re: Come definire una funzione

Messaggio da sandro merlino »

Ciao patel,
Il link è molto chiaro.
Scusa però se provo ancora la mia domanda da un'altro punto di vista per capire meglio. Ambasciatore non porta pena.
Un collega che lavora con excel mi ha detto di provare a fare questa cosa e io non riesco.
Definisci "Mese":
=INDICE(INDIRETTO("'c'!H"&INDICE(121+(RIF.RIGA('c'!$A$1:$A$12)-1)*200;CONFRONTA(MAX(SE((('c'!$H$1:$H$2512<>"")*(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(MAIUSC('c'!$H$1:$H$2512);"GENNAIO";"");"FEBBRAIO";"");"MARZO";"");"APRILE";"");"MAGGIO";"");"GIUGNO";"");"AGOSTO";"");"SETTEMBRE";"");"OTTOBRE";"");"NOVEMBRE";"");"DICEMBRE";"")<>"")>0);RIF.RIGA('c'!$H$1:$H$2512)));121+(RIF.RIGA('c'!$A$1:$A$12)-1)*200;1)));)
Secondo lui si fanno questi passaggi:

Codice: Seleziona tutto

Calc: 
Inserisci - Nomi - Definisci...
che sarebbero gli equivalenti di:

Codice: Seleziona tutto

Excel:
Scheda Formule>Gestione Nomi>Nuovo>Campo nome e Campo riferito a:
Nel Campo nome: nome formula
Nel Campo riferito a: Incolli la formula
Ps: forse devo sostituire il
!
con
.
trattandosi di excel

Posso dirgli che con calc non è possibile definire una funzione in questo modo ma devo usare solo macro oppure esiste un modo che tu utilizzeresti per raggiungere il risultato?
Da incompetente ti chiedo se è possibile fare:
Inserisci -> Nomi -> Definisci -> Nel campo Nome (inserisco: Mese) -> Nel campo Riferito a: (metto la cella di riferimento) -> Aggiungo la formula .......

Grazie 1000

Sandro
openoffice 4.1.1
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1748
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Come definire una funzione

Messaggio da gioh66 »

Ciao secondo me il problema sta nella formula, perchè probabilmente la definizione dei nomi (di calc) non accetta formule matriciali. Quel
MAX(SE((('c'!$H$1:$H$2512<>"")
e
MAIUSC('c'!$H$1:$H$2512)
rendono la formula matriciale.
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
sandro merlino
Messaggi: 595
Iscritto il: giovedì 12 gennaio 2012, 20:33

Re: Come definire una funzione

Messaggio da sandro merlino »

Ciao gioh66
Ti volevo chiedere 2 cose:
- Se essendo stata fatta da un collega che lavora solo con Excel questa funzione ha dei caratteri che vanno cambiati. Io ho la senzazione che il "!" va cambiato con il "." Mi sbaglio?
- Questa formula si può usare nascondendola in una celle che vogliamo e poi invece di usare la formula definita uso il riferimento della cella?
Grazie 1000

sandro
openoffice 4.1.1
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Come definire una funzione

Messaggio da unlucky83 »

patel ha scritto:Nomi, definisci serve per assegnare un nome ad un range di celle e non a creare una funzione, questa si crea tramite macro
https://wiki.openoffice.org/wiki/IT/Doc ... _Functions
Ciao @patel
E' possibile definire dei nomi di formula vedi l'esempio in fondo a questa pagina https://wiki.openoffice.org/wiki/Docume ... med_Ranges
Ho provato e funziona , vedi qui viewtopic.php?f=9&t=9369#p51609
Per giunta questa possibilità di procedere l'avevo proposta proprio a sandro, ma a quanto pare l'ha dimenticata.
gioh66 ha scritto:Ciao secondo me il problema sta nella formula, perchè probabilmente la definizione dei nomi (di calc) non accetta formule matriciali. Quel
MAX(SE((('c'!$H$1:$H$2512<>"")
e
MAIUSC('c'!$H$1:$H$2512)
rendono la formula matriciale.
Nell'altra discussione ho definito un nome per una formula "potenzialmente matriciale" ma scritta senza specificarla come tale. Quando in una cella ho richiamato il nome della formula, ho impostato la formula della cella come formula matriciale.

Quindi per me l'errore sta nella formula che non è per calc, ma per excel, oppure ti sei scordato di impostare come formula matriciale la formula che hai inserito nella cella che richiama il nomeformula.
sandro merlino ha scritto: - Se essendo stata fatta da un collega che lavora solo con Excel questa funzione ha dei caratteri che vanno cambiati. Io ho la senzazione che il "!" va cambiato con il "." Mi sbaglio?
Chiaramente hai ragione, in calc per richiamare delle celle che si trovano in altri fogli non devi usare il punto esclamativo e nemmeno inserire il nome tra ', ma una cosa tipo questa

Codice: Seleziona tutto

=Foglio2.C4:C13
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1748
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Come definire una funzione

Messaggio da gioh66 »

@unluky83
Perfetto tanto meglio se il problema non è nella forma matriciale (buono a sapersi), allora come dici il problema potrebbe stare nella formula che non viene "digerita" da calc.
@Sandro
se provi a sostituire il ! con il punto di sicuro male non fa, visto che l'uso del punto è nella sintassi nativa delle formule di calc.
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
sandro merlino
Messaggi: 595
Iscritto il: giovedì 12 gennaio 2012, 20:33

Re: Come definire una funzione

Messaggio da sandro merlino »

Ciao e grazie ancora una volta a tutti e due per l'aiuto che provate a darmi

@unlucky83
E' possibile definire dei nomi di formula vedi l'esempio in fondo a questa pagina https://wiki.openoffice.org/wiki/Docume ... med_Ranges
Scusami ma ci tengo a dirti che per me è incomprensibile. Non sono all'altezza di leggere una cosa del genere
Ho provato e funziona , vedi qui viewtopic.php?f=9&t=9369#p51609
Per giunta questa possibilità di procedere l'avevo proposta proprio a sandro, ma a quanto pare l'ha dimenticata.
Confermo e l'ho anche usata in alcuni format che mi hanno risolto quel problema.
Non mi sono dimenticato ma non mi vergogno però a dirti che questo messaggio è stato aperto perchè non sono riuscito a farlo di nuovo per risolvere il messaggio ancora aperto con nome:
Funzione ordina decrescentemente prestazione di dipendenti per il quale siamo sempre in attesa dai capi che si decidano per di colonne di appoggio.
Mi arrabatto dove posso per trovare una soluzione alternativa e mi avevano suggerito di definire funzioni e di fare un tentativo con delle formule suggerite per excel ma mi sono fermato subito. Le funzioni te le allego sull'altro argomento appena sostituisco il"!" con il "." .

@gioh66
Provo a sostituire il"!" con il "."

Grazie

sandro
openoffice 4.1.1
sandro merlino
Messaggi: 595
Iscritto il: giovedì 12 gennaio 2012, 20:33

Re: Come definire una funzione

Messaggio da sandro merlino »

Ciao
Scusate se insisto ma ho trovato questo link

Codice: Seleziona tutto

https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=2054
dove si fa vedere che nel campo Riferito a devo mettere la cella.
La mia domanda è: La formula dove la metto e come?

Grazie

sandro
openoffice 4.1.1
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1748
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Come definire una funzione

Messaggio da gioh66 »

Buondì, la formula devi inserirla nel campo"Riferito a". In quello spazio inserisci o un intervallo di celle o una formula a cui dare un nome.
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
sandro merlino
Messaggi: 595
Iscritto il: giovedì 12 gennaio 2012, 20:33

Re: Come definire una funzione

Messaggio da sandro merlino »

Ciao gioh66
Grazie per la risposta che mi hai dato. Ho fatto un'altro tentativo e sono arrivato alla conclusione che su 3 funzioni da definire 2 sono entrate ma una non ancora. A questo punto penso che ci siano problemi di sintassi. Te le mostro
Definisci "Unici":

Codice: Seleziona tutto

=T(INDIRETTO("'c'.H"&PICCOLO(SE(FREQUENZA(SE(VAL.ERRORE(CONFRONTA(SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);0));FALSO;CONFRONTA(SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);0));RIF.RIGA('c'.$A$1:$A$188))>0;RIF.RIGA('c'.$A$1:$A$188));RIF.RIGA(INDIRETTO("A1:A"&MATR.SOMMA.PRODOTTO((SE(FREQUENZA(SE(VAL.ERRORE(CONFRONTA(SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);0));FALSO;CONFRONTA(SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);0));RIF.RIGA('c'.$A$1:$A$188))>0;RIF.RIGA('c'.$A$1:$A$188))<>FALSO)*1))))+CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+3))
Definisci "Conta_Unici":

Codice: Seleziona tutto

=MATR.SOMMA.PRODOTTO((SE(FREQUENZA(SE(VAL.ERRORE(CONFRONTA(SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);0));FALSO;CONFRONTA(SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);SCARTO(INDIRETTO("'c'.H"&CONFRONTA(Mese;'c'.$H$1:$H$2512;0)+4);;;188);0));RIF.RIGA('c'.$A$1:$A$188))>0;RIF.RIGA('c'.$A$1:$A$188))<>FALSO)*1)
Definisci "Mese":(non si inserisce)

Codice: Seleziona tutto

=INDICE(INDIRETTO("'c'.H"&INDICE(121+(RIF.RIGA('c'.$A$1:$A$12)-1)*200;CONFRONTA(MAX(SE((('c'.$H$1:$H$2512<>"")*(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(MAIUSC('c'.$H$1:$H$2512);"GENNAIO";"");"FEBBRAIO";"");"MARZO";"");"APRILE";"");"MAGGIO";"");"GIUGNO";"");"AGOSTO";"");"SETTEMBRE";"");"OTTOBRE";"");"NOVEMBRE";"");"DICEMBRE";"")<>"")>0);RIF.RIGA('c'.$H$1:$H$2512)));121+(RIF.RIGA('c'.$A$1:$A$12)-1)*200;1)));)
Ti allego il file
Se hai qualche altro suggerimento è ben accetto

Grazie

sandro
Allegati
ordina decrescentemente prestazione di dipendenti - n1 - Copia.ods
(132.16 KiB) Scaricato 107 volte
openoffice 4.1.1
Rispondi