VBA indice non incluso nellintervallo
Hai un problema con Excel? 
restituzione di un valore sulla base di 3 variabil
di Redek data: 23/09/2015 14:42:14
Buongiorno a tutti. ringrazio anticipatamente chiunque riesca a darmi consigli su come risolvere questo problema.
vorrei che mi venisse restituito in automatico un valore date 3 variabili.
mi spiego meglio:
ho creato 6 tabelle, ciascuna con una griglia di valori x y. ogni tabella corrisponde ad un nome.
nella cella a1 inserisco il nome, nella cella b1 un valore numerico (presente nella tabella riferita a quel nome sull'asse y), nella cella c1 un valore numerico (presente nella tabella riferita a quel nome sull'asse delle x).
a questo punto vorrei che la cella d1 mi restituisca in automatico il valore corrispondente (nell'esempio allegato sarebbe 1420).
qualcuno riesce a darmi una mano?
errore
di Redek data: 23/09/2015 14:52:44
scusa ste. ho erroneamente postato sulla tua discussione.
di Cucù data: 23/09/2015 14:55:21
Per entrambe le discussioni posta un file di esempio (sovrapponibile al reale), così aiuti chi ti vuole aiutare.
Cucù
allegato
di ste (utente non iscritto) data: 23/09/2015 15:08:37
allegato inserito
di Marius44 data: 23/09/2015 15:45:40
Ciao ste
Nel primo ciclo la variabile F_Tut(E) è "fissa" poiché per tutti i 50 giri tu poni la seguente assegnazione F_Tut(E) = Cells(4 + E, 11) dove la E è uguale a 0; pertanto rimane bloccata sulla riga 4+0 e colonna 11, cioè Aberdeen
Si blocca su questa riga If F_Tut(E) = F_Esp(F) Then perché la F è uguale a 51 mentre la matrice si ferma a 50 (si, è vero, i dati sono 51 ma vanno da 0 a 50).
Se poi vuoi fare un ciclo che "passi" tutti i nomi nella tua Sub questo non c'è. Forse, se ho interpretato bene quello che dici, il Next del primo ciclo (adattando opportunamente tutti i ReDim) dovrebbe essere spostato alla fine e, all'interno del ciclo, incrementare pure la E.
Probabilmente sono stato un po' confusionario ma credo che tu vorresti riportare le date del riquadro di sinistra a fianco del nome corrispondente nel riquadro di destra. E' così o ho capito male?
Ciao,
Mario
di Albatros54 data: 23/09/2015 15:53:53
Il ciclo ora gira, pero vorrei capire cosa fa
Private Sub CMD10_Click()
Dim F_Tut() As String
Dim F_Esp() As String
Dim D_Tut() As Date
Dim D_Esp() As Date
Dim X As Variant
Dim K As Variant
Dim NAV_Tut() As Single
Dim NAV_Esp() As Single
Dim E As Variant
Dim F As Variant
Dim G As Variant
Dim P As Variant
E = 0
F = 0
For F = 0 To 50
For E = 0 To 50
ReDim Preserve F_Esp(F)
ReDim Preserve F_Tut(E)
F_Esp(F) = Cells(3 + F, 2)
If F_Tut(E) = F_Esp(F) Then
ReDim Preserve D_Tut(G)
ReDim Preserve D_Esp(F)
ReDim Preserve NAV_Esp(F)
D_Tut(G) = Cells(3, 13 + P)
D_Esp(F) = Cells(3 + F, 5)
NAV_Esp(F) = Cells(3 + F, 4)
P = 0
For P = 0 To 3
If D_Tut(G) = D_Esp(F) Then
Cells(4 + E, 13 + F) = NAV_Esp(F)
End If
Next
End If
Next
Next
P = P + 1
E = E + 1
F = F + 1
End Sub
|
di ste (utente non iscritto) data: 23/09/2015 16:27:21
Ciao Mario,
ti ringrazio molto per la risposta. No, io non intendo copiare la data dal riquadro di sinistra (ESPORTAZIONI) in quello di destra (TUTTI).
Mantenendo perennemente fissi i Nomi (fondi) (Aberdeen, Oyster,...) e cambiando giornalmente e i dati(NAV) e le date per ognuno di essi, vorrei che allorchè cambi la data in ESPORTAZIONI (sx), automaticamente -per ogni nome/fondo- il dato(nav) corrispondente [cioè sulla stessa riga] venga inserito nella cella di DX (tutti) ove risulti la corrispondenza delle date. Non so se mi spiego.
Se Aberdeen è 15.806 - 18/09/2015 in ESPORTAZIONI (sx), in TUTTI (dx) nella cella N4 dovrebbe -dopo il click- essere riportato(copiato) 15.806.
Questo per ogni nome (Aberdeen, Oyster, Franklin,...).
Provo comunque ad aggiustare il codice secondo ciò che dici nella tua risposta
di Marius44 data: 23/09/2015 19:24:52
@albatros
A cosa servono le tre righe prima di End Sub?
@ste
Credo (ma non ho potuto verificarlo) che la sub di Albatros vada bene; bisogna adattare il ciclo di scrittura e cioè
For P = 0 To 3
If D_Tut(G) = D_Esp(F) Then
Cells(4 + E, 13 + F) = NAV_Esp(F) '<=== adattare
End If
Next
di Albatros54 data: 23/09/2015 21:55:36
di Albatros54 data: 24/09/2015 06:35:15
Prova cosi , che ora funziona.Naturalmente io ho messo delle matrici che vanno da 0 a 4 , per limitare i loop, tu adattalo alle tue esigenze.
Ciao
Albatros54
Private Sub CMD10_Click()
Dim F_Tut() As String
Dim F_Esp() As String
Dim D_Tut() As Date
Dim D_Esp() As Date
Dim X As Variant
Dim K As Variant
Dim NAV_Tut() As Single
Dim NAV_Esp() As Single
Dim E As Variant
Dim F As Variant
Dim G As Variant
Dim P As Variant
For E = 0 To 4
ReDim Preserve F_Tut(E)
F_Tut(E) = Cells(4 + E, 11)
For F = 0 To 4
ReDim Preserve F_Esp(F)
F_Esp(F) = Cells(3 + F, 2)
If F_Esp(F) = F_Tut(E) Then
For P = 0 To 3
ReDim Preserve D_Tut(G)
D_Tut(G) = Cells(3, 13 + P)
ReDim Preserve D_Esp(F)
ReDim Preserve NAV_Esp(F)
D_Esp(F) = Cells(3 + F, 5)
NAV_Esp(F) = Cells(3 + F, 4)
If D_Tut(G) = D_Esp(F) Then
Cells(4 + E, 13 + P) = NAV_Esp(F)
End If
Next
End If
Next
Next
End Sub
|
di ste (utente non iscritto) data: 24/09/2015 13:30:50
Grazie infinite! Mi hai fatto risparmiare un sacco di tempo.
Vuoi Approfondire?