Condividi tramite

VBA Excel: problema copia Array su Foglio

Anonimo
2021-10-26T08:40:37+00:00

Ciao a tutti,

sto riscontrando problemi nel copiare un vettore su un range predeterminato.

In sostanza, creo un vettore di numeri casuali composto da 99990 elementi e lo dovrei copiare su un foglio in un range che parte dalla riga 11 e arriva alla riga 100000 (pari a 99990 righe). Non capisco perche ma dalla riga 34450 (circa) nel foglio ho solo #N/D quando invece l vettore è correttamente valorizzato nel codice.

Posto il codice:

Private Sub Genera_Casuale()

Set SH = ThisWorkbook.Worksheets("Scelta_OF_SCR_softlimit")

SH.Select

Seed1 = SH.Range("X10") '<.---numero intero

Seed2 = SH.Range("X11") '<---numero intero diverso dal precedente

Massimo = 99990

Ultriga = 100000

Rnd (-Seed1)

Dim Cas1() As Variant

ReDim Cas1(1 To Massimo)

For k = 1 To Massimo

Cas1(k) = Rnd() - 0.5 

Next

Rnd (-Seed2)

Dim Cas2() As Variant

ReDim Cas2(1 To Massimo)

For k = 1 To Massimo

Cas2(k) = Rnd() - 0.5 

Next

LB1 = LBound(Cas1)

LB2 = LBound(Cas2)

UB1 = UBound(Cas1)

UB2 = UBound(Cas2)

'ERRORE DA QUI...

Set Rng1 = SH.Range("E11:E" & Ultriga)

Rng1.Select

'Rng1.Value = Application.Transpose(Cas1)

Set Rng2 = SH.Range("H11:H" & Ultriga)

Rng2.Select

Rng2.Value = Application.Transpose(Cas2)

Set Rng1 = Nothing

Set Rng2 = Nothing

SH.Range("H11").Select

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2021-10-26T09:50:38+00:00

Ciao Dario,

UPDATE:

sostituendo la parte di copia su foglio con il seguente codice, funziona.

For i = 1 To Massimo

SH.Cells(10 + i, 5).Value = Cas1(i)

Next

For i = 1 To Massimo

SH.Cells(10 + i, 8).Value = Cas2(i)

Next

Il problema con il tuo codice originale riguardava un limite relativo alla funzione MATR.TRASPOSTA.

Il tuo nuovo codice funzionerà ma sarà inutilmente lento. Per superare il problema originale, prova il seguente adattamento del tuo codice:

'========>>

Option Explicit

'-------->>

Private Sub Genera_Casuale()

Dim SH As Worksheet 

Dim Rng1 As Range, Rng2 As Range 

Dim Cas1() As Variant, Cas2() As Variant 

Dim Seed1, Seed2 

Dim k As Long 

Const Massimo As Long = 99990 

Const Ultriga As Long = 100000 

Set SH = ThisWorkbook.Worksheets("Scelta\_OF\_SCR\_softlimit") 

With SH 

    Set Rng1 = .Range("E11:E" & Ultriga) 

    Set Rng2 = .Range("H11:H" & Ultriga) 

    Seed1 = .Range("X10").Value 

    Seed2 = .Range("X11").Value 

End With 

Rnd (-Seed1) 

ReDim Cas1(1 To Massimo, 1 To 1) 

For k = 1 To Massimo 

    Cas1(k, 1) = Rnd() - 0.5 

Next k 

Rnd (-Seed2) 

ReDim Cas2(1 To Massimo, 1 To 1) 

For k = 1 To Massimo 

    Cas2(k, 1) = Rnd() - 0.5 

Next k 

Rng1.Value = Cas1 

Rng2.Value = Cas2 

End Sub

'<<========

===

Regards,

Norman

Immagine

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2021-10-26T10:22:38+00:00

    Ciao Dario,

    Grazie mille Norman.

    Problema risolto :)

    Ti ringrazio per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-10-26T10:14:39+00:00

    Grazie mille Norman.

    Problema risolto :)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-10-26T09:04:52+00:00

    UPDATE:

    sostituendo la parte di copia su foglio con il seguente codice, funziona.

    For i = 1 To Massimo

    SH.Cells(10 + i, 5).Value = Cas1(i) 
    

    Next

    For i = 1 To Massimo

    SH.Cells(10 + i, 8).Value = Cas2(i) 
    

    Next

    La risposta è stata utile?

    0 commenti Nessun commento