Cerca confronta estrai

  • Cerca-Confronta-Estrai di emilio
    Ho questo problema a cui non riesco a trovare un adeguata soluzione.
    Ho TRE Fogli di lavoro
    il nr.2 è un archivio che contiene dati nelle colonne da A alla H
    il nr.1 è il foglio di lavoro principale
    ul nr.3 è il foglio di lavoro che riceve i dati dal foglio 1.

    Ora devo controllare se il valore/testo della cella la A1 del foglio1 è presente nel foglio2 (archivio) alla colonna F che contiene l'elenco dei dati.
    Se il valore/testo di foglio1 cella A1 esiste in foglio2 colonna F confrontalo con il valore/testo di foglio2 colonnaH se i valori di foglio1 cella A1 e foglio2 cella F e H sono tutti e tre uquali passa alla cella A3 del foglio3 il valore di foglio1 A1 se sono differenti passa al foglio3 cella A3 il valore/testo di foglio2 della colonna H.

    In pratica posso riassumere per rendere la cosa più chiara:
    foglio1 cella A1 = 1
    foglio2 in una qualsiasi cella della colonna F è presnete 1
    foglio2 in una qualsiasi cella della colonna H è presente 1
    passa al foglio3 cella A3 il valore 1

    viceversa
    foglio1 cella A1 = 1
    foglio2 in una qualsiasi cella della colonna F è presnete 1
    foglio2 in una qualsiasi cella della colonna H è presente 2
    passa al foglio3 cella A3 il valore 2

    Spero di essere stato abbastanza chiaro e che qualcuno riesca a darmi una mano.

    Grazie

    Risposta : Cerca confronta estrai di giorgio
    Ciao, prova questa routine: se hai qualche difficoltà avvisami.
    Public Sub CercaConEst()
    Dim ValFog1 As Variant, ValFog2 As Variant, numCelleH As Long, numCelleF As Long
    Dim i As Long, j As Long, Dest As Range

    'abbiamo definito le variabili nel modo più generico; adesso diamo loro un riferimento
    'dovrebbe funzionare con qualsiasi valore tu abbia in A1 (foglio1);
    ValFog2 = 2 ' sono stato alle indicazioni;cambia il valore in questa riga di comando se ti occorre
    ValFog1 = ThisWorkbook.Worksheets.Item(1).Cells(1, 1).Value ' valore da testare !!! opp. 1 ?
    ThisWorkbook.Worksheets.Item(3).Activate
    Set Dest = Range("A1")
    Dest.ClearContents
    'osserva che non sempre c'e' corrispondenza tra foglio e item : se inserisci dei nuovi fogli
    'vengono ridefiniti gli indici della collezione Worksheets.Per controllare : apri la finestra
    'Immediata e digita ?ThisWorkbook.Worksheets.Item(1).Cells(1, 1).Value , controlla che
    'il valore restituito corrisponda al valore che esiste nel tuo foglio1 in A1.
    ThisWorkbook.Worksheets.Item(2).Activate
    Range("F1").Select
    numCelleF = Range(ActiveCell, ActiveCell.End(xlDown)).Count
    numCelleH = Range(ActiveCell, ActiveCell.Offset(0, 2).End(xlDown)).Count
    'abbiamo contato le celle nelle colonne F e H foglio 2 supponendo che tu abbia più di un valore
    With ActiveCell
    'se in colonna H c'è un 2 mettiamolo nel foglio 3
    For j = 0 To numCelleH - 1
    If .Offset(j, 2) = ValFog2 Then Dest.Value = ValFog2
    Next j
    End With
    i = 0
    j = 0
    With ActiveCell
    ' se viene verificata la condizione per cui abbiamo 1 sia in A1(foglio1) sia in F&H ( foglio2)
    ' assegniamo il valore in A1 ( foglio3) altrimenti rimane il valore 2 oppure niente
    For i = 0 To numCelleF - 1
    For j = 0 To numCelleH - 1
    If .Offset(i, 0) = ValFog1 And .Offset(j, 2) = ValFog1 Then
    ThisWorkbook.Worksheets.Item(3).Cells(1, 1) = .Offset(j, 2)
    End If
    Next j
    Next i
    End With

    End Sub