Spostare array multimensionale in un altro limitandone la dimensione

di il
3 risposte

Spostare array multimensionale in un altro limitandone la dimensione

Buongiorno.

Ho un problema che non so se abbia una soluzione o sia intrinsecamente limitato dalle regole di Excel.

La mia routine rucorsiva scorre la prima colonna in cui ci sono delle celle unite, che si riferiscono ad altri dati da elaborare. A me occorre mettere in un array i limiti di ogni cella unita, quindi inizio e fine, dinamicamente.

Ho trovato il modo, ed è abbastanza semplice; per farlo, utilizzo un array multimensionale. La routine va da sé è dinamica, quindi dovrebbe contemperare la possibilità di ridurre la dimensione dell'array a quella reale al termine del popolamento. 

Però, l'istruzione reDim Preserve mi dà errore. Credo sia appunto un limite di exel che non permette di ridimensionare a piacimento.

Questa è la routine:

Sub mappatura()
Dim arrTemp() As Integer, arrRif()
Dim iIni As Integer, iFine As Integer
iIni = 41
iK = 1
ReDim arrTemp(1 To 100, 1 To 2)
While Cells(iIni, 1).MergeArea.Count > 1
    'ReDim Preserve arrTemp(iK, 2)
    arrTemp(iK, 1) = iIni
    With ActiveSheet
         Set rng = Cells(iIni, 1)
         With rng
            iFine = iIni + .MergeArea.Rows.Count
            arrTemp(iK, 2) = iFine - 1
         End With
    End With
    iIni = ini + iFine
    iK = iK + 1
Wend
ReDim preserve arrTemp(1 To UBound(arrTemp), 2)

End Sub

 Ho pure pensato di trasferire l'array arrTemp in un altro già ridimensionato, ma non so bene se sia possibile.

Se nessuno ha qualche suggerimento, mi terrò il limite iniziale a 100, ma credo sia uno spreco di spazio inutile.

Grazie in anticipo.

3 Risposte

  • Re: Spostare array multimensionale in un altro limitandone la dimensione

    Alcune considerazioni …

    1. la Redim Preserve può agire SOLO sull'ultima dimensione
    2. la Ubound restituirà sempre il valore massimo di elementi dimensionati non quelli effettivi
    3. nella Redim devi specificare 1 To … per tutte e due le dimensioni

    Quindi dovrai adattare il tuo codice in modo che

    a) la prima Redim sia     ReDim arrTemp(1 To 2, 1 To 100)

    b) gli indici del ciclo siano adattati di conseguenza (lo farai tu)

    c) l'ultima Redim sia    ReDim Preserve arrTemp(1 To 2, 1 To iK-1)

    Controlla che il numero di elementi utili alla fine sia iK-1

  • Re: Spostare array multimensionale in un altro limitandone la dimensione

    Grazie.

    Come immaginavo, è un regola di Excel riuardante gli array multidimensionali.

    Avevo già incontratyo il problema tempo fa, ma non ricordavo esattamente il punto.

    Ho già applicato le modifiche e, naturalmente, funziona tutto bene.

  • Re: Spostare array multimensionale in un altro limitandone la dimensione

    Prego

    In realtà è una regola del linguaggio, VBA e Visual Basic nelle versioni compatibili compatibili col VBA

Devi accedere o registrarti per scrivere nel forum
3 risposte