PDA

Visualizza la versione completa : Confrontare Due Fogli Ed Inserire Nel Terzo


sal21
22-03-2004, 15:19
... ho foglio1 e foglio2 con dei dati nel range A3:R nella colonna M può essere presente lo stesso dato per entrambi i fogli Per esempio in M3 di foglio1 è presente 123456 e in M89 di foglio2 e presente 123456. Vorrei fare un confronto fra i due fogli e se quel dato è presente in tutte e due le colonne dei fogli 1 e 2 cancellare le due righe ed inserila in foglio3 a partire da A3:R

grullo
24-03-2004, 07:52
Innanzitutto vorrei capire cosa intendi con range A3:R

sal21
24-03-2004, 08:26
Originariamente postato da grullo
Innanzitutto vorrei capire cosa intendi con range A3:R

ci sono dei dati a partire da A3 fino a tutta la colonna colonna R e questi possono variare in quantita di linne.

nel mio casso vanno da A3 a R2345...

Come non mai ho bisgogno di questo aiuto.

grullo
24-03-2004, 09:07
Originariamente postato da sal21
... ho foglio1 e foglio2 con dei dati nel range A3:R nella colonna M può essere presente lo stesso dato per entrambi i fogli Per esempio in M3 di foglio1 è presente 123456 e in M89 di foglio2 e presente 123456. Vorrei fare un confronto fra i due fogli e se quel dato è presente in tutte e due le colonne dei fogli 1 e 2 cancellare le due righe ed inserila in foglio3 a partire da A3:R

Si tratta di una procedura piuttosto lunga in termine di elaborazione da parte del calcolatore visto che per ogni riga del foglio1 devo controllare le occorrenze in tutte le righe del foglio2.
Quesiti:
1) parto dalla riga M3 e ho 123456. Inizio a cercare da M3 fino ad incontrare un primo valore per es. in M89 uguale. A uesto punto devo interrompere la ricerca o devo continuare ancora oltre per verificare ulteriori occorrenze?
2) parto dalla riga M3 di foglio1 e ho 123456, controllo le occorrenze in foglio2.OK. Ma se in foglio1 ci fossereo altre occorrenze??? Quelle devi valutarle???

Comprendi che a seconda di come risponderai alle domande è possibile avere la necessità di eseguire al massimo 2*n^2 ricerche?
Nel caso di 2300 righe rischi di dover fare oltre 1.000.000 di ricerche!!!
Hai un pc abbastanza potente???
;)

sal21
24-03-2004, 10:00
Originariamente postato da grullo
Si tratta di una procedura piuttosto lunga in termine di elaborazione da parte del calcolatore visto che per ogni riga del foglio1 devo controllare le occorrenze in tutte le righe del foglio2.
Quesiti:
1) parto dalla riga M3 e ho 123456. Inizio a cercare da M3 fino ad incontrare un primo valore per es. in M89 uguale. A uesto punto devo interrompere la ricerca o devo continuare ancora oltre per verificare ulteriori occorrenze?
2) parto dalla riga M3 di foglio1 e ho 123456, controllo le occorrenze in foglio2.OK. Ma se in foglio1 ci fossereo altre occorrenze??? Quelle devi valutarle???

Comprendi che a seconda di come risponderai alle domande è possibile avere la necessità di eseguire al massimo 2*n^2 ricerche?
Nel caso di 2300 righe rischi di dover fare oltre 1.000.000 di ricerche!!!
Hai un pc abbastanza potente???
;)

... Credo che il fatto che non esistono duplicati sia nel foglio1 e foglio2 possa essere già un buon inizio? in questo casose trovo la prima occorrenza salto al prossimo dato ecc...

grullo
24-03-2004, 10:29
Prova questo:

Sub prova()
Dim strRicerca As String
Dim rigaTrovata As Long
Dim ultimaRigaScritta As Long
ultimaRigaScritta = 2
For i = 3 To 2000
strRicerca = Foglio1.Cells(i, 13)
If strRicerca = vbNullString Then Exit For
rigaTrovata = trovaRiga(strRicerca)
If rigaTrovata <> -1 Then
ultimaRigaScritta = ultimaRigaScritta + 1
'Copio dal foglio1
Foglio1.Rows(i).Copy
'Incollo nel Foglio 3
Foglio3.Range("A" & ultimaRigaScritta).PasteSpecial
'Cancello le righe
Foglio1.Rows(i).Delete
Foglio2.Rows(rigaTrovata).Delete
i = i - 1
End If
Next i
End Sub

Private Function trovaRiga(valore As String) As Long
On Error GoTo errRicerca
Foglio2.Activate
Foglio2.Range("M3").Activate
Foglio2.Cells.Find(What:=valore, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False).Select
trovaRiga = CLng(Selection.Row)
Exit Function
errRicerca:
trovaRiga = -1
End Function

;)

sal21
24-03-2004, 10:59
Originariamente postato da grullo
Prova questo:

Sub prova()
Dim strRicerca As String
Dim rigaTrovata As Long
Dim ultimaRigaScritta As Long
ultimaRigaScritta = 2
For i = 3 To 2000
strRicerca = Foglio1.Cells(i, 13)
If strRicerca = vbNullString Then Exit For
rigaTrovata = trovaRiga(strRicerca)
If rigaTrovata <> -1 Then
ultimaRigaScritta = ultimaRigaScritta + 1
'Copio dal foglio1
Foglio1.Rows(i).Copy
'Incollo nel Foglio 3
Foglio3.Range("A" & ultimaRigaScritta).PasteSpecial
'Cancello le righe
Foglio1.Rows(i).Delete
Foglio2.Rows(rigaTrovata).Delete
i = i - 1
End If
Next i
End Sub

Private Function trovaRiga(valore As String) As Long
On Error GoTo errRicerca
Foglio2.Activate
Foglio2.Range("M3").Activate
Foglio2.Cells.Find(What:=valore, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False).Select
trovaRiga = CLng(Selection.Row)
Exit Function
errRicerca:
trovaRiga = -1
End Function

;)


... (Prova questo:) Questo termine con te non deve essere mai usato!!!!!!!!!! FUNZIONA AL PRIMO COLPO. Al solito Complimenti! Una cosa, ma il ciclo fino a 2000 significa che verifica solo le linee finio a 2000? se è così non si può fare : continua fino a che non trovi celle blank in colonna A?