Ciao ClavitoClaud ,
non riesco a trovare una soluzione per il seguente problemino:
Excel 2010:
ho due liste di aziende, in due file separati.
Nella prima lista (File1) ho le ragioni sociali ma non gli indirizzi email.
Nella seconda lista (File2) ho le ragioni sociali e gli indirizzi email.
E' probalbile, ma non è sicuro, che nel File2 (quello con le email) ci siano alcune aziende presenti anche nel File1.
Si tratta di 6.000 record per il File1 e 50.000 per il File2...non me la sento di farlo a mano :)
Come intuibile, quello che vorrei fare è verificare l'eventuale corrispondenza di aziende tra i due File.
Questo come primo step sarebbe già ottimo.
Se poi fosse possibile inserire automaticamente gli indirizzi email delle aziende del File2, qualora ci fosse corrispondenza, nelle relative righe delle aziende del File1, sarebbe il top.
Dato le dimensioni possibili estesi dei file, oltre alla soluzione di Alessandra, potresti anche prendere in considerazione una soluzione VBA, la quale dovrebbe essere molto veloce:
- Alt-F11 per aprire l'editor di VBA
- Alt-IMper inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Public Sub Tester()
Dim srcWB As Workbook, destWB As Workbook
Dim srcSH As Worksheet, destSH As Worksheet
Dim srcRng As Range, destRng As Range
Dim arrIn As Variant, arrOut As Variant
Dim iRow As Long, jRow As Long
Dim i As Long, j As Long, k As Long
Dim sPath As String, sStr As String
Const sName As String = "ClavitoClaud.xlsx" '<<===== Modifica
Const sPercorso As String = "**C:\Pluto**" '<<===== Modifica
sStr = Application.PathSeparator
If Right(sPercorso, 1) <> sStr Then
sPath = sPercorso & sStr
Else
sPath = sPercorso
End If
Set srcWB = ThisWorkbook
On Error Resume Next
Set destWB = Workbooks(sName)
On Error GoTo 0
If destWB Is Nothing Then
On Error GoTo XIT
Application.ScreenUpdating = False
Set destWB = Workbooks.Open(sPath & sName)
End If
Set srcSH = srcWB.Sheets("Foglio1") '<<===== Modifica
Set destSH = destWB.Sheets("Foglio1") '<<===== Modifica
With srcSH
iRow = LastRow(srcSH, .Columns("A:A"))
Set srcRng = .Range("A2:B" & iRow)
End With
With destSH
jRow = LastRow(destSH, .Columns("A:A"))
Set destRng = .Range("A2:B" & jRow)
End With
arrIn = srcRng.Value
arrOut = destRng.Value
For i = 1 To UBound(arrIn, 1)
For j = 1 To UBound(arrOut, 1)
If arrIn(i, 1) = arrOut(j, 1) Then
arrOut(j, 2) = arrIn(i, 2)
Exit For
End If
Next j
Next i
With Application
.ScreenUpdating = False
destRng.Value = arrOut
.ScreenUpdating = True
End With
Exit Sub
XIT:
Application.ScreenUpdating = True
Call MsgBox(Prompt:="Error " _
& Err.Number _
& " (" _
& Err.Description _
& ") nella routine: Tester", _
Buttons:=vbCritical, _
Title:="ERRORE")
End Sub
'<<=========
- Alt-Q per chiudere l'editor di VBA e tornare a Excel.
- Alt-F8 per aprire la finestra di gestione delle macro
- Seleziona Tester | Esegui
===
Regards,
Norman