Ti suggerisco questa macro:
- Codice: Seleziona tutto
Sub Per5()
Dim Enne1, AUno
Dim Enne2, ADue
Dim oArr(), oARInd As Long, oAHInd As Long
Dim I As Long, J As Long, K As Long, LastC As Long, LastR As Long
Dim IStart As Range, oSh As String
'
'Ipostazioni:
Set IStart = Sheets("Foglio1").Range("A3") '<<< L'origine della tabella iniziale
oSh = "Foglio2" '<<< Il foglio su cui si creera' la nuova tabella
'
'Le modifiche:
AUno = Array("Enne1", "3", "10", "199", "99999") '<<< Come manipolare Enne1
ADue = Array("Enne2", "Enne2*2", "Enne2*1.3", "Enne2*0.9", "Enne2*0.85") '<<< Come manipolare Enne2
'
Application.Goto IStart
LastC = IStart.Cells(1, 1).End(xlToRight).Column 'Ultima colonna usata
LastR = IStart.Cells(1, 1).End(xlDown).Row 'Ultima riga usata
ReDim oArr(1 To LastR * 5, 1 To LastC - IStart.Cells(1, 1).Column + 1) 'Dimensiona la matrice di Output
'Popola la matrice di Output, replica come originale
For I = IStart.Cells(1, 1).Row + 1 To LastR
For K = 1 To 5
oARInd = oARInd + 1: oAHInd = 1
For J = IStart.Cells(1, 1).Column To LastC
oArr(oARInd, oAHInd) = Cells(I, J).Value
oAHInd = oAHInd + 1
Next J
Next K
Next I
'Modifica colonne 4 & 5:
J = LBound(oArr, 2) + 3
For I = 1 To oARInd Step 5
For K = 0 To 4
oArr(I + K, J) = Evaluate(Replace(AUno(K), "Enne1", CStr(oArr(I + K, J)), , , vbTextCompare))
oArr(I + K, J + 1) = Evaluate(Replace(ADue(K), "Enne2", CStr(oArr(I + K, J + 1)), , , vbTextCompare))
Next K
Next I
'Popola foglio di Output
IStart.Cells(1, 1).Resize(1, LastC).Copy Sheets(oSh).Range("A1") 'Intestazione
Sheets(oSh).Range("A2").Resize(UBound(oArr), UBound(oArr, 2)).Value = oArr 'Tabella
MsgBox ("Creata nuova tabella con " & oARInd & " righe")
End Sub
Il codice va messo in un "Modulo standard" del progetto vba del tuo file; se hai dubbi leggi qui:
viewtopic.php?f=26&t=103893&p=647675#p647675Le righe marcate <<< vanno personalizzate come da tua situazione, secondo i commenti; i valori ora impostati collimano col tuo file di prova, a parte
oSh = "Foglio2" che e' una mia ipotesi
Quanto alle righe
AUno = Array(etc etc) e
ADue = Array(etc etc) e' una "complicazione" che teoricamente potrebbe rendere piu' flessibile il riuso della macro. In questi Array infatti vado a dichiarare come vanno modificate le colonne Num1 e Num2; i valori usati sono come da tua descrizione (ma nel tuo file c'e' una discrepanza tra quanto scrivi da E12 in giu' rispetto a quanto hai dichiarato in M12 e sottostanti; io ho privilegiato le dichiarazioni in colonna M)
Il foglio dove vai a creare la nuova tabella deve gia' esistere; il suo contenuto, per le colonne richieste dalla tabella di uscita, sara' cancellato e sostituito con quanto calcolato
Prova e fai sapere
Quanto a imparare il vba, se cerchi in una buona libreria troverai certamente qualche interessante pubblicazione. Oppure cerchi "imparare il vba" e troverai sia spunti che pubblicazioni.
Inutile dire che i doc piu' interessanti sono in Inglese.
Io ti consiglio di cominciare a registrare semplici macro, ispezionarne il codice e capirlo, per poi modificarlo in modo sempre piu' intenso.
Potresti partire da qui:
viewtopic.php?f=26&t=103893&p=622593#p622593; trovi nella stessa discussione degli esempi su come modificare una macro e come debuggarla.
Non e' da trascurare l'ottima documentazione Microsoft; si parte da qui
https://docs.microsoft.com/it-it/office ... /overview/ poi nel menu a sx puoi scegliere il programma (Excel) e sempre piu' in dettaglio: i concetti, gli "Oggetti", metodi e proprieta'.
Ciao