Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro copia/incolla dati in Excel

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

Macro copia/incolla dati in Excel

Postdi ika89 » 04/04/17 10:38

Buongiorno,

avrei bisogno di aiuto per creare una macro in Excel, che mi permetta di copiare una serie di dati da file diversi ed incollarli in un unico foglio di lavoro. Ho letto le conversazioni precedenti senza trovare qualcosa di funzionante, spero tuttavia di aver capito bene che informazioni vi servano e di spiegarmi con sufficiente chiarezza.

- I file sono tutti in una stessa cartella, che contiene solo file Excel da cui estrapolare i dati
- I dati sono sempre presenti nel foglio1 (non ho mai modificato il nome di tali fogli)
- I dati sono presenti negli intervalli tra le righe 35 e 47 (incluse) delle colonne A, F, H
- Alcune celle di queste colonne e queste righe sono vuote, e non andranno copiate
- I dati copiati vanno incollati rispettivamente nelle colonne B, C, D, a partire dalla riga 3 ed una riga sotto l'altra
- Il file di destinazione è nominato Riassunto, sempre foglio1 in quanto non modificato
- I dati sono sia numerici che in lettere. Vanno copiati esattamente con lo stesso formato, evitando ad esempio che uno 0 iniziale di un numero si cancelli

Vi ringrazio per qualsiasi suggerimento, sto cercando di leggere quante più istruzioni possibili ma è la prima volta che mi approccio alle macro e non mi riesce molto facile.
ika89
Newbie
 
Post: 6
Iscritto il: 04/04/17 10:25

Sponsor
 

Re: Macro copia/incolla dati in Excel

Postdi alfrimpa » 04/04/17 15:35

Ciao Ika

Prendi due/tre file ed un altro file in cui mostri come deve essere il risultato finale zippa il tutto ed allega tutto quanto (attraverso un sito di file sharing) qui sul forum.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Macro copia/incolla dati in Excel

Postdi ika89 » 05/04/17 10:50

Ho usato WeTransfer, questo il file per il download: https://we.tl/iRP9ZUJpno . Non so se si possa ottenere un risultato esattamente così, essendo i file tanti ma non un numero enorme anche dettagli diversi (la non cancellazione delle righe vuote dell'intervallo copiato per esempio) posso poi sistemarli io a mano sfruttando le altre proprietà di Excel.

Grazie mille in anticipo
ika89
Newbie
 
Post: 6
Iscritto il: 04/04/17 10:25

Re: Macro copia/incolla dati in Excel

Postdi Marius44 » 05/04/17 16:54

Ciao Ika
Sembra un problema abbastanza complesso e la cui spiegazione ha bisogno di qualche riga in più. Not panic!
Ho utilizzato il seguente codice (da inserire - ovviamente - nel file Riassunto)
Inserire nel Modulo di Foglio1
Codice: Seleziona tutto
Option Explicit
Option Compare Text

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a As Long, i As Long, j As Long, nr As Long, ur As Long
Dim cc As String, qq As String, pp As String
Dim p, f, s, cod, qnt, prz
If Not Intersect(Target, Range("A1")) Is Nothing Then
    ur = Sheets(1).Cells(Rows.Count, "B").End(xlUp).Row: If ur < 3 Then ur = 3
    Range("f3:h" & ur).ClearContents
    a = 3
    nr = Sheets(2).Cells(Rows.Count, "B").End(xlUp).Row
    If nr < 3 Then Exit Sub
    For i = 2 To nr
    'definisce termini per la funzione di ricerca
        p = Sheets(2).Cells(2, 1).Text 'percorso (path)
        f = Sheets(2).Cells(i, 2).Text      'nome file
        s = "Foglio1"
        For j = 35 To 49
            cc = "A" & j: cod = GetValue(p, f, s, cc)
            If cod = 0 Then Exit For
            qq = "F" & j: qnt = GetValue(p, f, s, qq)
            pp = "H" & j: prz = GetValue(p, f, s, pp)
            With Sheets(1)
                Range("F" & a) = cod          'da aggiustare con "B"
                Range("G" & a) = qnt          'da aggiustare con "C"
                Range("H" & a) = prz          'da aggiustare con "D"
                a = a + 1
            End With
        Next j
    Next
End If
End Sub

Da inserire nel Modulo di Foglio2
Codice: Seleziona tutto
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim fs, f, fn, f1, s, sf
Dim ur As Long, a As Long
If Not Intersect(Target, Cells(1, 4)) Is Nothing Then
    ur = Cells(Rows.Count, "B").End(xlUp).Row: If ur < 2 Then ur = 2
    Range("B2:B" & ur).ClearContents
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(Cells(2, 1).Value)
    Set fn = f.Files
    a = 1
    For Each f1 In fn
        a = a + 1
        Cells(a, 2) = f1.Name
    Next
End If
End Sub

Da inserire in un Modulo standard
Codice: Seleziona tutto
Option Explicit

Public Function GetValue(path, file, sheet, ref)
Dim arg As String
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File non trovato"
        Exit Function
    End If
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
      Range(ref).Range("A1").Address(, , xlR1C1)
    GetValue = ExecuteExcel4Macro(arg)
End Function


Non allego il file per ... farti lavorare un po' :lol: :lol:
Prova e fammi sapere. Se hai bisogno son qui.

Ciao,
Mario
Marius44
Utente Senior
 
Post: 549
Iscritto il: 07/09/15 22:00

Re: Macro copia/incolla dati in Excel

Postdi ika89 » 05/04/17 22:03

Bellina l'idea di farmi lavorare un poco, approvo in pieno! Temo tu mi abbia un poco sopravvalutata però...

Allora, descrivo passo passo così vediamo quante cose riesco a sbagliare in un copia-incolla.
Apro Riassunto ed apro Microsoft Visual Basic. In alto a sinistra doppio click su Foglio1 e ci incollo il primo codice. Doppio click su Foglio2 e ci incollo il secondo codice. Doppio click su Modulo1 (che presumo essere il modulo standard che citavi) e ci incollo il terzo.

Chiudo tutto salvando. Riapro, doppio click su una cella a caso a mi si riapre Microsoft Visual Basic. Errore di compilazione: Sub o function non definita. E mi evidenzia in giallo nel foglio1 la riga Private Sub Worksheet_SelectionChange(ByVal Target As Range) ed in blu il primo dei GetValue sempre di quel foglio.

Informatica dovevo studiare, non economia. Sarà una luuuuuuunga conversazione la nostra Mario! ;)
ika89
Newbie
 
Post: 6
Iscritto il: 04/04/17 10:25

Re: Macro copia/incolla dati in Excel

Postdi Marius44 » 05/04/17 23:01

Ciao Ika89
a me piace chiaccherare :D
Partiamo dal fondo: non è necessario sapere di informatica, ma interessarsene per apprendere è fondamentale. Anch'io ho studiato economia e (se guardi il numero - non è la taglia delle scarpe - che c'è nel mio nick capirai la mia età e, ai miei tempi, quasi non si sapeva cose fosse l'informatica) ma poi mi sono appassionato a Excel e VBA.

Ovviamente mi aspettavo il blocco perchè non ti avevo detto tutto. Se tu avessi masticato un po' di più di VBA ci saresti arrivato da solo, altrimenti .... eccoci qua.

Adesso andiamo con ordine:
1°) nel Foglio2 nella cella A2 devi scrivere il percorso ESATTO per arrivare alla Cartella contenente i files-fatture; faccio un esempio banale che dovrai adattare al tuo percorso: C:\users\desktop\Nuova cartella\Fatture
Pertanto devi crearti una cartella sul Desktop (che io ho chiamato Nuova cartella) e metterci dentro il tuo file Riassunto.
Dentro la suddetta cartella devi mettere un'altra cartella (che io ho chiamato Fatture) in cui inserire tutti i file relativi alle fatture.

2°) fatto quanto sopra (cioè creare le due cartelle e scrivere nella cella A2 di Foglio2 il percorso come detto), seleziona, sempre nel Foglio2, la cella D1. Come per incanto - se hai seguito quanto detto - vedrai elencare tutti i nomi dei file nella colonna B

3°) adesso vai al Foglio1 e seleziona la cella A1. Mi ripeto: "come per incanto" vedrai elencare i dati richiesti nelle colonne F, G e H (come ti ho scritto nella macro basterà cambiare la lettera per scrivere i dati dove ti pare) mentre le celle vuote non saranno copia/incollate.

Prova e ... a risentirci.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 549
Iscritto il: 07/09/15 22:00

Re: Macro copia/incolla dati in Excel

Postdi ika89 » 06/04/17 21:02

Mario, sappi che ti adoro. E un poco mi adoro, ammetto, perché aver capito come e dove incollare il tuo codice per me è una sufficiente conquista! :)
I dati sono magicamente comparsa, e ad una prima occhiata sembra perfetto. Vedrò di controllare bene che ci sia tutto, intanto ti ringrazio. Quando è apparso tutto, sembravo una bambina che scarta i regali di Natale! :)

Buona serata,

Monica
ika89
Newbie
 
Post: 6
Iscritto il: 04/04/17 10:25

Re: Macro copia/incolla dati in Excel

Postdi Marius44 » 07/04/17 06:07

Ciao Monica
intanto ho scoperto che sei una "lei" (certo dal nick non si poteva capire e le "lei" che bazzicano i Forum non sono tante) ma, con un po' di fantasia, ci sarei dovuto arrivare (...ika :) ).

Son contento che tutto funzioni. Continua a fare prove e, ma spero di no, al caso ... siam qui.

Grazie per il riscontro e ciao,
Mario
Marius44
Utente Senior
 
Post: 549
Iscritto il: 07/09/15 22:00

Re: Macro copia/incolla dati in Excel

Postdi ika89 » 11/04/17 08:36

Rieccomi Mario,

ebbene si! Ammetto che, una volta tanto, rappresento in pieno lo stereotipo delle "lei": il computer lo so usare benissimo, finché funziona.
Ho un ultimo piccolo cruccio: capita nei documenti che vi siano delle righe vuote mescolate a quelle con dati presenti. Con il codice che mi hai gentilmente dato, alla prima riga vuota il resto del documento viene "saltato" e si passa al successivo. C'è un modo per far copiare ed incollare anche i dati presenti dopo una riga vuota?

Grazie mille ancora.
ika89
Newbie
 
Post: 6
Iscritto il: 04/04/17 10:25

Re: Macro copia/incolla dati in Excel

Postdi Marius44 » 11/04/17 15:00

Ciao Monica

Purtroppo ho cestinato il file sul quale avevo fatto le prove. Poco male, ci arriviamo lo stesso (almeno spero)
Se prendi la prima macro di quelle elencate sopra ad un certo punto ci stanno queste righe di codice:
Codice: Seleziona tutto
        For j = 35 To 49
            cc = "A" & j: cod = GetValue(p, f, s, cc)
            If cod = 0 Then Exit For                         '<<<<< questa riga da correggere
            qq = "F" & j: qnt = GetValue(p, f, s, qq)
            pp = "H" & j: prz = GetValue(p, f, s, pp)
            With Sheets(1)
                Range("F" & a) = cod          'da aggiustare con "B"
                Range("G" & a) = qnt          'da aggiustare con "C"
                Range("H" & a) = prz          'da aggiustare con "D"
                a = a + 1
            End With
       Next j                                                     '<<<<<< questa riga da correggere
 

Concentrati sulle righe dove ho scritto da correggere.
Sostituisci Exit For con Goto 1
Alla fine sostituisci Next j con 1 Next j Ovvero, ciò che è lo stesso, premetti 1 a Next j

Se ho capito bene la tua esigenza dovrebbe funzionare.
Fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 549
Iscritto il: 07/09/15 22:00

Re: Macro copia/incolla dati in Excel

Postdi ika89 » 13/04/17 08:02

Ciao Mario,

semplicemente perfetto. Funziona esattamente come speravo. Mi hai salvata! :)

Monica
ika89
Newbie
 
Post: 6
Iscritto il: 04/04/17 10:25


Torna a Applicazioni Office Windows


Topic correlati a "Macro copia/incolla dati in Excel":


Chi c’è in linea

Visitano il forum: Maury170419 e 36 ospiti