| | Post: 75 | Registrato il: 22/12/2017
| Città: MILANO | Età: 44 | Utente Junior | Excel2016 | | OFFLINE | |
|
29/03/2018 08:13 | |
Ciao a tutti,
avrei bisogno del vostro aiuto se possibile...
ho un file 1 contenente il foglio "Matrice" contenente nella colonna A dei numeri alfanumerici. Nelle colonne B-C-D dei dati
Avrei la necessità che nel file 2 contenente il foglio "Importazione" venissero copiati nella colonna B-C-D i dati contenuti nelle colonne B-C-D del foglio "Matrice" mettendo in relazione i numeri alfanumerici.
I numeri alfanumerici del foglio "Matrice" sono gli stessi del foglio "Importazione". Può però capitare che nel foglio "Matrice" siano presenti più numeri rispetto a quelli del foglio "Importazione" e che siano ordinati in maniera differente ( ad es. in ordine alfabetico)
Mi servirebbe una Macro perchè se viene usata una formula, i dati contenuti nelle celle non si possono copiare / incollare in nessun altro file se non tramite il comando "incolla speciale"
Vi allego un file d'esempio sperando di essere più chiara
Grazie moltissimo
[Modificato da Chiara-ExcelForum 29/03/2018 08:14] |
|
| | Post: 4.066 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
29/03/2018 09:13 | |
prova questa macro da mettere nel file Importazione
Sub importa() ' da mettere nel file importazione
Set sh1 = ThisWorkbook.Sheets("Importazione")
LR1 = Cells(Rows.Count, "A").End(xlUp).Row
Set sh2 = Workbooks.Open("F:\Download\Matrice.xlsx").Sheets("Matrice")
LR2 = Cells(Rows.Count, "A").End(xlUp).Row
For r = 2 To LR1
num = sh1.Cells(r, "A")
For rr = 2 To LR2
If sh2.Cells(r, "A") = num Then
sh2.Range("B" & rr & ":D" & rr).Copy sh1.Cells(r, "B")
End If
Next
Next
End Sub
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 75 | Registrato il: 22/12/2017
| Città: MILANO | Età: 44 | Utente Junior | Excel2016 | | OFFLINE | |
|
29/03/2018 10:26 | |
Ciao Patel5,
grazie per la risposta ma credo di non essermi spiegata bene.
I dati che vorrei venissero copiati nel foglio "importazione", dovrebbero essere solamente quelli il cui numero alfanumerico sia presente sia nel foglio "matrice" che nel foglio "importazione"
In pratica la macro dovrebbe confrontare le colonne A del foglio "MAtrice" e "Importazione" e dopo aver individuato i numeri in comune, copiare nelle colonne B-C-D del foglio "importazione" i dati.
Caso pratico
Foglio Matrice
N° Colonna B Colonna C Colonna D
1 prova2
2 prova5
3 prova7
Foglio Importazione
N° Colonna B Colonna C Colonna D
3 prova7
1 prova2
Grazie
|
| | Post: 5.359 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
29/03/2018 11:54 | |
Ciao Chiara con un Cerca.vert() andrebbe bene?
Ciao By Sal se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 76 | Registrato il: 22/12/2017
| Città: MILANO | Età: 44 | Utente Junior | Excel2016 | | OFFLINE | |
|
29/03/2018 11:58 | |
.....
Non saprei come funziona.... |
| | Post: 77 | Registrato il: 22/12/2017
| Città: MILANO | Età: 44 | Utente Junior | Excel2016 | | OFFLINE | |
|
29/03/2018 12:05 | |
Ciao, sono andata a documentarmi sul codice "Cerca.vert()" e ho visto che dev'essere inserito in una formula. Invece a me servirebbe una Macro |
| | Post: 3.686 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/03/2018 12:07 | |
Ciao Chiara
Certamente un CERCA.VERT() sarebbe la soluzione più banale e semplice (guarda la guida in linea di Excel su questa funzione) ma volndo sparare ad un moscerino con un bazooka (e visto che l'avevo scritta non pensando al CERCA.VERT() prova questa macro.
vb Sub ScriviSuFileImportazioni()
Dim ur As Long
Dim rng As Range
Dim rngRicerca As Range
Dim cel As Range
ur = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range("a2:a" & ur)
For Each cel In rng
With Workbooks("Importazione.xlsx").Sheets("Importazione").Range("A:A")
Set rngRicerca = .Find(What:=cel.Value, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not rng Is Nothing Then
rngRicerca.Offset(0, 1).Value = cel.Offset(0, 1).Value
rngRicerca.Offset(0, 2).Value = cel.Offset(0, 2).Value
rngRicerca.Offset(0, 3).Value = cel.Offset(0, 3).Value
End If
End With
Next cel
End Sub
La macro deve essere inserita nel file Matrice ed anche Imposrazioni deve essere aperto.
Però concordo con by Sal; basta un cerca.vert()
Alfredo |
| | Post: 3.687 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/03/2018 12:09 | |
Chiara-ExcelForum, 29/03/2018 12.05:
Ciao, sono andata a documentarmi sul codice "Cerca.vert()" e ho visto che dev'essere inserito in una formula. Invece a me servirebbe una Macro
Si il cerca.vert è una funzione che deve essere inserita in una cella e fa quello che hai chiesto.
Perché non puoi usarla?
Perché necessiti di una macro?
[Modificato da alfrimpa 29/03/2018 12:09]
Alfredo |
| | Post: 78 | Registrato il: 22/12/2017
| Città: MILANO | Età: 44 | Utente Junior | Excel2016 | | OFFLINE | |
|
29/03/2018 12:23 | |
Mi servirebbe una Macro perchè se viene usata una formula, i dati contenuti nelle celle non si possono copiare / incollare in nessun altro file se non tramite il comando "incolla speciale" ma soprattutto non è possibile utilizzare il filtro
E poi temo, considerato il grande numero di dati, che una volta che apro il file, impieghi parecchio tempo prima di aggiornare il foglio, mentre se ho una macro da mandare in esecuzione, posso decidere io quando e se è neccessario eseguirla. Ad es. se non sono state apportate modifiche, non la mando in esecuzione
|
| | Post: 3.688 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/03/2018 13:21 | |
Allora hai provato la mia macro cancellando ovvuamente i dati nelle colonne B, C e D su Importazione?
Alfredo |
| | Post: 2.780 | Registrato il: 03/04/2013
| Utente Veteran | Excel 2000 - 2013 | | OFFLINE | |
|
29/03/2018 14:08 | |
Buon pomeriggio, Chiara. Quello che mi preoccupa è: @Chiara-ExcelForum, scrive
... il grande numero di Dati ...
Di quanti Dati stiamo parlando, 1.000, 10.000, 100.000 ...? Considera che, personalmente, quando i Record superano i 2.000 ÷ 2.500, senza indugio, propendo per ACCESS; sempre che si diponga di una regolare Licenza. Strutturare una Procedura in ACCESS richiede una buona conoscenza di programmazione e tempi decisamente più impegnativi rispetto allo sviluppo di una Procedura in EXCEL, ma, una volta create Tabelle, Maschere, Query e Report i tempi di risposta sono praticamente immediati. Non che con EXCEL non si riescano a gestire quantità rilevanti di Dati, ma, l'esecuzione e un eventuale analisi dei Dati richiede tempi improponibili. A disposizione. Buon Lavoro. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 3.689 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/03/2018 14:44 | |
Concordo in tutto e per tutto con quanto detto da Giuseppe cui va il mio deferente ( ) saluto.
Alfredo |
| | Post: 3.295 | Registrato il: 28/06/2011
| Città: AGORDO | Età: 70 | Utente Master | 2013 | | OFFLINE | |
|
29/03/2018 15:05 | |
Ciao a tutti
>>>Avrei la necessità... del files "Importazione" venissero copiati ... dal foglio "Matrice"
Penso dal files Matrice al files Importazione
Premesso che sopra Excel2007, ci sono altre formule su files chiusi...
Premesso che le formule siano più veloci del VBA, ho scritto questo VBA
Ps il files Importazione deve essere>>>Importazione.xlsm
NB I due files nella stessa Directory
vb Option Explicit
Sub copia()
Dim Wb1 As Workbook, Wb2 As Workbook, Ws1 As Worksheet, Ws2 As Worksheet
Dim Percorso As String, nomeFile As String, Fg As String, Rg As Object, Area As Range
Dim Ur1 As Long, Ur2 As Long, X As Long, R As Long, Rr As Long
Percorso = ThisWorkbook.Path
Set Wb1 = Workbooks("Importazione.xlsm") 'Nome files 1, Casomai cambiare
Set Ws1 = Wb1.Worksheets("Importazione") ' Nome foglio 1, Casomai cambiare
Ur1 = Ws1.Range("B" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = True
If Ur1 > 1 Then Ws1.Range("B2:D" & Ur1).ClearContents
Ur1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
nomeFile = "matrice.xlsx" 'Nome files 2, Casomai cambiare
Workbooks.Open (Percorso & "\" & nomeFile)
Set Wb2 = Workbooks(nomeFile)
Fg = "matrice" 'Nome foglio 2, Casomai cambiare
Set Ws2 = Wb2.Worksheets(Fg)
Ur1 = Ws2.Range("A" & Rows.Count).End(xlUp).Row
R = 2
Set Area = Ws2.Range("A2:A" & Ur1)
For X = 2 To Ur1
Set Rg = Area.Find(Ws1.Cells(X, 1), LookIn:=xlValues, LookAt:=xlWhole)
If Not Rg Is Nothing Then
Rr = Rg.Row
Ws1.Cells(X, 2) = Ws2.Cells(Rr, 2)
Ws1.Cells(X, 3) = Ws2.Cells(Rr, 3)
Ws1.Cells(X, 4) = Ws2.Cells(Rr, 4)
R = R + 1
End If
Next X
Wb2.Close (Percorso & "\" & nomeFile)
Application.ScreenUpdating = True
Set Wb1 = Nothing
Set Wb2 = Nothing
Set Ws1 = Nothing
Set Ws2 = Nothing
Set Area = Nothing
Set Rg = Nothing
MsgBox "Fatto"
End Sub
[Modificato da raffaele1953 29/03/2018 16:04] Excel 2013 |
| | Post: 79 | Registrato il: 22/12/2017
| Città: MILANO | Età: 44 | Utente Junior | Excel2016 | | OFFLINE | |
|
29/03/2018 16:16 | |
|
| | Post: 3.690 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/03/2018 16:26 | |
Beh su un DB di 2000 record penso che i tempi possano essere ancora accettabili.
Restiamo in trepidante attesa [Modificato da alfrimpa 29/03/2018 16:29]
Alfredo |
| | Post: 2.781 | Registrato il: 03/04/2013
| Utente Veteran | Excel 2000 - 2013 | | OFFLINE | |
|
29/03/2018 21:38 | |
Buona sera, a Tutti; scrivo solo per dire che ho testato anche il File di Raffaele e, ovviamente, funziona a dovere. Buona serata. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 3.691 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/03/2018 21:44 | |
GiuseppeMN, 29/03/2018 21.38:
Buona sera, a Tutti; scrivo solo per dire che ho testato anche il File di Raffaele e, ovviamente, funziona a dovere.
Buona serata.
Giuseppe
Nessuno aveva dei dubbi.
Alfredo |
|
|