Newsgroup: it.comp.lang.visual-basic
Titolo: [OT...] Formula in Excel

Scusate se la domanda è OT, ma non so a chi rivolgermi.
In Excel ho la necessità di nidificare in una funzione SE più di 7
argomenti, ma excel mi fa arrivare fino al 7°, poi mi dà errore. Allora ho
provato a creare una funzione personalizzata nell'editor di VB, con una
serie di IIF nidificati. La funzione personalizzata viene salvata, ma quando
inserisco in una cella un valore che interessa un argomento della fun.
successivo al 7°, mi dà un msg. di errore.
Avete qualche suggerimento da darmi?
Grazie a tutti per la disponibilità.
Giancarlo

 Avete qualche suggerimento da darmi?
Sicuro che il problema sia il numero di paramentri?
Ho creato una semplice funzione
Public Function SommaNum(a, b, c, d, e, f, g, h) As Integer
    SommaNum = a + b + c + d + e + f + g + h
End Function
e scrivendo =SommaNum(A1;B2;C3;D4;E5;F6;G7;H8) funziona.
Anche l'annidamento degli if non credo sia un problema:
Public Function SommaNum(a, b, c, d, e, f, g, h) As Integer
 If a Then
  If b Then
   If c Then
    If d Then
     If e Then
      If f Then
       If g Then
        If h Then
         SommaNum = a + b + c + d + e + f + g + h
        End If
       End If
      End If
     End If
    End If
   End If
  End If
 End If
End Function
Per scrupolo ho provato anche l'illegibile
Public Function SommaNum(a, b, c, d, e, f, g, h) As Integer
SommaNum=IIf(a,IIf(b,IIf(c,IIf(d,IIf(e,IIf(f,IIf(g,a+b+c+d+e+f+g+h,0),0),0),
0),0),0),0)
End Function
e funziona pure lei.
--
Ciao, Silv:o)


Ciao. Giancarlo

 Avete qualche suggerimento da darmi?
    Si'. Parlaci del tuo problema, non della tua soluzione. ;-)
--
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------

 --------
Ciao. Giancarlo.

 iif(VALORE<=15494 , 154.94 , iif......))))))
Quindi c'č UN SOLO argomento.
Continua a non tornarmi quel limite sui sette IIF annidati, comunque:
Se il tuo problema č quello di selezionare un valore per ogni range del
paramtro, si risolve facilmente in molti modi. Ecco i primi due che mi
vengono in mente:
1) con una funzione VB
Function pippo(a as Long) as Double  'I tipi giusti mettili tu!
  Select Case a
    Case 0 to 5165
      pippo = 80.57
    Case 5166 To 10329
      pippo = 92.69
    'ecc.
  End Select
End Function
2) Con la funzione di Excel CERCA.VERTICALE (devi abilitare l'aggiunta
"strumenti di analisi" o qualcosa del genere, di default non č installata,
mi pare)
Questa funzione prende in input:
- Il valore da testare
- la tabella ordinata delle classi (prima colonna) con i valori associati
(dalla seconda colonna in poi)
- la colonna sulla quale pescare i valori che interessano (la seconda in
questo caso)
- VERO se si vuole una ricerca del primo valore maggiore del valore da
testare
  FALSO se si cerca un valore esatto
Supponiamo ad esempio che in D1 ci sia il valore da testare (7500),
in A1:B20 ci sia la tabella
|___A____|___B____|
|     0  |   0    |
|  5165  |  80,57 |
| 10329  |  92,96 |
| 15494  | 154,94 |
....
Se scrivi in E1 la formula =CERCA.VERTICALE(D1;A1:B20;2;VERO) ottieni
proprio 80,57 ovvero il valore corispondente alla classe che va da 5165 a
10329.
--
Ciao, Silv:o)

 5165 a 10329.
    Volendo fare tutto in una formula ci sono varie soluzioni, per
esempio:
=INDICE({0\80,57\92,96\154,94};CONFRONTA(D1;{0\5165\10329\15494};1))
    Dato pero' che non e' bene avere costanti in una formula, specie se
tale formula deve essere ripetuta in piu' celle, e' opportuno assegnare
ad un Nome della cartella di lavoro le matrici e riscrivere:
        =INDICE(OttieniDa;CONFRONTA(D1;CercaIn;1))



Ciao. Giancarlo.