Aprofitto ancora di voi per risolvere alcuni quesiti:
1) ho due fogli di lavoro in cui nel primo [Foglio1] ho un elenco molto
esteso di dati, nel secondo [Foglio2] un'altro elenco di dati.
Ora vorrei approntare una routine in VBA che mi confronti i dati del
Foglio2 con il Foglio1 e trovando dei dati doppi (come chiave di confronto
uso la colonna A) li copi e/o sposti (tutta la riga) nel Foglio3.
Ho trovato questa routine per trovare i campi doppi ed eliminarli:
Sub EliminaDoppioni()
'Questo codice ordina i dati nella seconda
'colonna del foglio Dati ed elimina le righe che
'contengono dati duplicati.
Application.ScreenUpdating = False
Range("B4:B800").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Set currentCell = Worksheets("Dati").Range("B4")
Do While Not IsEmpty(currentCell)
Set nextCell = currentCell.Offset(1, 0)
If nextCell.Value = currentCell.Value Then
currentCell.EntireRow.Delete
End If
Set currentCell = nextCell
Loop
Range("B4").Select
End Sub
Pensavo di adattarna al mio scopo, ma non sono ancora riuscito!
2) Sempre nello stesso esempio di prima ho creato delle formule che eseguono
un confronto riga x riga nel Foglio3 ricopiando il contenuto se è un
doppione e lasciando bianco in caso contrario (metodo molto pesante, per
questo sto tentando di risolvere con la routine in VBA).
Esiste un modo per fare una macro che ricopi la riga campione (la prima!)
tante volte quanti record (righe piene) esistono nel Foglio2?
Grazie!
Buone vacanze!
qual č il dato doppio? b? o anche a?
2. i dati sono numeri o testo?
[non č che tu non ti sia spiegato bene, voglio solo essere sicura di aver
capito!]
Facci sapere.
Barbara
> Ciao, ti chiedo qualche precisazione.
> 1. per "dati doppi", intendi quelli che sono presenti sia nel foglio1 che
> nel foglio2? (a prescindere, quindi, dal fatto che si ripetano all'interno
> dello stesso foglio?)
> cioč, nell'esempio:
> foglio1 foglio2
> a b
> b f
> a g
> c
> e
>
> qual č il dato doppio? b? o anche a?
Nello stesso foglio non ci sono dati doppi (almeno considerando solo la
colonna A, che č poi la chiave ti tutto, come una sorta di codice cliente
per fare un esempio)
quindi di dato doppio č solo b.
> 2. i dati sono numeri o testo?
> [non č che tu non ti sia spiegato bene, voglio solo essere sicura di aver
> capito!]
I dati sono misti, come campi di un database
es.
colonna A colonna B colonna C colonna D
AA1AAA Via Milano 15 Rossi Emilio
BB2BBB Corso Torino 40 Bianchi Giuseppe
CC3CCC Piazza Verona 60 Alvaro Pino
Il mio archivio si estende dalla colonna A a P, ma non credo sia rilevante,
posso modificare il codice o va bene anche ricopiare/spostare l'intera riga!
>
> 2) Sempre nello stesso esempio di prima ho creato delle formule che
eseguono
> un confronto riga x riga nel Foglio3 ricopiando il contenuto se è un
> doppione e lasciando bianco in caso contrario (metodo molto pesante, per
> questo sto tentando di risolvere con la routine in VBA).
> Esiste un modo per fare una macro che ricopi la riga campione (la prima!)
> tante volte quanti record (righe piene) esistono nel Foglio2?
ho trovato una solozione parziale:
Sub SelezionaEincolla()
'
Application.ScreenUpdating = False 'serve per evitare i saltellamenti a
schermo
Sheets("Foglio.Dati1").Select
Dim righe As Integer
righe = 1
Dim CEL As Object
Dim fine As Object
Set zona = Range(Range("A2"), Range("A2").End(xlDown))
For Each CEL In zona
If CEL.Offset(0, 0) <> "" Then
righe = righe + 1
End If
Next
MsgBox " " & righe, vbInformation ' mi dice quante righe ha trovato nel
primo foglio
Sheets("Foglio.Dati2").Select
Range("A3:S3").Select
Selection.Copy
Range("A4:S1000").Select ' questa riga seleziona dove copiare i dati
'ActiveSheet.Paste ' incolla
End Sub
Ora la variabile righe riporta quante righe occupate nel primo foglio vanno
ricopiate nel secondo, ma come faccio a sostituire nella riga di codice
Range("A4:S1000").Select ' questa riga seleziona dove copiare i dati
il valore "S1000" con la variabile righe ?
Volevo proporti una soluzione alla domanda 1, senza l'uso di VBA.
Chiamiamo "dati" la prima colonna del tuo database del Foglio1 dove hai i
dati, e "chiave" quella del Foglio2.
Seleziona l'intervallo di destinazione e scrivi (o incolla) questa formula
nella barra della formula premendo poi CTRL+MAIUSC+INVIO per inserirla come
matriciale:
=INDICE(dati;PICCOLO(NON(VAL.ERRORE(CONFRONTA(dati;chiave;)))*(RIF.RIGA(dati
)+1-MIN(RIF.RIGA(dati)));RIF.RIGA(dati)+1-MIN(RIF.RIGA(dati))+SOMMA(1*VAL.ER
RORE(CONFRONTA(dati;chiave;))));)
Per semplicità, puoi definire i nomi "dati" e "chiave" come ho fatto io,
altrimenti sostituiscili con i tuoi riferimenti.
Questa ti dà i dati doppi della prima colonna. Per le altre basta un
CERCA.VERT() o INDICE()+CONFRONTA().
Per VBA sicuramente riceverai consigli dagli altri.
Ciao
Barbara
Non ho capito bene come applicare le formule.
Sono riuscito a arragiarmi un pò! :-) ho risolto con il VBA
Cmq grazie anche a te per l'aiuto!