PDA

View Full Version : [excel] costrutti iterativi


braian
16-04-2008, 10:20
vorrei spere se è possibile creare in excel delle formule che contengono costrutti iterativi di tipo for o while per scorree tutte le celle di una colonna fino alla invalidazione della guardia e poter effettuare controlli con funzioni tipo "SE" sui valori delle celle. Praticamente intendo dire come si fa anche per evitare di fare una sequenza annidiata enorme di SE(x;y;SE(z;g;....))
grazie

john_revelator
16-04-2008, 12:20
Magari si può risolvere con una funzione personalizzata in vba.
Puoi specificare meglio cosa vorresti fare?

braian
16-04-2008, 13:03
In pratica vorrei avere in una cella il risultato di una funzione calcolata in questo modo:
<code>
n=0;
while(An!=-1)
{
if(An=Bn)
RETURN Bn
else if (An=Cn)
RETURN Cn
else if (An=Dn)
RETURN Dn

n++;
}
</code>


Devo dire che non conosco assolutamente le macro e VBA. Vi sarei grato se poteste darmi qualche informazione a riguardo: magari un manuale online pref. in italiano di VBA e come funzionano le macro. Vanno registrate? Come si usano?
grazie

braian
17-04-2008, 08:04
up.
Credo di avere capito cosa significhi registrare le macro.
Però avrei bisogno di una mano per risolvere il problema espresso nel messaggio precedente.
grazie

john_revelator
17-04-2008, 10:20
Secondo me senza scomodare vba ti basta usare per l'appunto alcuni se annidati direttamente da excel (se si tratta solo di 4 colonne come nel tuo esempio).

braian
17-04-2008, 13:09
forse non mi hai capito:
vorrei avere in una cella il risultato di quel codice che ho scritto.
L'iterazione la vorrei fare sulle righe.
Potrei fare molti SE annidiati ma se ho un centinaio di righe ti assicuro che è un pò scomodo.
Comunque ti ringrazio davvero e se puoi ti chiedo di darmi ancora una mano.:)

zuper
17-04-2008, 13:28
In pratica vorrei avere in una cella il risultato di una funzione calcolata in questo modo:
<code>
n=0;
while(An!=-1)
{
if(An=Bn)
RETURN Bn
else if (An=Cn)
RETURN Cn
else if (An=Dn)
RETURN Dn

n++;
}
</code>


Devo dire che non conosco assolutamente le macro e VBA. Vi sarei grato se poteste darmi qualche informazione a riguardo: magari un manuale online pref. in italiano di VBA e come funzionano le macro. Vanno registrate? Come si usano?
grazie

forse non riesco a capire bene cosa cerchi...

io ho capito che hai una tabella e se un determinato valore è uguale ad AN deve restituirti quel valore?

ho capito bene?

e non ti basta fare un VLOOKUP col valore AN e restituirtelo se lo trova?

MarcoGG
17-04-2008, 14:57
In pratica vorrei avere in una cella il risultato di una funzione calcolata in questo modo:
<code>
n=0;
while(An!=-1)
{
if(An=Bn)
RETURN Bn
else if (An=Cn)
RETURN Cn
else if (An=Dn)
RETURN Dn

n++;
}
</code>

Devo dire che non conosco assolutamente le macro e VBA. Vi sarei grato se poteste darmi qualche informazione a riguardo: magari un manuale online pref. in italiano di VBA e come funzionano le macro. Vanno registrate? Come si usano?
grazie


E magari postare in "Programmazione", no ? :)

Un metodo c'è eccome in VBA, semplicemente forzando l'uscita dal ciclo quando la condizione che cerchi viene verificata.
Questo ti evita di creare una pletora di If / Else If nidificati...

Quello che hai scritto, suppongo C#, può essere tradotto in VBA così :

Public Function NOME_FUNZIONE() As String

'Dim An...
'Dim Bn...
'...
'DIm Nn...

Dim n As Integer
n = 0
Do
If An = -1 Then Exit Do
If An = Bn Then
NOME_FUNZIONE = Bn
Exit Do
End If

'If...
'...
'...

n = n + 1
Loop

End Function

Chiaro che anche così non si va molto lontano, e devi pur sempre usare un pacco di If... Ma almeno non sono nidificati !

Se invece, come penso, vuoi un codice compatto che faccia il lavoro su ogni colonna in automatico, cerca magari di essere un po' più preciso sulle specifiche e vedrò che si può fare... ;)

braian
15-05-2008, 08:27
Grazie a tutti dell' aiuto. Ho risolto praticamente con una vlookup che in italiano è la funzione cercavert( ). Non ero al corrente dell' esistenza di questa funzione. Praticamente ciclo sui valori di una colonna con la cercavert per cercare un valore specifico. Grazie davvero a tutti per l'aiuto e scusate se rispondo solo ora su richiesta. Cercheròm di fare meglio!!:D