Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione di dati
Ciao Antonio,
Ciao Norman,
ho caricato il file di esempio così come da te richiesto.
Le matrici contenute nel foglio 1 sono 40 (Variabili) per 145 (territori) per 13 (anni) da riportare nel foglio 2 su 40 colonne .
Prova a sostituire il codice precedente con la seguente versione:
'========>>
Option Explicit
'-------->>
Public Sub RitornaVettore()
Dim srcSH As Worksheet, destSH As Worksheet
Dim Rng As Range
Dim arrIn As Variant, arrOut() As Variant
Dim i As Long, j As Long
Dim iRow As Long, iCol As Long
Dim UB As Long, UB2 As Long
Dim iCtr As Long, jCtr As Long
Const iTerritori As Long = **145 '<<=== Modifica**
Const iVariabili As Long = **40 '<<=== Modifica**
Const sFoglio\_Sorgente As String = **"Foglio1" '<<=== Modifica**
Const sFoglio\_Destinazione As String = **"Foglio3" '<<=== Modifica**
Const sPrima\_Cella\_Dati As String = **"K5" '<<=== Modifica**
With ThisWorkbook
Set srcSH = .Sheets(sFoglio\_Sorgente)
Set destSH = .Sheets(sFoglio\_Destinazione)
End With
Set Rng = srcSH.Range(sPrima\_Cella\_Dati).CurrentRegion
arrIn = Rng.Value
UB = UBound(arrIn)
UB2 = UBound(arrIn, 2)
ReDim Preserve arrOut(1 To UB \* UB2 / iVariabili, 1 To iVariabili)
j = 1
For i = 1 To UB Step iTerritori
For iCol = 1 To UB2
For iRow = 1 To iTerritori
iCtr = iCtr + 1
jCtr = jCtr + 1
arrOut(iCtr, j) = arrIn(i - 1 + jCtr, iCol)
Next iRow
jCtr = 0
Next iCol
iCtr = 0
j = j + 1
Next i
With destSH
destSH.UsedRange.Offset(1).ClearContents
.Range("A2").Resize(UBound(arrOut), iVariabili).Value = arrOut
End With
End Sub
'<<========
In futuro il numero di matrici può aumentare così come pure il n. di anni :-)
Se dovessero esserci tali modifiche, dovrebbe essere sufficiente modificare i valori assegnati alle costanti in cima al codice.
Potresti scaricare il mio file di prova Antonio20221031.xlsm
===
Regards,
Norman