Condividi tramite

Funzioni IIf nidificate

Anonimo
2022-05-13T18:04:31+00:00

Ciao a tutti, Ho sviluppato per diletto una piccola applicazione per calcolare il prezzo “chiavi in mano” di una casa. In sostanza vorrei che un controllo non associato nella maschera “S_Immobili” chiamato “CoeffCatCalc” assuma valori diversi a seconda del valore del campo “ID_ClasseCat”, che è invece una casella combinata (legata al rispettivo campo della tabella “Immobili”).Tutto ciò serve a calcolare la benedetta imposta di registro sugli immobili, secondo la bizantina legge italiana. A seconda della classe catastale si determina il Coefficiente catastale che moltiplicato per la Rendita dà il Valore catastale, su cui si calcola l’Imposta di registro. Per far assumere a CoeffCatCalc il valore giusto a seconda dello “ID_ClasseCat” ho pensato di costruire una funzione IIf che contempli tutte le cervellotiche casistiche, e che quindi sia nidificata.

Qui sotto le condizioni una per una:

  1. =IIf([ID_ClasseCat]<>4 or [ID_ClasseCat]<> 15 or [ID_ClasseCat] <> 17;"115,50";"da definire")1. =IIf([ID_ClasseCat]=12 or [ID_ClasseCat]=10;"63";"da definire")1. =IIf([ID_ClasseCat]=13 or [ID_ClasseCat]=18 or[ID_ClasseCat]=19 or[ID_ClasseCat]=20 or[ID_ClasseCat]=21 or[ID_ClasseCat]=22 or[ID_ClasseCat]=23 or[ID_ClasseCat]=24;"176,4";"da definire")
  2. =IIf([ID_ClasseCat]=14 or [ID_ClasseCat]=11;"42,84";"da definire")1. =IIf([ID_ClasseCat]=25 or [ID_ClasseCat]=26 or [ID_ClasseCat]=27 or [ID_ClasseCat]=28 or [ID_ClasseCat]=29 or [ID_ClasseCat]=30;"126";"da definire")

Ho provato a nidificare in diversi modi, questo è l’ultimo: =IIf([ID_ClasseCat]<>4 or [ID_ClasseCat]<>15 or [ID_ClasseCat]<>17);"115,50";IIf([ID_ClasseCat]=12 or [ID_ClasseCat]=10);"63";IIf([ID_ClasseCat]=13 or [ID_ClasseCat]=18 or[ID_ClasseCat]=19 or[ID_ClasseCat]=20 or[ID_ClasseCat]=21 or[ID_ClasseCat]=22 or[ID_ClasseCat]=23 or[ID_ClasseCat]=24);"176,40";IIf([ID_ClasseCat]=14 or [ID_ClasseCat]=11);"42,84";IIf([ID_ClasseCat]=25 or [ID_ClasseCat]=26 or [ID_ClasseCat]=27 or [ID_ClasseCat]=28 or [ID_ClasseCat]=29 or [ID_ClasseCat]=30);"126";"da definire")

Access continua a darmi errore essenzialmente di tipo “numero errato di argomenti specificati in una funzione nell’espressione immessa”. Sbaglio sicuramente qualcosa nella sintassi della nidificazione. Mi sto anche convincendo che forse la scelta di usare una IIf nidificata a questo livello non è la scelta giusta.Qui il DB: https://1drv.ms/u/s!AtZa5okJIOVOh6FedbiGQNeB0A4tzw?e=lj9LEt Cosa mi consigliate?Grazie molte per l’attenzione

Alberto

Microsoft 365 e Office | Accesso | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-05-14T11:18:15+00:00

    Forse la prima if dovrebbe essere per = e non <> .

    Mimmo

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-05-13T22:13:29+00:00

    Grazie molte ancora una volta, Mimmo.

    Hai ragione, una funzione è sicuramente molto più efficiente. Non ci avevo pensato xchè non ho gran dimestichezza col VB.

    Cosa intendi quando dici che la funzione IIf è errata?

    Alberto

    La risposta è stata utile?

    0 commenti Nessun commento
  2. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-05-13T20:25:14+00:00

    Ciao, ho creato una funzione decodificando il tuo ultimo tentativo.

    Crea un modulo e incolla il seguente codice

    Option Compare Database

    Option Explicit

    Function CoeffCatCalc(Id_ClasseCat)

    If [Id\_ClasseCat] &lt;&gt; 4 Or \_ 
    
       [Id\_ClasseCat] &lt;&gt; 15 Or \_ 
    
       [Id\_ClasseCat] &lt;&gt; 17 Then 
    
       CoeffCatCalc = "115,50" 
    
       Exit Function 
    
    End If 
    
    If [Id\_ClasseCat] = 12 Or \_ 
    
       [Id\_ClasseCat] = 10 Then 
    
       CoeffCatCalc = "63" 
    
       Exit Function 
    
    End If 
    
    If [Id\_ClasseCat] = 13 Or \_ 
    
       [Id\_ClasseCat] = 18 Or \_ 
    
       [Id\_ClasseCat] = 19 Or \_ 
    
       [Id\_ClasseCat] = 20 Or \_ 
    
       [Id\_ClasseCat] = 21 Or \_ 
    
       [Id\_ClasseCat] = 22 Or \_ 
    
       [Id\_ClasseCat] = 23 Or \_ 
    
       [Id\_ClasseCat] = 24 Then 
    
       CoeffCatCalc = "176,40" 
    
       Exit Function 
    
    End If 
    
    If [Id\_ClasseCat] = 14 Or \_ 
    
       [Id\_ClasseCat] = 11 Then 
    
       CoeffCatCalc = "42,84" 
    
       Exit Function 
    
    End If 
    
    If [Id\_ClasseCat] = 25 Or \_ 
    
       [Id\_ClasseCat] = 26 Or \_ 
    
       [Id\_ClasseCat] = 27 Or \_ 
    
       [Id\_ClasseCat] = 28 Or \_ 
    
       [Id\_ClasseCat] = 29 Or \_ 
    
       [Id\_ClasseCat] = 30 Then 
    
       CoeffCatCalc = "126" 
    
       Exit Function 
    
    End If 
    
    CoeffCatCalc = "da definire" 
    

    End Function

    Nella maschera, nell'origine del controllo con nome CoeffCatCalc imposta

    =CoeffCatCalc([Id_ClasseCat])

    Ti faccio notare che mi sembra errata la tua IIF origine infatti il primo blocco della funzione che ho ricavato non mi convince:

    If [Id\_ClasseCat] &lt;&gt; 4 Or \_ 
    
       [Id\_ClasseCat] &lt;&gt; 15 Or \_ 
    
       [Id\_ClasseCat] &lt;&gt; 17 Then 
    
       CoeffCatCalc = "115,50" 
    
       Exit Function 
    
    End If 
    

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-05-13T19:56:14+00:00

    Guardando il tuo Db noto che utilizzi solo macro, purtroppo con quelle vai poco lontano.

    Provo a buttarti giù una funzione VBA.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2022-05-13T19:37:57+00:00

    Ciao,

    ammesso che tu ci riesca, immagina di doverla modificare in futuro!!!

    Io penso che ti convenga creare una funzione.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento