[Risolto] Creare Funzione "Case"

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Attilafdd
Volontario
Volontario
Messaggi: 598
Iscritto il: giovedì 5 aprile 2012, 8:25

[Risolto] Creare Funzione "Case"

Messaggio da Attilafdd »

Capita spesso di dover elaborare delle formule il cui risultato dipende da n alternative possibili.
Normalmente riesco a risolverle con una serie infinita di "SE(..;..;..)" nidificati. Ma recentemente, mio malgrado ho scoperto che la possibilità di nidificare i SE è limitata!! :?

Vorrei pertanto poter definire una mia funzione (che chiamerò CASO) che sostanzialmente ricalca la funzione "Case" del basic, più o meno con la sintassi

CASO (n;Test 1;Se Vero 1;Test 2;Se Vero 2;...;Test n;Se vero n;Altrimenti)

dove n indica il numero di test che di volta in volta la funzione deve contemplare
i vari "Test 1..n" sono le condizioni da soddisfare
i vari "Se Vero 1 .. n" sono i risultati da produrre in caso di veridicità del rispettivo test
"altrimenti" è il risultato alternativo se tutti i test contemplati falliscono

Qualcuno saprebbe aiutarmi?
Ultima modifica di Attilafdd il domenica 9 novembre 2025, 18:07, modificato 1 volta in totale.
LibreOffice 25.8.2 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Creare Funzione "Case"

Messaggio da patel »

mi sembra un po' eccessivo pretendere di avere variabile anche il numero di casi, ma ben vengano soluzioni
-------------------
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
Attilafdd
Volontario
Volontario
Messaggi: 598
Iscritto il: giovedì 5 aprile 2012, 8:25

Re: Creare Funzione "Case"

Messaggio da Attilafdd »

Provo ad abbozzare qualcosa... (così almeno mi sforzo a pensare :D ) però non so nulla di basic e simili se non dei rudimenti scolastici che risalgono agli anni '90 in altro linguaggio.

Per cui mi serve un grosso aiuto da chiunque se ne intenda almeno un po'.

Proverei così:

Codice: Seleziona tutto

n = integer                                    'dichiaro numero dei test
m = integer                                    'dichiaro numero dei complessivo dei test e delle soluzioni
array_input[m] = array[stringa]                'dichiaro array dati input di dimensione m = n*2 perchè contempla sia test che soluzioni
array_se_vero[n] = array[stringa]              'io dichiarerei stringa visto che potrebbe contenere anche formule
array_se_falso[1] = array[stringa]             'idem come sopra
a, i = integer                                 'contatori
ris_test = boleano                             
ris_finale = ?                                 'il risultato finale potrebbe essere stringa o numero o boleano



m=n*2

Funzione CASO(n;array_input[m];array_se_falso)

i=1                                             'inizializzo i contatori
a=1

for i = 1 to m do                              'scompongo l'array di imput in 2 array: quello dei test e quello delle soluzioni vere
    if i div 2 <>0 then                        'se il contatore i è dispari
        array_test[a] = array_input[i]
        array_se_vero[a] = array_input[i+1]
        a=a+1
   end if
end for


ris_test = Falso                          'imposto test su risultato falso per ciclo while seguente
ris_finale = arrray_se_falso              'imposto il risultato finale qualora nessuno dei test fosse risultato vero
i=1
while (ris_test = Falso and i<=n) do
       ris_test = xxxxx (array_test[i])             'xxxxx sta al posto di una funzione che verifica l'espressione contenuta nel test numero i e restituisce il valore vero o falso a ris_test
       if ris_test = vero then
           ris_finale= yyyyyyy(array_se_vero[i])    'yyyyyyy è una funzione che esegue l'eventuale espressione Calc contenuta nel array_se_vero[i]
   end if
   i = i+1
end while

scrivi ris_finale                               'non so il comando


Chiaramente sarà zeppo di errori o incongruenze, però oltre non riesco ad andare.

Se qualcuno ha qualche dritta attendo ansioso di imparare.
LibreOffice 25.8.2 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Creare Funzione "Case"

Messaggio da patel »

secondo me si potrebbe creare un case col numero massimo dei casi possibili e utilizzare quelli definiti da n
-------------------
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
Attilafdd
Volontario
Volontario
Messaggi: 598
Iscritto il: giovedì 5 aprile 2012, 8:25

Re: Creare Funzione "Case"

Messaggio da Attilafdd »

Direi che prevedendo un n sufficientemente alto (es. 1000) già potrebbe andare.

Qualche idea in proposito?
LibreOffice 25.8.2 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Creare Funzione "Case"

Messaggio da patel »

mi aspettavo una ventina... la mia idea sarebbe quella di scrivere tutti e 20 i casi e vedere se funziona anche se i valori passati alla funzione sono di meno, ma scriverne 1000 è impensabile, ora capisco perché hai pensato agli array, ma non saprei come utilizzarli
-------------------
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
Attilafdd
Volontario
Volontario
Messaggi: 598
Iscritto il: giovedì 5 aprile 2012, 8:25

Re: Creare Funzione "Case"

Messaggio da Attilafdd »

Con una ventina regge anche il SE nidificato.

Occorre qualcosa di più strutturato.
LibreOffice 25.8.2 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Creare Funzione "Case"

Messaggio da patel »

magari spiega meglio come intendi utilizzare gli array, io non l'ho capito, una volta appurato che l'idea funziona qualcuno che la trasforma in codice si trova sempre.
-------------------
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
Avatar utente
Gumo
Messaggi: 1227
Iscritto il: lunedì 15 marzo 2010, 13:43
Località: IT

Re: Creare Funzione "Case"

Messaggio da Gumo »

La strada è coraggiosa.

Mi permetto un sugerimento perchè spesso vedo usare la funzione SE in modo inproprio,
Quando sarebbe invece corretto usare il "cerca.vert".
hai già valutato questo tipo di soluzione?

g
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
Win 7 AOO4.1 + Ubuntu 14.04 AOO4.1 - Esci dall'illegalità: utilizza OpenOffice !
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Creare Funzione "Case"

Messaggio da patel »

effettivamente io non ci avrei mai pensato, ma mi sembra la strada più semplice
-------------------
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
Attilafdd
Volontario
Volontario
Messaggi: 598
Iscritto il: giovedì 5 aprile 2012, 8:25

Re: Creare Funzione "Case"

Messaggio da Attilafdd »

Attilafdd ha scritto:
Vorrei pertanto poter definire una mia funzione (che chiamerò CASO) che sostanzialmente ricalca la funzione "Case" del basic, più o meno con la sintassi

CASO (n;Test 1;Se Vero 1;Test 2;Se Vero 2;...;Test n;Se vero n;Altrimenti)

dove n indica il numero di test che di volta in volta la funzione deve contemplare
i vari "Test 1..n" sono le condizioni da soddisfare
i vari "Se Vero 1 .. n" sono i risultati da produrre in caso di veridicità del rispettivo test
"altrimenti" è il risultato alternativo se tutti i test contemplati falliscono
Vecchio post del 2012... e finalmente trova una sua soluzione nella funzione PIÙ.SE introdotta anche in Libreoffice, dopo la prima comparsa in Excel 2016.

Per coloro a cui può essere utile:

La funzione "Più.se" (corrispondente alla funzione inglese IFS) è stata introdotta dalla versione 5.2 di Libreoffice (https://wiki.documentfoundation.org/Rel ... _functions)
IFS a cascaded IF-function
IFS works like if A then B else if C then D else if (etc.).
The function is compatible with MS Excel 2016 function IFS (https://support.office.com/en-us/articl ... n-US&ad=US). https://support.office.com/it-it/articl ... 39bd951d45
Al momento pare che in OpenOffice non sia però ancora disponibile.
Ultima modifica di Attilafdd il lunedì 8 maggio 2017, 23:11, modificato 1 volta in totale.
LibreOffice 25.8.2 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Creare Funzione "Case"

Messaggio da Gaetanopr »

Attilafdd ha scritto:Direi che prevedendo un n sufficientemente alto (es. 1000) già potrebbe andare.

Qualche idea in proposito?
Anche la funzione PIU.SE non può gestire tutte queste condizioni.
Pure io penso che la soluzione migliore sia l'uso del Cerca Verticale.
Le varie condizioni con i risultati da produrre dove vorresti indicarle? sul foglio o nel codice?
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Attilafdd
Volontario
Volontario
Messaggi: 598
Iscritto il: giovedì 5 aprile 2012, 8:25

Re: Creare Funzione "Case"

Messaggio da Attilafdd »

Gaetanopr ha scritto: Anche la funzione PIU.SE non può gestire tutte queste condizioni.
No certo, mi sembra arrivi fino a 127 condizioni.
Nulla se paragonata al Cerca.vert, ma decisamente meglio che nidificare 127 SE.
Gaetanopr ha scritto: Le varie condizioni con i risultati da produrre dove vorresti indicarle? sul foglio o nel codice?
Beh, offre la possibilità sia di indicarle nel codice che nel foglio,... con l'aggiunta che non necessariamente debbano essere in un'Area di celle contigue come richiesta dal Cerca.vert (ad es. condizioni e risultati riferiti a celle "sparpagliate" su più fogli... o direttamente dall'impostazione "visiva/grafica" della pagina senza dover creare tabelle d'appoggio)


Un'altra comodità è che gestisce risultati matriciali (difficili da inserire in una tabella dove far girare il cerca.vert che abbia in prima colonna le verifiche dei test e nella seconda i risultati attesi... matriciali)

Diciamo che ha i suoi pro e contro... una discreta via di mezzo. :D
LibreOffice 25.8.2 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Creare Funzione "Case"

Messaggio da Gaetanopr »

Attilafdd ha scritto:....difficili da inserire in una tabella dove far girare il cerca.vert che abbia in prima colonna le verifiche dei test e nella seconda i risultati attesi... matriciali)
Puoi usare le funzioni INDICE e CONFRONTA che rispetto al cerca verticale è meno rigido nelle impostazioni.
Comunque bisognerebbe avere un file di esempio per capire cosa vuoi ottenere
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Attilafdd
Volontario
Volontario
Messaggi: 598
Iscritto il: giovedì 5 aprile 2012, 8:25

Re: Creare Funzione "Case"

Messaggio da Attilafdd »

Attilafdd ha scritto: venerdì 6 aprile 2012, 16:09 Vorrei pertanto poter definire una mia funzione (che chiamerò CASO) che sostanzialmente ricalca la funzione "Case" del basic, più o meno con la sintassi

CASO (n;Test 1;Se Vero 1;Test 2;Se Vero 2;...;Test n;Se vero n;Altrimenti)
C'è voluta una decina di anni o forse più ( :D ), ma ora è disponibile la funzione SWITCH che ricalca esattamente la necessità arrivando a gestire fino a 127 casi.
https://help.libreoffice.org/latest/it/ ... 6244875552
LibreOffice 25.8.2 (Win 11)
-----------------------------------------
Se risolto inserisci [Risolto] e la spunta verde Immagine: viewtopic.php?f=9&t=5661
Rispondi