Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7

    aiuto: scrivere elementi array vba in xls?

    Buona sera a tutti.
    Devo scrivere tutti gli elementi di un array bidimensionale di vba in una cella di excel, con piu iterazioni successive.
    Conosco il comando for/next, ma non so come dire a vba di scorrere tutto array e di copiare di volta in volta il valore successivo in xls.
    Avevo pensato al codice sotto, ma non funziona.
    Ogni aiuto gradito.
    Grazie, lost

    Dim myarray ( 1 to 50000, 1 to 20) as variant
    For x = 1 to 1e6
    Range("a1") = myarra(i)
    Next
    End

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    myarray è un array a due dimensioni

    Dim myarray ( 1 to 50000, 1 to 20) as variant

    e tu usi un vettore (ad una dimensione) nel ciclo

    Range("a1") = myarra(i)

    Che senso ha?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7
    Perfettamente ragione, scusa.
    Ma anche quando aggiungo altra dimensione - come sotto modificato - non sembra funzionare

    Dim myarray ( 1 to 50000, 1 to 20) as variant
    For x = 1 to 1e6
    Range("a1") = myarra(i,j)
    Next
    End

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa ... ma rifletti su cosa scrivi ...

    1) Quanto vale j nel ciclo? Non si sa

    2) Cosa c'entra i se la variabile che controlla il ciclo si chiama x ?

    3) Perché x va fino a 1 milione se il primo indice dell'array va fino a 50000?

    E soprattutto, esattamente, cosa vuoi fare?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7
    Provo a spiegarmi diversamente.
    Ho un array di un milione di elementi disposti su 20 colonne e 50000 righe, e devo copiarne il contenuto in una cella xls con successive iterazioni.
    Il totale delle iterazioni - x nel mio esempio - e pari a 1 milione perche 1 milione sono i dati contenuti nell'array che devo scaricare.
    Con i e j volevo indicare colonna i-esima e riga j-esima.
    Spero sia piu chiaro ora.
    Grazie per interessamento.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa due for, uno dentro l'altro, con indici i e j ...

    Ma non ho ancora capito la destinazione di ogni elemento dell'array ... ogni elemento va in una cella diversa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7
    Grazie.
    Provato a modificare codice qui sotto, spero aver interpretato correttamente tuo suggerimento.

    Per la cella di destinazione, questa deve essere sempre la stessa: a1.
    Mi aspetto che il suo contenuto cambi 1 milione di volte, in funzione dei dati che scarichero dall'array.
    Corretto?

    Dim myarray ( 1 to 50000, 1 to 20) as variant
    For i = 1 to 50000
    For j = 1 to 20
    Range("a1") = myarray (i,j)
    Next i
    Next j
    End

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì ma avrai solo l'ultimo alla fine ... che senso ha?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7
    Grazie.
    Il fatto e che, al variare di xls a1, vorrei far dipendere altre formule/calcoli.
    Domani testo e, se dovessi avere nuove difficolta, temo tornero con cappello in mano e pive nel sacco.
    Se avessi curiosita vedere risultato finale, felice condividere.
    Ancora grazie per aiuto.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    7

    Oregon to the rescue, again?

    grazie Oregon, il codice suggerito ieri funziona a meraviglia.
    purtroppo, mi sono imbattuto in una nuova difficolta, penso legata al fatto che ora il codice ha come riferimento a1 e non piu le iterazioni iesime.
    copio qui di seguito il codice con note generiche ed una in maiuscolo dove penso sia il problema.
    come sempre grazie per interessamento ed ogni aiuto.
    lost

    Dim bigArray (1 To 4000000) As Variant
    Dim myarray ( 1 to 50000, 1 to 20) as variant
    Dim smallArray(1 To 50000, 2) As Variant

    ' carico array in VBA e ne scrivo elementi in a1 in successione
    myarray = range("b1:cv50000")
    For i = 1 to 50000
    For j = 1 to 20
    Range("a1") = myarray (i,j)
    Next i
    Next j


    ' codice disattivato, perche le iterazioni sono ora guidate da elemento di myarray in a1 e non piu da loop di rand per 1 milione di volte
    ' For i = 1 To 1e6
    ' Application.Calculate

    ' per ogni iterazione, ora guidata da a1, sommo valori di formule contenute in foglio xls
    totals = Range("a2")

    ' DOVREI POPOLARE L'ARRAY CON SUCCESSIVI ELEMENTI DI "TOTALS", MA AVENDO ELIMINATO i, IL CODICE SI BLOCCA E NO RIUSCITO A PENSARE COME RISOLVERE.
    bigArray(i) = totals

    ' monitoro stato, ma anche quessto compromesso di mancanza di i
    If i Mod Range("progress") = 0 Then
    Range("iterations_processed") = i
    End If

    Next i

    'scrivo tutti i valori ti bigarray, ma anche quessto compromesso di mancanza di i
    For col = 1 To 25#
    SmallCounter = 1
    For i = 1 + ((col - 1) * 50000) To col * 50000
    smallArray(SmallCounter, 0) = i
    smallArray(SmallCounter, 1) = bigArray(i)
    SmallCounter = SmallCounter + 1

    Next i

    Range("data").Resize(50000, 2).Offset(0, (col - 1) * 3).Value = smallArray
    Next col

    End Sub

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.