Home › Forum › Domande su Excel VBA e MACRO › Copiare serie di dati con valore chiave in altro file e rinominare
Taggato: copia dati su altro file
-
AutorePost
-
-
Ciao a tutti, Bysal, Kris_9951, SID e tutti i partecipanti al forum!!
Volevo realizzare questa cosa: ( mi scuso se la spiegazione è un pò lunga, col file sarà più semplice!)
Al lancio della macro si apre msgbox per scelta del file da processare.
Scelto il file (nell’esempio il file che allego “dati completi.xls” ), trovare la cella chiave “DAP”
( nel file di esempio Cella CM31)
1 Selezionare questa cella e le 17 sottostanti ( quindi da CM31 a CM48 )
2 Selezionare dalla quinta cella a destra di quella dove trova il valore “DAP” ( nel file esempio Cella CR31 ), e le 17 sottostanti ( quindi da CR31 a CR48)
Le Selezioni 1 e 2 vanno copiate in un nuovo file chiamato “Report.xls” a partire dalla cella E1, quindi 2 serie di dati di 18 valori ciascuno, a partire dalle Celle E1- F1
3 Selezionare dall’ottava cella a destra rispetto a quella dove si trova il valore “DAP” ( nel file di esempio Cella CU31) e i sottostanti 17 valori
La selezione 3 va copiate nel file “Report.xls” a partire dalla Cella G1, quindi una serie di dati di 18 valori ciascuno, a partire dalla Cella G1
Ora si continua, con la seconda serie di 18 numeri che partono dopo 27 righe rispetto al primo valore della Selezione 3 ( Cella CU31) , che nell’esempio caricato corrisponde alla Cella CU58 , che andranno copiati ( sempre nel file “Report”) a partire dalla cella H1.
Si continua così con “multipli di 27” copiando nel file Report a seguire le precedenti (I1 L1 M1 etc), sino a che non trova più valori, dopo le famose 27 righe di intervallo tra una serie e l’altra. ( nell’esempio l’ultima serie inizia dalla Cella CU382 e dopo le famose 27 righe non trova più numeri).Trovare la cella chiave2 “DAP Tot” ( nel file di esempio “dati completi” Cella CM14 )
3 Selezionare questa cella e le 7 sottostanti
4 Selezionare la settima e ottava cella a destra rispetto a quella dove trova il valore “DAP Tot” ( nel file esempio Cella CT14 – CU14) e le 7 sottostantiLe selezioni 3 e 4 vanno copiate nel file “Report.xls” a partire dalla Cella A1, quindi i 3 gruppi di valori andranno copiati rispettivamente dalle celle A1 B1 e C1
Qui il ciclo finisce, Rinominando e Salvando il foglio usato del file “Report.xls”, usando per il nome del foglio, il valore di Cella EA3 più ultime 4 cifre Cella AC5 del file “dati completi.xls”( nell’esempio pippo2173)
A questo punto altra msgbox che chiede “ vuoi processare un altro file ?”
Se si, riprende il ciclo daccapo
Se no, chiude tutto.Allego i due file: dati completi.xls e Report.xls ( solo con i dati che interessano)
ciao a tutti!!
aqquila2
-
Ciao Da filedropper devi solo fare copia/incolla nella discussione del link che esce dopo aver fatto l’upload.
ti conviene aprire filedropper in un altra finestra del Browser e poi fare copia/incolla del link nella discussione
Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie-
file dati completi
-
Questa risposta è stata modificata 11 mesi, 3 settimane fa da
aqquila2.
-
Questa risposta è stata modificata 11 mesi, 3 settimane fa da
-
file Report
https://www.dropbox.com/scl/fi/xo52u4f9o5tgxnu2kicvd/Report.xls?dl=0&rlkey=2rkif4rxejrnqvzmirp6uhyx6
-
Questa risposta è stata modificata 11 mesi, 3 settimane fa da
aqquila2.
-
Questa risposta è stata modificata 11 mesi, 3 settimane fa da
-
Ciao Aqquila2,
vedi se va bene:
https://www.dropbox.com/sh/izi7masziamqr9x/AABRf2buELXULrH5UOsT0aFea?dl=0
Ti dico subito che bisognerebbe aggiungere qualche istruzione per gestire eventuali errori (nel caso selezioni un file sbagliato ecc…).
Intanto vedi se le operazioni che esegue sono corrette e poi provvedo a “pulire”
Fai sapere
-
ciao Kriss_9951
l’ho testato ma mi va in errore sul comando Save as
WkReport.SaveAs WK2.Path & “\” & “Report”, 61
eppure il file Report esiste….
…qualche controllo per errori ci andrebbe.. .Se il file scelto non ha la parola DAP uscire con la dicitura ” nessun dato valido trovato”
-
Questa risposta è stata modificata 11 mesi, 3 settimane fa da
aqquila2.
-
Questa risposta è stata modificata 11 mesi, 3 settimane fa da
-
-
Ciao Aqquila2,
ho inserito un controllo sulla stringa “DAP”.
Ho modificato l’istruzione del SaveAs.
Trovi tutto sempre al solito link
Fammi sapere se ricevi ancora errore.
-
ciao Kriss_9951
testato! mi sembra ok! salva correttamente i dati voluti!
Però alla fine del ciclo, quando processo un altro file mi chiede se voglio salvare il file ( sovrascrivere). Se dico si lui mi salva il file solo con l’ultimo copiaincolla fatto sul primo foglio, in pratica sovrascrive su quello esistente.
Io ho necessità di implementare il file Report con altri fogli originati dal processo di altri file dati, ognuno dei quali sarà rinominato con le stesse impostazioni del primo. ok?
ciao!!
aqquila2
-
-
Ciao Aqquila2,
purtroppo non ho capito
Puoi spiegarmelo ancora per favore?
-
ok, provo a spiegare!
il ciclo è corretto. Salva quei dati del file “dati completi.xls, sul file Report.xls , precisamente nel foglio che viene rinominato con le specifiche corrette.
A questo punto, io devo processare altri file ( es. “dati completi2.xls” poi “dati completi3.xls” e così via per nfile) e salvare i dati copiaincollando, sempre nello stesso file Report.xls, ma in un nuovo foglio ( che sarà rinominato a sua volta con gli stessi criteri.
Quindi alla fine avrò un file Report.xls, con nfogli , tutti nominati con quei criteri.
ok?
ciao
aqquila2
-
-
Fatto
Il file si chiama Macro2.xlsm
Fammi sapere se ho capito bene
-
ciao Kriss_9951
Un piccolo (spero!) problemino:
Quando la serie di 18 valori è completa e continua ( tutti e 18 ) il copiaincolla va ok!
Quando invece incontra delle celle vuote, nella serie dei 18, smette di copiare e anche se, per es., dopo due celle vuote ricominciano i valori, questi non vengono copiati ma passa direttamente all’altro intervallo (dei 27 famosi).
Cioè il sistema deve considerare le celle vuote ( nel range delle 18 celle) come “valori” e copiarli sul Report.
Chiedo poi una piccola modifica sul Rinomina foglio:
attualmente se utilizzo due volte lo stesso file, la macro lo processa e copiaincolla sul Report con lo stesso nome con l’aggiunta di_1 ( giustamente non possono esserci fogli con nome uguale!)
Si può aggiungere un “alert” , una msgbox che avvisi” il file è già stato processato. Vuoi esportare i dati comunque?”
Se si, lo processa e lo rinomina come fa ora (con aggiunta di _1)
Se no, esce dal ciclo.
ok? ciao!!
aqquila2
-
Buongiorno Aqquila2,
al solito link trovi il file con le modifiche richieste; si chiama Macro4.xlsm
Con questa versione, grazie al maestro Sid, puoi scegliere di processare anche più file in una sola volta e quindi non più necessariamente uno alla volta. Quando si apre l’esplora risorse tieni premuto il tasto Ctrl, seleziona tutti i file che vuoi processare e lui esegue il lavoro su tutti i file che hai scelto in un colpo solo
Fai sapere come va
-
ciao Kriss_9951 e SID!
purtroppo devo chiedere una modifica ( non sono stato abbastanza attento all’inizio!) sulla parte che prevedeva un intervallo ciclico di 27 righe dopo la prima serie di 18 valori.
Ho scoperto che invece questo intervallo è variabile ( su centinaia di file da processare!)
Quindi bisognerà fare riferimento alla chiave “DAP”, cioè teminata la prima copia dei primi 18 valori (con le stesse modalità di prima) la macro, invece di spostarsi giù di 27 righe, deve andare a cercare il prossimo valore “DAP” e fare in analogia col precedente intervallo.
Si va avanti così sino a che non trova più la chiave ” DAP”
Un altra piccola modifica sul Rinomina Foglio:
Invece che Cella EA3+ultime 4 di Cella AC5, il nome del foglio sarà:
valore di cella sotto quella che si chiama”/patient/name/last” ( che nell’esempio è alla Cella EA2, ma in altri file può essere in posizione diversa)+ le ultime 4 di Cella AC5 ( questo pezzo rimane invariato)
Vi ringrazio
e mi scuso per l’errore iniziale!!
ciao
aqquila2
-
Ciao Aqquila2,
facciamo una cosa alla volta.
Partiamo dall’intervallo che è variabile.
Allo stato attuale i valori da copiare sono disposti in 18 righe, poi ci sono 9 righe libere (per un totale di 27) e poi ricomincia il prossimo intervallo da 18.
Ora tu mi stai dicendo che i valori da copiare sono sempre e comunque 18 ma che tra un gruppo di 18 e l’altro la “distanza” è variabile, giusto?
Ho capito bene?
-
Scusa se sono di coccio ma lo richiedo ancora.
I dati da copiare sono sempre e comunque 18?
Cambia solo la “distanza” che c’è tra un intervallo da 18 e l’altro?
Se è così si può risolvere in altro modo ma devi confermarmi che i dati che vanno poi copiati restano sempre i famosi 18
-
Tra un intervallo da 18 e l’altro ci sono sempre celle vuote?
-
Perfetto. 👌
Mi alleghi un file che ha quelle “distanze” variabili tra un intervallo da 18 e l’altro?
Così posso usarlo per fare i Test
-
ciao ecco il file con le spaziature diverse!
ciao
aqquila2
-
-
L’ho aperto un attimo da cellulare ed ho visto che uno di quegli intervalli che dovrebbe essere da 18 in realtà non è da 18.
Non so dirti la posizione ma si vede ad occhio. Sono tutti da 18 tranne quello
È un errore?
-
si scusa , errore mio !!!
confermo che sono sempre intervalli dati di 18
riallego il file
ciao
aqquila2
-
-
Ciao Aqquila2,
prova adesso.
Il file lo trovi al solito link (Macro5.xlsm)
Fai sapere
-
ciao Kriss_9951
Ora copia e incolla, salva e rinomina regolarmente i dati come voluto!!
.
Succede solo una cosa ” strana” :
Se il file Report.xls esiste già, utilizza quello e va tutto ok.
Se invece non c’è , la macro lo dovrebbe creare e salvare ( nella stessa Cartella dove risiede la macro)
Invece va in debug sulla riga
<!– [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>14</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]–><!– [if gte mso 9]><xml>
<w:LatentStyles DefLockedState=”false” LatentStyleCount=”156″>
</w:LatentStyles>
</xml><![endif]–><!– [if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Tabella normale”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:””;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:”Times New Roman”;
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]–><span lang=”EN-GB” style=”font-size: 12.0pt; font-family: ‘Times New Roman’; mso-fareast-font-family: ‘Times New Roman’; mso-ansi-language: EN-GB; mso-fareast-language: IT; mso-bidi-language: AR-SA;”>WkReport.SaveAs WK2.Path & “\” & “Report”, 56</span>Se si riesce a risolvere bene, altrimenti si farà in modo di crearlo già, prima di lanciare la macro!!
Grazie!! Ottimo lavoro cmq…
ciao
aqquila2
-
-
Buongiorno Aqquila2,
non mi sono smazzato per lasciarlo in Debug
Peró è strano che non ho ricevuto il problema…
Mi posti uno screenshot sul debug?
Non capisco la riga perché quando incolli il testo si porta dietro anche il codice HTML
-
Excel 2003??
Vanno ancora in giro gli Excel 2003?
😂😂
Ok! Resto in attesa di info 👍
-
-
Kriss_9951!
Si … abbiamo ancora la versione 2003… per grazia ricevuta…
Le indicazioni … dall’alto… sono ” Ma usate LibreOffice..!!!”
Cmq … è un problema banale ( non costa nulla creare già il file Report !!!)
Se non è possibile ovviare va bene così…!!!
…
ciao
-
-
Ho capito.
Mi fai vedere anche la riga di codice?
Forse si risolve cambiando un numero
-
-
Ci siamo accavallati con le risposte.
Prova a cambiare quel 56 con 43 e vedi se va bene per tutte le versioni
-
Indica l’XlFileFormat
il formato del file in base alla versione di Excel.
Il numero 43 rappresenta il file .xls della versione di Excel 95/97
Per informazione:
se è una questione di soldi dí agli scienziati che stanno sopra che su EBay si comprano le licenze Originali di Office 2016 ad 1,99€ l’una
-
Riferirò….lassù…
<!– [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>14</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]–><!– [if gte mso 9]><xml>
<w:LatentStyles DefLockedState=”false” LatentStyleCount=”156″>
</w:LatentStyles>
</xml><![endif]–><!– [if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Tabella normale”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:””;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:”Times New Roman”;
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]–>Una novità:
<p class=”MsoNormal”>Ho processato circa 200 file e sono andati tutti bene …tranne uno!!</p>
<p class=”MsoNormal”>Questo file ha la sola particolarità di essere lunghissimo e quindi succede che quando va ad incollare, arriva all’ultima colonna disponibile di Excel (Colonna IV) delle 256…. sul file Report.xls e va in errore!!</p>
<p class=”MsoNormal”>Per ora ho risolto.. sdoppiando in due il file originario…</p>
<p class=”MsoNormal”>A meno che non si possa aggiungere al codice una istruzione che, arrivato all’ultima colonna disponibile, vada “ a capo” riprendendo ad incollare dalla Cella G22</p>
Che dici?ciao
aqquila2
-
-
Tutto si può fare, basta solo riuscirci 👍
Oggi provo a farlo.
Mi invii una copia del file lunghissimo ?
P.s. bastava una versione più aggiornata di Excel e non avevi questo problema 😉
-
Ecco il file ” incriminato” !!
Ne ho trovato altri due, nel frattempo,… lunghissimi anche loro.
ciao!!
aqquila2
-
-
Ciao Aqquila2,
fatto
Ora riesce a reggere fino a tre file di dati (quel file era così lungo che due file non sono bastate)
Trovi tutto al solito link (Macro6.xlsm)
Fai i dovuti controlli!
-
Perfetto!
Resto a disposizione per qualsiasi altra cosa
A presto!!
-
ciao Kriss_9951
ho necessità di fare una aggiunta ai dati da copiare!
Sempre dal file dati completi_99.xls al file Report.xls che allego
Fermo restando tutto il resto della macro ( che va bene) aggiungere, nella copi, il dato che si trova 18 righe sotto e 11 colonne a destra del primo “DAP” ( nell’esempio il primo “DAP” si trova in Cella CM31 e il nuovo dato da copiare in Cella CX49).
Questo dato va copiato nel file Report.xls nella Cella E19-F19 ( unisci le celle) ( quindi dopo la serie di 18 di prima).
L’altra copia riguarda invece il dato che si trova 18 righe sotto e 16 colonne a destra del primo “DAP” ( nell’esempio Cella DC49)
Questo dato va copiato in Report.xls nella Cella G19 . Si continua a copiare col dato successivo ( nell’esempio Cella DC76) che verrà copiato in Report.xls nella Cella H19
Si continua così sino a che non trova più dati ( come prima)
Si possono formattare le nuove celle di Report.xls con “testo a capo e centrate”?
Grazie e ciao
aqquila2
-
-
-
… dimenticato… un altra cella da copiare!!
dal file dati completi_99.xls : il dato “/device/serial” che si trova in Cella E2, più quello sotto ( Cella E3)
da copiare in Report.xls , rispettivamente in Cella A12 e B12
Mi scuso per la dimenticanza
ciao
aqquila2
-
-
Fatto
Trovi tutto al solito link (Macro7.xlsm)
Fai sapere se va bene
-
ciao Kriss_9951
fatto alcuni test:
ok per copia del dato in A12 e B12.
ok per copia del dato in E19-F19 ( celle unite)
Non mi torna invece la copia dei dati che trova 18 righe sotto e 16 colonne a destra rispetto alla chiave “DAP”
Cerco di spiegare: Nel file di esempio va perfetto. Se però riempio di valori le celle che stanno tra un dato e l’altro (abcdefgh-ilmno-pqrst-uvzx_jjjjj_normal) ( Cioè nell’esempio tra Cella DC49 e DC76) allora la copia viene sfalsata.
La prima copia va bene .Trova “DAP” , calcola 18 sotto e 16 a destra prende il dato e lo copia in Report.
Poi va a cercare il prossimo “DAP” e fa la stessa cosa, e così via.
Se invece, in questo intervallo, trova dei valori, ( che, nei file veri, ci sono ) allora sballa tutto.
Ho fatto una verifica ( nel file esempio) : sotto il dato di Cella DC49 ho messo un valore (per es :2) ed ho lanciato la macro: Risultato: Il primo dato lo copia regolare ( quello di Cella DC49) il secondo che copia ( invece di andare a Cella DC76) è la cella DC50 ( quella dove ho messo 2)
non mi spiego….
-
-
Ciao Aqquila2,
<p style=”text-align: left;”>
“Se invece in questo intervallo trova dei valori (che nel file vero ci sono) allora sballa tutto”</p>
e ci credo che sballa tutto…Il problema sta tutto in “…che nel file vero ci sono…”.
Devi aiutami ad aiutarti. Se nel file vero ci sono dei valori in mezzo ai valori che devo considerare, tu quei valori devi lasciarli (puoi sostituirli con valori fittizi ma lasciali perché mi servono per capire come muovermi).
La morale della favola è che con questa semplice omissione ho buttato X tempo.
Se mi invii un file VERITIERO provo dargli un secondo sguardo
-
Ho caricato al solito link il file Macro8.xlsm
Fai sapere se va bene 👍 👍
-
ciao Kriss_9951
chiedo scusa per la cattiva gestione del file inviato. Dovremo sempre ricordarci ( noi utenti) di essere più chiari possibile, sia nella spiegazione delle cose che si vogliono ottenere, sia negli allegati da inviare.
Credi, non è semplice, per chi non è ..ferrato in materia… !!!
Ho testato l’ultima versione ed è ok! Tutto va al posto giusto senza errori!
Continuerò ad usarla e vedremo!!!
Ringrazio per la pazienza e la disponibilità, e sopratutto per la qualità!
ciao
aqquila2
-
-
Nessun problema
Io ho la passione per il VBA quindi ci tengo che tutto funzioni bene
Per quanto riguarda la “qualità“ posso garantirti che se il maestro Sid e BySalv vedessero il codice avrebbero moooolto da ridire (non lo nego) ma preciso che a seguito dell’ultimo aggiornamento che mi hai chiesto ho preferito più “metterci in toppa” che cancellare tutto e riscriverlo da capo.
Ad ogni modo il risultato finale viene sempre raggiunto 👍
Fai sapere se con i file originali va tutto bene 👍
Alla prox!!
-
-
AutorePost
- Devi essere connesso per rispondere a questo topic.