matrice senza celle vuote



  • matrice senza celle vuote
    di ornello (utente non iscritto) data: 13/01/2016 13:24:46

    Ciao a tutti ,
    prendo spunto ancora dalla discussione emersa la scorsa settimana. chiedo un vs parere riguardo il seguente problema:
    vorrei caricare in una matrice( enon + in un vettore) dei valori numerici provenienti da una tabella in un foglio xls. Vorrei evitare che nella matrice finiscano celle vuote ...( come nel caso precedente del vettore v(a)= cells(i,C) : a=a+1 )

    come posso modificare il codice sottostante al fine di evitare di riempire la matrice con valori vuoti.

     
    Sub Matrice()
    Dim Matrice(1 To 10, 1 To 10)
    Dim R, C, Riga, Colonna
    Dim Intervallo As Range
    
    sheets("foglio1").select
    
    For R = 1 To 10
    For C = 1 To 10
    Matrice(R, C) = cells(R,C)
    Next
    Next
    Riga = UBound(Matrice, 1)
    Colonna = UBound(Matrice, 2)
    
    Sheets("Foglio1").Select
    For R = 1 To Riga
    For C = 1 To Colonna
    Intervallo(R, C+6) = Matrice(R, C)
    Next
    Next
    End Sub



  • di Cucù data: 13/01/2016 14:59:34

    Per esempio così...

     
    Sub provola()
    Dim arr(1 To 5)
    arr(1) = "R"
    arr(2) = ""
    arr(3) = "A"
    arr(4) = ""
    arr(5) = "F"
    
    ReDim NArr(LBound(arr) To UBound(arr))
    For i = LBound(arr) To UBound(arr)
        If arr(i) <> "" Then
            j = j + 1
            NArr(j) = arr(i)
        End If
    Next i
    ReDim Preserve NArr(LBound(arr) To j)
    Range("A1").Resize(j - LBound(NArr) + 1) = Application.Transpose(NArr)
    End Sub



  • di ornello (utente non iscritto) data: 13/01/2016 18:25:15

    ciao penso di non aver spiegato bene il mio problema ..... o di non aver capito la macro che è stata postata in precedenza.
    Il problema è che io ho una tabella contenente valori numerici e celle vuote . Vorrei caricarla la tabella in memoria in una matrice escludendo però le vuote.
    per poi scaricarla nel foglio di lavoro depurata dalle celle vuote.



  • di Cucù data: 13/01/2016 21:04:19

    Infatti l'esempio che ti ho postato fa proprio quello....
    L'esempio riguarda una array monodimensionale (1 to 5) ma il concetto è quello....Il mio vuole essere uno spunto per risolvere in autonomia il tuo problema...
    Cucù



  • di ornello (utente non iscritto) data: 14/01/2016 09:02:23

    Ciao ho provato la macro funziona , ho fatto diversi tentativi ma il problema è che non riesco a capire come inserire il secondo ciclo for ed i relativi contatori per ripetere la stesse operazioni sulle altre colonne che mi interessano.
    Potreste aiutarmi ad impostare il ciclo o darmi altri spunti mi sono bloccato

    grazie



  • di ornello (utente non iscritto) data: 14/01/2016 22:03:18

    Ciao,
    sto cercando di adattare la macro postata nella discussione precedente al mio problema. Sulla singola colonna non ho problemi ma volendo ripetere la macro per le altre colonne non riesco a farla funzionare a dovere.
    Ho impostato con dei cicli for next lo scorrimento delle colonne ma non riesco a separare correttamente i dati durante la fase di scarico dei valori sul foglio di lavoro. Posto il codice che ho adattato ma che non funziona coe dovrebbe
    Qualcuno ha qualche suggerimento .......
    Grazie
     
    Sub tutto_in_colonna()
    Dim v() As Variant, p As Long, a As Long, i As Long, j As Long, c As Long
    ur = 100
    a = 1
    ReDim v(1 To ur)
    For c = 1 To 3
    For i = 1 To ur
    If Cells(i, c) <> " " Then v(a) = Cells(i, c): a = a + 1
    Next i
    Next c
    For p = 1 To 3
    For j = 1 To ur
    Cells(j, 6 + p) = v(j)
    Next j
    Next p
    Erase v
    End Sub
    
    



  • di ornello (utente non iscritto) data: 14/01/2016 22:42:23

    Ciao penso di avere risolto posto il codice finale di esempio , chiedo un vs parere riguardo il codice elaborato.
     
    Sub tutto_in_colonna()
    Dim v() As Variant, q As Long, a As Long, i As Long, j As Long, c As Long
    ur = 100
    a = 1
    ReDim v(1 To ur)
    For c = 1 To 3
    For i = 1 To ur
    If Cells(i, c) <> "" Then v(a) = Cells(i, c): a = a + 1
    Next i
    
    For j = 1 To ur
    Cells(j, 6 + c) = v(j)
    Next j
    
    For q = 1 To ur
    v(q) = ""
    Next q
    a = 1
    Next c
    
    End Sub