Moderatori: Anthony47, Flash30005
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
Eh gia'...la macro funziona esattamente come mi serviva, l'unica cosa è che nel file di input ho dovuto formattare le colonne di calcolo (num2) come testo e mettere al posto della "," il ".", in quanto con la virgola vba non leggeva il valore del campo e restituiva errore #valore
c'è un modo per fargli digerire le virgole?
For K = 0 To 4
oArr(I + K, J) = Evaluate(Replace(AUno(K), "Enne1", Replace(CStr(oArr(I + K, J)), ",", ".", , , vbTextCompare), , , vbTextCompare))
oArr(I + K, J + 1) = Evaluate(Replace(ADue(K), "Enne2", Replace(CStr(oArr(I + K, J + 1)), ",", ".", , , vbTextCompare), , , vbTextCompare))
Next K
Sembra assurdo, ma e' la modalita' con cui uso il vecchio contenuto (cioe' una pseudo formula che vado a "Valutare" nella macro) che apre questo problema; perche' altrimenti il vba fa regolarmente Range(""C3").Value * 1.3assurdo non ci sia una soluzione standard, anche perchè i dati glieli da in pasto excel che è sempre un prodotto microsoft
oArr(I + K, J) = Evaluate(Replace( etc etc
oArr(I + K, J + 1) = Evaluate(Replace(etc etc
Torna a Applicazioni Office Windows
Mettere tutto MAIUSCOLO un range di celle Autore: raimea |
Forum: Applicazioni Office Windows Risposte: 7 |
Inserire add.in nella barra di avvio veloce in excel 2003 Autore: Ricky0185 |
Forum: Applicazioni Office Windows Risposte: 4 |
Trasformare celle con formattazioni in html Autore: servicedynergy |
Forum: Applicazioni Office Windows Risposte: 5 |
Excel: problema con date se devo unirle a testi Autore: valle1975 |
Forum: Applicazioni Office Windows Risposte: 5 |
Visitano il forum: Nessuno e 5 ospiti