somma Matrice



  • somma Matrice
    di Textomb data: 05/06/2013 14:01:24

    Salve ragazzi,
    come faccio a sommare i valori di una determinata colonna di una matrice?
    faccio un esempio
    ho una matrice dichiarata di questo tipo
    Matrix(1 to 12, 1 to 3)
    Devo conoscere ed archiviare in una variabile il valore restituito dalla somma della seconda colonna della matrice
    io ho fatto così, ma non mi piace per nulla...
    SommaMatrix=workksheetfunction.Sum(Matrix(1,2)+Matrix(2,2)+Matrix(3,2)+Matrix(4.2) + ... + Matrix(12,2))
    Oppure posso impostare un ciclo di questo tipo
    For x = 1 to 12
    SommaMatrix=SommaMatrix+Matrix(x,2)
    Next

    Esiste una forma diversa, magari più immediata?
    grazie mille.



  • di Vecchio Frac data: 05/06/2013 18:04:33

    Il ciclo For che hai indicato è la soluzione praticata abitualmente.
    Siccome Matrix è una variabile in memoria e non un Range, non so se funziona Worksheetfunction.Sum (non ho provato, dovrei verificare). Probabilmente funzionerebbe assegnando Matrix ad un range reale e poi calcolando la somma sulla seconda colonna di detto range.
    Se ho un attimo faccio qualche prova.





  • di Vecchio Frac data: 05/06/2013 18:16:42

    Uhm. Ecco il mio test.
    Certo il secondo metodo è più rapido, ma devi appoggiarti a un range esterno che magari poi vuoi distruggere per non lasciare tracce.
     
    Option Explicit
    
    Sub test()
    Dim matrix(1 To 12, 1 To 3), i As Integer, j As Integer, somma As Integer
    Dim a As Variant
    
        Randomize Timer
        
        For i = 1 To 12
            For j = 1 To 3
                matrix(i, j) = j
        Next j, i
        
        somma = 0
        For i = 1 To 12
            somma = somma + matrix(i, 2)
        Next
        Debug.Print "1° metodo: la somma è " & somma
        
        
        [a1:c12] = matrix()
        somma = Application.Sum([b1:b12])
        Debug.Print "2° metodo: la somma è " & somma
        
    End Sub






  • di Vecchio Frac data: 05/06/2013 18:19:13

    E anche così non mi convince.
     
    set matrix=[a1:c12]
    debug.print "3° metodo. La somma è " & application.sum(matrix.columns(2))
    






  • di Textomb data: 05/06/2013 19:58:16

    Alla fine penso di utlizzare il ciclo For next
    Appoggiarmi ad un range esterno non mi piace molto. Non so perchè in effetti.
    Grazie ovviamente.
    Molto esaustivo.
    La spunto come risolta.



  • di Vecchio Frac data: 05/06/2013 20:27:40

    cit. " Non so perchè in effetti. "
    ---> E' solo questione di prestazioni... sarebbe interessante una verifica prendendo i tempi (con Timer è sufficiente).
    Ma non ne ho il tempo e poi sarebbe solo un punto di didattica temo ^_^