VBA creazione Matrice Excel
Hai un problema con Excel? 
VBA - creazione Matrice Excel
di VeroRV (utente non iscritto) data: 22/03/2016 16:40:54
Ciao Ragazzi.. sono poco esperta di VBA.. v spiego cosa mi serve.. Ho 12 file excel (solo x iniziare) con all'interno 8 fogli stessa struttura.. Devo creare un file excel "matrice" con tutti i dati presenti nei 12 file, divisi in 8 fogli.. Ho trovato una discussione sul vs forum (vedi link excelvba.it/Forum/story/Excel_e_gli_applicativi_Office/Importare_dati_da_files_chiusi_su_file_riepilogo.html), ma ho problemi quando pesco il secondo file, perchè questa macro, anzichè accodare i dati del 2° file, li copia accanto
(vedi comando --> n = n + Columns("AD").Column 'Rappresenta la colonna AD dell'intervallo preso in esame) --> come faccio a dirgli di non copiare accanto, ma bensì sotto ??? Grazieee mille!!!!!
???? --> n = n + Columns("AD").Column 'Rappresenta la colonna AD dell'intervallo preso in esame |
di alfrimpa data: 22/03/2016 17:57:27
Ciao VeroRV
Possiamo provare ma dovresti allegare dei file di esempio con dati fittizi e mostrare nel file "Matrice" come vuoi siano disposti i dati che si andranno a copiare dai file precedenti.
Alfredo
di patel data: 22/03/2016 18:58:04
piu o meno così
Sub Riepilogo()
Dim FD As FileDialog, MyRange As Range, File As Variant, sh As Byte, LC As Integer, _
W1 As Workbook, W2 As Workbook, n As Byte
Set MyRange = [a1:ad34]
Set W1 = ActiveWorkbook
n = 1
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.AllowMultiSelect = True 'posso selezionare più files
.Show
Application.ScreenUpdating = False 'Conviene spegnere lo schermo
For Each File In .SelectedItems 'Il ciclo esterno scorre tutti i files selezionati
Workbooks.Open File
Set W2 = ActiveWorkbook
For sh = 1 To Worksheets.Count 'Il ciclo interno scorre tutti i fogli di ogni singolo file
' In ogni foglio prende l'intervallo A1:AD34 e lo incolla nel corrispondente foglio del file di riepilogo
W2.Worksheets(sh).Range(MyRange.Address).Copy
W1.Worksheets(sh).Cells(n, 1).PasteSpecial xlPasteAll '<<<<<<<<<<<<<<<<<<<<<<<<
Next
' Adesso trovo la colonna su cui posizione il successivo intervallo di dati
n = n + 35 '<<<<<<<<<<<<<<<<<<<<<<<
Application.CutCopyMode = False 'svuoto la memoria dagli appunti
W2.Close savechanges:=False
Next
End With
Application.ScreenUpdating = True
|
di VeroRV (utente non iscritto) data: 23/03/2016 08:09:11
ciao e grazie ad entrambi.. x Alfredo --> tra poco allego un file di esempio.
mentre per patel --> questo codice l'ho trovato anche io, ho solo problemi con il comando
' Adesso trovo la colonna su cui posizione il successivo intervallo di dati
--> n = n + 35 '<<<<<<<<<<<<<<<<<<<<<<<
Perché io non voglio scrivere il 2° file su altre colonne, ma vorrei che il 2° file scriva i dati in cascata sotto i dati del 1° file..
di patel data: 23/03/2016 08:20:51
io ti ho postato il codice modificato proprio per incolonnare, ovviamente non l'ho provato in mancanza del tuo file
di VeroRV (utente non iscritto) data: 23/03/2016 08:33:20
ok, ora incolonna.. ma come faccio a non mettere n=n+35, ma bensì n=n+UltimaRigaScritta??
ed inoltre, come posso importare in una nuova colonna "E", quando copio sotto il 2° file, un valore fisso per singolo file (tipo un sequenziale o se possibile, l'inizio del nome file Excel??)
di patel data: 23/03/2016 08:50:16
non hai ancora allegato il file, basta consulenze al buio
di VeroRV (utente non iscritto) data: 23/03/2016 09:12:32
fatto..
di patel data: 23/03/2016 10:06:01
il numero delle righe è fisso ?
di VeroRV (utente non iscritto) data: 23/03/2016 10:08:21
perchè il foglio Matrice deve avere 2 fogli (F1 e F2) con i dati originali dei fogli F1 e F2 dei file Partenza1 e Partenza2..
di patel data: 23/03/2016 10:10:01
il numero delle righe è fisso ?
di VeroRV (utente non iscritto) data: 23/03/2016 10:16:06
no, varia.. ma il numero di colonne è fisso.. cmq ho risolto aggiungendo una variabile x nel ciclo FOR e mettendo
n=n+x
anzichè n=n+35
--> come posso aggiungere una colonna con il nome file, tipo nella colonna E ??
di patel data: 23/03/2016 10:19:52
nel file non hai messo la macro che stai usando
di VeroRV (utente non iscritto) data: 23/03/2016 10:39:18
ECCO LA MACRO..
ho solo problemi con il range..
per prova ho provato a fare da
Set MyRange = [a1:d10]
ma a me servirebbe da A1 a D(fino alla fine righe)
Option Explicit
Sub Riepilogo()
Dim FD As FileDialog, MyRange As Range, File As Variant, sh As Byte, LC As Integer, _
W1 As Workbook, W2 As Workbook, n As Byte, x As Byte, y As Byte
Set MyRange = [a1:d10]
Set W1 = ActiveWorkbook
n = 1
x = 1
y = 1
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.AllowMultiSelect = True 'posso selezionare più files
.Show
Application.ScreenUpdating = False 'Conviene spegnere lo schermo
For Each File In .SelectedItems 'Il ciclo esterno scorre tutti i files selezionati
y = n
Workbooks.Open File
Set W2 = ActiveWorkbook
For sh = 1 To Worksheets.Count 'Il ciclo interno scorre tutti i fogli di ogni singolo file
' In ogni foglio prende l'intervallo A1:AD34 e lo incolla nel corrispondente foglio del file di riepilogo
W2.Worksheets(sh).Range(MyRange.Address).Copy
W1.Worksheets(sh).Cells(n, 1).PasteSpecial xlPasteAll '<<<<<<<<<<<<<<<<<<<<<<<<
W1.Worksheets(sh).Cells(n, "N").Value = File '--> QUI METTO NELLA RIGA DI INTESTAZIONE COPIATA NELLA MATRICE IL NOME PERCORSO + NOME FILE
x = x + 1
Next
' Adesso trovo la colonna su cui posizione il successivo intervallo di dati
n = n + x '<<<<<<<<<<<<<<<<<<<<<<<
Application.CutCopyMode = False 'svuoto la memoria dagli appunti
W2.Close savechanges:=False
Next
End With
Application.ScreenUpdating = True
End Sub |
di Albatros54 data: 23/03/2016 11:12:14
prova ad aggiungere le due righe di codice sotto
priga = Range("A" & Rows.Count).End(xlUp).Row
Set MyRange = Range("a1", "D" & priga) |
di VeroRV (utente non iscritto) data: 23/03/2016 14:42:23
Grazie mille a chi mi è stato di aiuto.. allego codice VBA utile e che funziona..
Obiettivo --> avevo 20 file con la stessa struttura, divisi per periodo ed ognuno con 10 fogli --> dovevo creare un unico file "matrice" con all'interno 10 fogli, sui quali dovevo copiare i dati di 20 file excel..
Questa macro accoda in un file Matrice, tutti i dati dello stesso Foglio (devono avere lo stesso nome) dei vari file excel !!
Option Explicit
Sub Riepilogo()
Dim FD As FileDialog, MyRange As Range, File As Variant, SH As Byte, LC As Integer, _
W1 As Workbook, W2 As Workbook, n As Long, x As Byte, y As Long, priga As Long
'Set MyRange = [a1:m6]
Set W1 = ActiveWorkbook
n = 1
x = 1
y = 1
priga = 1
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.AllowMultiSelect = True 'posso selezionare più files
.Show
Application.ScreenUpdating = False 'Conviene spegnere lo schermo
For Each File In .SelectedItems 'Il ciclo esterno scorre tutti i files selezionati
Workbooks.Open File
Set W2 = ActiveWorkbook
For SH = 1 To Worksheets.Count 'Il ciclo interno scorre tutti i fogli di ogni singolo file
' In ogni foglio prende l'intervallo A1:Mxxxx e lo incolla nel corrispondente foglio del file di riepilogo
'Set MyRange = [a1:m12]
priga = Range("A" & Rows.Count).End(xlUp).Row
Set MyRange = Range("a1", "m" & priga)
W2.Worksheets(SH).Range(MyRange.Address).Copy
W1.Worksheets(SH).Cells(n, 1).PasteSpecial xlPasteAll '<<<<<<<<<<<<<<<<<<<<<<<<
W1.Worksheets(SH).Cells(n, "N").Value = File '--> qui scrive nella riga di intestazione di ogni file importato "nella matrice" il percorso + nome file
x = x + 1
Next
' Adesso trovo la colonna su cui posizione il successivo intervallo di dati
n = n + priga '<<<<<<<<<<<<<<<<<<<<<<<
Application.CutCopyMode = False 'svuoto la memoria dagli appunti
W2.Close savechanges:=False
Next
End With
Application.ScreenUpdating = True
End Sub |
Vuoi Approfondire?