Condividi:        

Copia in modo un po' complesso...

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

Copia in modo un po' complesso...

Postdi dindog » 13/06/12 12:04

Ciao!
Il mio problema è questo.
Ho una lunga serie di dati costituiti da 3 colonne e da un numero variabile di righe.
Al termine di una serie, vi è una riga vuota. A seguito, comincia un'altra serie.
es.

20 23 103
98 23 92
22 11 118

15 15 22
11 33 33
55 55 55
98 22 22

43 44 23
33 33 44

E così via (in realtà il numero delle righe di ogni gruppo è molto lungo).
Ora, mi sarebbe utile copiare ogni gruppo l'uno a fianco dell'altro.
La "copiatura" di ogni gruppo dovrebbe terminare quando viene raggiunta la linea bianca, in questo modo:

20 23 103 15 15 22 43 44 23
98 23 92 11 33 33 33 33 44
22 11 118 55 55 55
98 22 22


Credo sia chiaro.
Volevo riuscire a farmi una macro all'uopo, ma non ho avuto successo...
Chiedo quindi aiuto a voi, per una macro adatta.
Grazie,
Ale
dindog
Newbie
 
Post: 4
Iscritto il: 13/06/12 11:46

Sponsor
 

Re: Copia in modo un po' complesso...

Postdi Anthony47 » 13/06/12 13:56

Ciao dindog, benvenuto nel forum.
Una macro come questa probabilmente fa quel che dici:
Codice: Seleziona tutto
Sub mergeline()
Dim OutSh As Worksheet, DataSh As Worksheet
Dim I As Long, IBlkC As Long, BlkLen As Long
'
Set OutSh = ThisWorkbook.Sheets("Merge")    '<< Il foglio dove si costruisce l' output
Set DataSh = ThisWorkbook.Sheets("Foglio1") '<< Il foglio con i dati di partenza
datacell = "A2"    '<< La cella da cui partono i dati
'
OutSh.Cells.ClearContents
For I = 1 To DataSh.Cells(Rows.Count, Range(datacell).Column).End(xlUp).Row
    If DataSh.Range(datacell).Offset(I - 1, 0) = "" Then
        IBlkC = 0
    Else
        DataSh.Range(datacell).Offset(I - 1, 0).Resize(1, Application. _
            WorksheetFunction.CountA(DataSh.Range(datacell).Offset(I - 1, 0).EntireRow)).Copy _
            Destination:=OutSh.Range(datacell).Offset(IBlkC, Application.WorksheetFunction. _
            CountA(OutSh.Range(datacell).Offset(IBlkC, 0).Resize(1, Columns.Count - 5)))
        IBlkC = IBlkC + 1
    End If
Next I
End Sub

Nel file contenente i tuoi dati inserisci un foglio chiamato "Merge"; poi inserisci la macro in un modulo standard del vba (sai come fare?), personalizza le istruzioni marcate << e prova ad eseguire.
Warning: il foglio Merge sara' preventivamente cancellato tutte le volte che esegui la macro.

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copia in modo un po' complesso...

Postdi ricky53 » 13/06/12 18:36

Ciao,
prima leggi quanto proposto da Anthony e poi ...
non mi è chiaro con quale regola vadano spostati i dati e, quindi, ti chiedo per l'esempio seguente di dirmi come vorresti che i dati fossero spostati.

11 - 22 - 33
12 - 23 - 34
13 - 24 - 35
14 - 25 - 36
15 - 26 - 37

111 - 122 - 133
112 - 123 - 134
113 - 124 - 135
114 - 125 - 136
115 - 126 - 137
116 - 127 - 138
117 - 128 - 139
118 - 129 - 140
119 - 130 - 141
120 - 131 - 142

1111 - 1122 - 1133
1112 - 1123 - 1134
1113 - 1124 - 1135

44 - 55 - 66
45 - 56 - 67
46 - 57 - 68
47 - 58 - 69
48 - 59 - 70
49 - 60 - 71
50 - 61 - 72
51 - 62 - 73

777 - 888 - 999
776 - 887 - 998
775 - 886 - 997
774 - 885 - 996
773 - 884 - 995
772 - 883 - 994
771 - 882 - 993
770 - 881 - 992
769 - 880 - 991
768 - 879 - 990
767 - 878 - 989
766 - 877 - 988

Prova la soluzione di Anthony sui miei numeri e vedi se la sua proposta va bene e, in tal caso, la regola la ricaverò dal codice di Anthony, altrimenti ... si vedrà come risolvere.

Grazie
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copia in modo un po' complesso...

Postdi Anthony47 » 13/06/12 23:13

Ricky, le prime 5 righe della seconda serie si affiancano alle 5 righe della prima serie; le righe 6-10 diventano nuove righe della serie di uscita.
Le 3 righe della terza serie si affiancano alle prime 3 righe di uscita.
Idem le 8 righe della quarta serie.
Le prime 10 righe della quinta serie si affiancano alle 10 righe della serie di uscita; le righe 11-12 diventano nuove righe della serie.

Questa e' stata la regola che ho implementato; se e' quella giusta lo lascio scrivere a dindog/Ale.

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copia in modo un po' complesso...

Postdi ricky53 » 13/06/12 23:19

Ciao,
grazie Anthony della risposta con le regole che hai applicato. Poco fa ho fatto le prove con la tua routine ed ho visto come avevi impostato il codice, la soluzione mi convince ... resta da vedere se è quello che si aspetta Dindog a cui vorrei chiedere:
a che genere di lavoro applichi quanto da te esposto?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copia in modo un po' complesso...

Postdi dindog » 19/06/12 21:46

Perfetta la risposta, e funzionante, grazie.
In realtà i dati che ho son dati di attivazione di un muscolo (son quindi dei voltaggi estrapolati con un elettromiografo) ed il disporli in quel modo mi è funzionale per analizzarli con Matlab.
A tal proposito, ne approfitto nuovamente...
Ve ne intendete anche di Matlab? Per me sarebbe più comodo riscrivere lo stesso procedimento descritto con la macro con Matlab, in modo tale che parto direttamente dal file txt grezzo, senza dover ricopiare i dati con la macro perfetta di cui sopra. Pur avendoci provato, non son riuscito a scrivere un equivalente alla macro con Matlab. Posso chiedervi ancora aiuto (ovvio, se conoscete Matlab)?

Grazie mille.
Ale
dindog
Newbie
 
Post: 4
Iscritto il: 13/06/12 11:46

Re: Copia in modo un po' complesso...

Postdi ricky53 » 19/06/12 22:18

Ciao,
grazie delle spiegazioni sulla provenienza dei dati e ... per avermi ricordato tutti gli aghi che mi hanno posizionato nelle braccia e nelle mani per farmi un'elettromiografia ...

Buon proseguimento.

Ciao da Ricky53


P.S.: mi spiace ma non ho conoscenze in Mathlab
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copia in modo un po' complesso...

Postdi Anthony47 » 20/06/12 01:30

La discussione su MathLab continua qui: viewtopic.php?f=18&t=95884
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copia in modo un po' complesso...

Postdi dindog » 20/06/12 06:22

L'ho scritto anche di la perché mi pareva più appropriato... Risposte?
:) grazie
dindog
Newbie
 
Post: 4
Iscritto il: 13/06/12 11:46


Torna a Applicazioni Office Windows


Topic correlati a "Copia in modo un po' complesso...":


Chi c’è in linea

Visitano il forum: Nessuno e 45 ospiti