VBA indice non incluso nellintervallo



  • 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.