È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Relazione tra numeri di due file

Ultimo Aggiornamento: 29/03/2018 21:44
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

Cerca.vert()
Ciao Chiara con un Cerca.vert() andrebbe bene?

Ciao By Sal [SM=x423051]
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

..... [SM=x423021]

Non saprei come funziona.... [SM=x423039]
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 [SM=g27828] (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

Re:
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 ( [SM=g27828] ) 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

Ciao Giuseppe.... purtroppo non possiedo una licenza Access [SM=x423023] [SM=x423023] [SM=x423023] [SM=x423023]

Ho provato la macro di Alfredo e FUNZIONA ALLA GRANDE

Ora lo provo sul DB di 2000 righe..... [SM=x423028] [SM=x423028] [SM=x423028] [SM=x423028]


GRAZIE AD ENTRAMBI
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 [SM=g27828] [SM=g27828] [SM=g27828]
[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

Re:
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
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 05:12. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com