Articolo.......................................Quantità
penna rossa.................................2
matita nera..................................3
.....................
devo ottenere
penna rossa
penna rossa
matita nera
matita nera
matita nera
...........................
ecc. ecc.
Mi date una mano?
Grazie
Non dai molti dettagli sulla destinazione, per cui ti do uno spunto
generico:
'====================
in un modulo standard:
Public Sub replica()
Dim shTo As Worksheet
Dim rng As Range
Dim cella As Range
Set cella = ActiveCell
Set shTo = Worksheets("Foglio2") 'da modificare col tuo
Set rng = shTo.Range("A1").Resize(cella.Offset(0, 1), 1)
rng = cella.Value
Set cella = Nothing
Set rng = Nothing
End Sub
'====================
Lanciare replica() con la cella delll'articolo voluto selezionata.
Fai sapere se hai risolto grazie.
Articolo.......................................Quantit�
penna rossa.................................2
matita nera..................................3
.....................
devo ottenere
penna rossa
penna rossa
*************************************
Sullo stesso rigo cosa vuol dire?
Excel ha delle *righe* che si
intersecano con delle *colonne*.
Il tuo testo � tutto nella stessa colonna?
O penne rosse e 2 sono in due colonne
diverse?
Grazie.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/officeit/threads
> Ho la necessità di duplicare le righe di un foglio excel su un altro
> tante volte quante sono le quantità presenti nel rigo stesso. Mi
> spiego meglio:
>
> Articolo.......................................Quantità
> penna rossa.................................2
> matita nera..................................3
> ......................
>
> devo ottenere
>
> penna rossa
> penna rossa
> matita nera
> matita nera
> matita nera
> ............................
> ecc. ecc.
>
>
> Mi date una mano?
anche due :-)
Sub test()
Dim rng As Excel.Range
Dim rngD As Excel.Range
Dim i As Long, s As String, l As Long, t As Long
'[a1] cambia a seconda delle esigenze
Set rng = [a1].CurrentRegion
Debug.Print rng.Address
Set rngD = Nuovo_Range(rng.Parent.Parent, "Sviluppo_elenco")
On Error Resume Next
For i = 0 To rng.Rows.Count - 1
s = rng(1).Offset(i)
t = rng(1).Offset(i, 1).Value - 1
If t > 0 Then
For l = 0 To t
rngD.Offset(l).Value = s
Next
Set rngD = rngD.Offset(l)
End If
Next
End Sub
Function Nuovo_Range( _
Wb As Excel.Workbook, _
Optional Nome_base As _
String = "Foglio") As Excel.Range
'di Roberto Mensa - Nick r
'restituisce la cella A1 di un nuovo foglio
'il nuovo foglio viene rinominato in base
'all'argomento Nome_base
Dim b
Set Nuovo_Range = Wb.Worksheets.Add.Range("A1")
Application.ScreenUpdating = False
On Error Resume Next
Do
Err.Clear
Nuovo_Range.Parent.Name = Nome_base & b
b = b + 1
Loop While Err
Application.ScreenUpdating = True
End Function
saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
Ciao. Scusami, pensavo fosse chiaro. Ho una colonna "Articolo" (ed
altre che è inutile specificare, poi cambio io) ed una colonna
"Quantità".
Poichè devo passare il magazzino ad un programma che si occupa della
stampa dei codici a barre ho bisogno di avere tante righe articoli
quante sono le quantità reali così poi potrò stampare una etichetta
per ogni rigo (e quindi averne poi per ogni pezzo realmente presente a
magazzino).
Quindi devo prendere il foglio excel originale che ha "N" righe e
crearne uno nuovo con tutte le righe originali duplicate quante volte
serve in base alla relativa colonna "Quantità".
Spero che adesso sia più chiaro :)
Cmq nel frattempo vado a testare gli altri esempi giunti.
Grazie a tutti
Ciao e grazie. A funzionare funzia... quasi :)
Mi spiego meglio:
Ho notato che se ho:
Articolo...................... Quantità
Matita Rossa...............2
Penna nera..................1
Matita Verde................3
Salta il rigo a quantità 1. Difatti ottengo:
Matita Rossa
Matita Rossa
Matita Verde
Matita Verde
Matita Verde
Altro problemino (colpa mia, prima mi sono espresso male). Le colonne
sono più di due. La quantità è l'ultima colonna piena. E' possibile
modificare il codice in tal senso? Non so ancora precisamente quale
colonna sarà quella con le quantità. So solo che è l'ultima
Quindi una cosa del tipo:
Articolo...........
Colore..............ecc........ecc................Quantità
Grazie ancora
> Ciao e grazie. A funzionare funzia... quasi :)
hai ragione ... c'era un errore
> Altro problemino (colpa mia, prima mi sono espresso male). Le colonne
> sono più di due.
ok quindi adatta alle tue esigenze, col_base è la colonna
dove hai i numeri ... puoi usare la lettera o il numero
di colonna ... riporto tutto il codice:
Sub test()
Dim rng As Excel.Range
Dim rngD As Excel.Range
Dim i As Long, s As String, l As Long, t As Long
Const col_base As Variant = "B" '<< da adattare alle esigenze
Set rng = [a1].CurrentRegion '[a1] cambia a seconda delle esigenze
Debug.Print rng.Address
Set rngD = Nuovo_Range(rng.Parent.Parent, "Sviluppo_elenco")
On Error Resume Next
For i = 0 To rng.Rows.Count - 1
s = rng(1).Offset(i)
t = rng(1).Offset(i, Cells(1, col_base).Column - 1).Value
If t > 0 Then
For l = 0 To t - 1
End Function
saluti
r
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
Ciao. Grazie. Adesso l'errore delle quantità 1 non c'è più e posso
definire la colonna "Quantità". Perfetto.
Però io devo copiare tutto il rigo, non solo la prima cella. Prima per
fretta ho fatto un esempio stringato ma mi riferivo sempre (come
l'oggetto del thread) a tutto il rigo. Per essere più precisi
possibile, mi serve:
Articolo.......... Colore..............ecc................Quantità
Matita............ Rossa..............ecc.................2
Penna.............nera.................ecc.................1
Matita.............Verde...............ecc.................3
che diventi:
Matita............ Rossa..............ecc................
Matita............ Rossa..............ecc................
Penna.............nera.................ecc...............
Matita.............Verde...............ecc...............
Matita.............Verde...............ecc...............
Matita.............Verde...............ecc...............
Grazie ancora
Articolo.......... Colore..............ecc................Quantit�
****************************************************
Un modo diverso per fare la stessa cosa.
In Foglio1 la tua tabella, in Foglio2 i dati
come li vuoi tu.
Questo il codice
da mettere in un modulo standard:
Public Sub m()
'gestione rrori
On Error GoTo RigaErrore
'dichiaro le variabili
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim lUltRiga1 As Long
Dim lUltRiga2 As Long
Dim lng1 As Long
Dim lng2 As Long
'Dim lRighe As Long
'impedisco il refresh del monitor
With Application
.ScreenUpdating = False
.CutCopyMode = False
End With
'metto il riferimento ai fogli
Set sh1 = Worksheets("Foglio1")
Set sh2 = Worksheets("Foglio2")
With sh1
'trovo l'ultima riga con
'valori della colonna A
'del Foglio1
lUltRiga1 = .Range("A" & _
.Rows.Count).End( _
xlUp).Row
'trovo la prima riga
'vuota della colonna A
'del Foglio2
lUltRiga2 = sh2.Range("A" & _
.Rows.Count).End( _
xlUp).Row
'pulisco tutte le celle del Foglio2
'a partire da A2, lasciando l'eventuale
'formattazione
sh2.Range("A2:D" & lUltRiga2).Value = ""
lUltRiga2 = 2
'ciclo le righe
For lng1 = 2 To lUltRiga1
'prendo il valore in D per il ciclo
For lng2 = 1 To .Range("D" & lng1).Value
'copio la riga dal Foglio1
'al Foglio2 in base al valore
'che ho in D
.Range("A" & lng1 & ":D" & lng1).Copy _
Destination:=sh2.Range( _
"A" & lUltRiga2)
lUltRiga2 = lUltRiga2 + 1
Next
Next
End With
'riga sempre eseguita
RigaChiusura:
'ripristino l'aggiornamento del monitor
With Application
.ScreenUpdating = True
.CutCopyMode = True
End With
'Set a Nothing delle variabili oggetto
Set sh2 = Nothing
Set sh1 = Nothing
Exit Sub
'in caso di errore
RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusura
End Sub
Note.
1)La mia tabella va da A a D ed il numero
di ripetizioni � in D. Modifica D con
la lettera della colonna che nella tua tabella
contiene le ripetizioni.
2)Nel caso la colonna con le ripetizioni
non sia l'ultima colonna, modifica qui:
.Range("A" & lng1 & ":D" & lng1).Copy _
Destination:=sh2.Range( _
"A" & lUltRiga2)
sostituendo a D la lettera corrispondente all'ultima colonna
(solo qui, mi raccomando!).
In pratica devo indicare in 1) *dove*(colonna) trovare le ripetizioni
e in 2) *quali* colonne copiare.
Puoi anche aggiungere nuove voci alla tabella e rilanciare la macro,
ti aggiorner� il Foglio2.
Fra pochi minuti metto l'esempio utilizzato per le prove
qui:
http://www.maurogsc.eu/esemping/databellamolterighe.zip
Grazie per l'attenzione.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
GRAZIEEEEEEE funziona alla grande.
Un grazie sentito anche a Roberto Mensa per il suo aiuto iniziale.
Adesso una piccola richiesta che non c'entra nulla con quanto sopra.
Ho rispolverato un pò le mie conoscenze di programmazione per tentare
di modificare il codice iniziale adattandolo alle mie esigenze ma.... :
( mi sono reso conto di essere troppo arrugginito. Mi dite dove potrei
trovare un pò di info per spraticarmi un pò? Spiegazioni comandi,
esempi, ecc.??
Così almeno poi rompo di meno :)
Grazie
la tua fretta ... ??
la prossima volta usa la cortesia di perdere 10 minuti
in più te ... anzichè farli perdere inutilmente a chi ti sta
aiutando.
grazie
saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
Un grazie sentito anche a Roberto Mensa per il suo aiuto iniziale.
************************************************
Grazie a te per il riscontro.
Mi dite dove potrei
trovare un p� di info per spraticarmi un p�? Spiegazioni comandi,
esempi, ecc.??
************************************************
Tu non rompi, anzi, aiuti noi
a *restare in allenamento* e i tuoi
post e le eventuali risposte resteranno
a disposizioni di tutti.
La guida del vb di Excel sia il tuo primo
aiuto e supporto(non sembro Mos�?... ;-))
Ti consiglio inoltre questo libro(in inglese),
vera bibbia per Excel ed il suo vb:
http://www.amazon.com/Excel-Power-Programming-Spreadsheets-Bookshelf/dp/0470044012
e questi siti
http://www.cpearson.com/Excel/MainPage.aspx
http://www.contextures.com/index.html
http://erlandsendata.no/
http://www.prodomosua.eu/
http://www.rondebruin.nl/
http://www.riolab.org/
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
???? Fretta?
Perdonami. Non volevo essere nè offensivo, nè altro. Ti ho ringraziato
per il tuo aiuto. Ho provato a modificare anche il tuo codice ma (mia
colpa) non ci ho capito nulla sulla gestione del comando range per
copiare il rigo intero. Ho cercato in giro ma mi sento vecchio oramai
per queste cose.
Te sei stato gentilissimo e ti ho pubblicamente già ringraziato. A me
serviva un pezzo di codice per un problema aziendale interno. Io ho
studiato il tuo programma modificando i cicli cercando di adattarli
(il baco delle quantità ad 1 alla fine lo avevo superato in altro
modo) ma non ci sono riuscito. Una altra persona (che ringrazio alla
stessa maniera) posta un codice che per me funge. Mi spiace che tu te
la prenda ma non era intenzionale.
Anzi ho richiesto un aiuto su dove reperire info per il futuro onde
rompere quanto meno possibile voi mostri sacri.
Spero di risentirci in toni assolutamente sereni. Io mi sento in
debito almeno di una birra (pur se virtuale) che spero tu accetterai.
Cordialissimi saluti
nessuna rottura ... non era mia intenzione postare ulteriori
modifiche ... quindi fosse stato per me il discorso era già
chiuso. Mauro ha risposto ... ben per te.
nessuna polemica ... forse sono stato un po' brusco ...
preferirei dire diretto ... leggici cosa preferisci ... rimane il
consiglio ... l'analisi di un problema richiede sempre ancora
un po' di tempo dal momento in cui si è sicuri di averlo ben
inquadrato ... questo tempo è di chi fa l'analisi ... non di chi
tenta la soluzione ... il codice che ho postato risulterebbe
difficilmente adattabile alla tua esigenza di mantenimento
della formattazione ... è bene affrontarlo in modo differente
vedi soluzione postata da Mauro ... il tempo che ti ho dedicato
è stato tempo perso ... poco male ... viste le circostanze ...
ma tornando al consiglio ... in altre ti avrebbe fatto risparmiare
quattrini ...
>
> Spero di risentirci in toni assolutamente sereni. Io mi sento in
> debito almeno di una birra (pur se virtuale) che spero tu accetterai.
> Cordialissimi saluti
salute ... glu glu glu
ciao
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
Robby, ciao.
Quoto il fatto che l'analisi dovrebbe
farla chi domanda. E invece, di solito,
la fa chi risponde, molte volte cercando
di *interpretare* la richiesta.
Ma tieni sempre presente *dove siamo*
e il compito che avrebbe l'ng.
E cosa dovrei dire poi io!?!?
Ha usato la mia routine e la birra
l'ha offerta a te!!! 8-)
Alt. Hai ragione :) A te oltre la birra ci va anche una cena :) e
grazie anche per le info su dove cominciare a studiare. Gentilissimo.
Cmq. avete entrambi ragione. Rileggendo la richiesta mi sono reso
conto che dovevo essere ancora più preciso nella esposizione. Chi è
dall'altra parte deve interpretare quello che per me è scontato. Se
mai ci saranno altre necessità sarò quanto più preciso e meticoloso
possibile.
Grazie ancora di cuore a tutti.
> <cut>
>
> Robby, ciao.
>
> Quoto il fatto che l'analisi dovrebbe
> farla chi domanda. E invece, di solito,
> la fa chi risponde, molte volte cercando
> di *interpretare* la richiesta.
sarà l'effetto della birra ...
veramente ottima ... aaaaah
a dirla tutta ... rileggendo i post
DarkSide non si è spiegato poi così
male ... ho un concorso di colpa ... :-)
>
> Ma tieni sempre presente *dove siamo*
> e il compito che avrebbe l'ng.
personalmente ... nell'NG scrivo perchè
mi fa comodo ... mi tiene allenato ... ogni
tanto imparo qualcosa ... do libero sfogo
all'esibizionista che c'è in me ...
poi se fa comodo anche a chi rispondo ...
meglio così ...
del compito dell'NG non mi sono mai
preoccupato ... e non idea di quale
che sia
cerco di rispettare le regole ... sono
ospite ... saluto ... chiacchero ...
discuto ... a volte animatamente...
spesso bevo birra ... :-)
>
> E cosa dovrei dire poi io!?!?
> Ha usato la mia routine e la birra
> l'ha offerta a te!!! 8-)
piangi ... piangi ... e hai rimediato
anche una cena ... scandaloso ... :-)
saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
Neppure io, era per far scena,
per fare il figo......;-)
Ciao e buon fine settimana.