Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

vba excel: quintuplicare righe e calcolare parte delle celle

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba excel: quintuplicare righe e calcolare parte delle celle

Postdi syriochan » 21/04/20 15:34

buongiorno,

scrivo qui per la prima volta poichè ho "quasi" trovato la soluzione al mio problema in questo forum, ma non sono riuscito a modificare il codice in modo che facesse quello che voglio.

il topic in questione è questo:
viewtopic.php?t=109653

il codice nel topic in oggetto:
duplica le righe nell'excel
sostituisce una stringa nelle copie

io ho bisogno di:
quintuplicare le righe
inserire per ogni riga un valore statico della colonna C
per ogni duplicato di riga poter inserire nella colonna D ed E delle formule diverse.

esempio:
riga originaria: val 1 val2 val3 val4 val5
duplicato 1: val 1 val2 val6 val4*2 val5
duplicato 2: val 1 val2 val7 val4*1,3 val5
duplicato 3: val 1 val2 val8 val4*0,8 val5
duplicato 4: val 1 val2 val9 val4*0.95 val5

sapreste aiutarmi?
si tratta di un file da 6000 righe
syriochan
Newbie
 
Post: 4
Iscritto il: 21/04/20 14:15

Sponsor
 

Re: vba excel: quintuplicare righe e calcolare parte delle c

Postdi Anthony47 » 21/04/20 22:17

Intanto "Benvenuto nel forum"

Si puo' fare ovviamente con una macro; pero' e' utile che alleghi un file esemplificativo con almeno una decina di righe ed e' necessario che dici precisamente quali valori vanno cambiati e di quanto.

Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: quintuplicare righe e calcolare parte delle c

Postdi syriochan » 22/04/20 10:50

ciao,

ti ringrazio del benvenuto!

di seguito il file d'esempio:
https://www.dropbox.com/s/ddri7q4lj1l4u ... .xlsx?dl=0

avete da consigliarmi una guida per imparare vba? sono perito informatico e ho le mie basi di programmazione in c++, quindi ci stavo arrivando da solo, ma mi sono accorto che mi mancano un pò troppe nozioni su vba

grazie,
francesco
syriochan
Newbie
 
Post: 4
Iscritto il: 21/04/20 14:15

Re: vba excel: quintuplicare righe e calcolare parte delle c

Postdi Anthony47 » 22/04/20 17:21

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#p647675
Le 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
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: quintuplicare righe e calcolare parte delle c

Postdi syriochan » 23/04/20 11:21

ciao, ti ringrazio per il riscontro

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?

in rete ho trovato questo https://www.settorezero.com/wordpress/v ... o-virgola/
sembra interessante, tuttavia non ho problemi di scelta utente in quanto uso solo virgole

voi avete qualche altro espediente o integro questo codice nella macro?

grazie ancora
syriochan
Newbie
 
Post: 4
Iscritto il: 21/04/20 14:15

Re: vba excel: quintuplicare righe e calcolare parte delle c

Postdi Anthony47 » 23/04/20 15:14

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?
Eh gia'...
Modifica le due istruzioni centrali in questo ciclo:
Codice: Seleziona tutto
    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

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: quintuplicare righe e calcolare parte delle c

Postdi syriochan » 23/04/20 17:09

ah brutale ciclo per sostituire le virgole?
assurdo non ci sia una soluzione standard, anche perchè i dati glieli da in pasto excel che è sempre un prodotto microsoft

per istruzioni centrali quali intendi? prima della dichiarazione dei vettori auno e adue?

comunque ti ringrazio per la soluzione!

grazie
syriochan
Newbie
 
Post: 4
Iscritto il: 21/04/20 14:15

Re: vba excel: quintuplicare righe e calcolare parte delle c

Postdi Anthony47 » 23/04/20 23:24

assurdo non ci sia una soluzione standard, anche perchè i dati glieli da in pasto excel che è sempre un prodotto microsoft
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.3

Le "due istruzioni centrali" sono le due in mezzo alle quattro che avevo elencato, e cioe'
Codice: Seleziona tutto
oArr(I + K, J) = Evaluate(Replace( etc etc
oArr(I + K, J + 1) = Evaluate(Replace(etc etc

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "vba excel: quintuplicare righe e calcolare parte delle celle":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti