Ciclo for all'interno di un altro foglio

Anonimo
2012-05-03T15:00:12+00:00

Ciao

ho un problema con una macro che stò cercando di finire.

Praticamente dovrei posizionarmi sul foglio attivo corrente, ciclare su determinate colonne per riga (e fin qui tutto bene)

per ogni riga dovrei salvarmi il valore, ricercare il valore su un altro foglio exel al range A1:A999. A questo punto dovrei prendermi il valore B1 e confrontarlo con quello del ciclo precedente. 

Se la cella ha il valore vuoto vorrei uscire dal 2* ciclo e proseguire con il 1* ciclo.

Vi posto il codice inserendo il maiuscolo le parti che non riesco a completare.

Windows(oldfile).Activate

'Sheets(foglioatt).Activate

Worksheets(foglioatt).Activate 

Dim myVal As String

Dim myVal2 As String

'legge il primo valore

myVal = Range("d1").Value 

Set D = Worksheets("Base")

'inizia il ciclo dalla riga 1 all'ultima della colonna A

For r = 3 To Range("e78").End(xlUp).Row 

Range("e" & r).Select

ActiveCell.Interior.ColorIndex = 3 'rosso

myVal2 = Range("a" & r).Value

********** PARTE DA FINIRE *************************

QUI DOVREI CICLARE SU UN ALTRO FOGLIO CHE SI CHIAMA "BASE"

For g = 2 To Range("a9999").End(xlUp).Row

CONFRONTO I VALORI DEL 2* FOGLIO CON QUELLI DEL PRIMO

If Range("a" & g).Value = myVal2 Then

SE TROVO IL VALORE VERIFICO SE B1 DEL PRIMO FOGLIO è UGUALE A QUESTO (B1 LO SALVO IN UNA VARIABILE) 

Else

If Range("a" & g).Value = "" Then

SE TROVO VUOTO **** USCIRE SOLO DAL CICLO FOR G MA PROSEGUIRE CON FOR R

End If

End If

Next g

Next r

Range("E1:E78").Interior.ColorIndex = 2 'bianco

Attendo un aiutino da chi ne capisce più di me :-) io qui mi sono arenata e non riesco a proseguire.

grazie mille

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2012-05-03T16:32:34+00:00

Allora.

Ho un foglio Exel,

devo ciclare su tutte le righe da E3 a E999

prendermi per ogni riga il valore A corrispondente alla riga.

Questo valore và ricercato nel Foglio BASE, ciclando le righe A1:A9999 , quando trovo la corrispondenza del valore devo fare un ulteriore confronto con la cella B (corrispondente alla riga) foglio BASE con una Variabile che mi sono salvata e derivante dal foglio1.

Se trovo corrispondenza inserisco nel foglio1 sulla cella in cui mi trovo il valore C corrispondente alla riga foglio BASE.

Praticamente è una corrispondenza su due fogli, solo che devo verificare più dati posizionati sulla stessa riga del foglio BASE e portarli nel foglio1 attivo solo se campo A e campo B sono uguali alle variabili che trovo sul foglio1 alla riga corrispondente al ciclo.

Per questo pensavo di fare prima un ciclo sul foglio1 per riga, e poi al suo interno un ciclo sul foglio BASE per cercarmi i valori corrispondenti.

Il primo ciclo mi esce tranquillamente, quello al suo interno non riesco a dargli il riferimento al foglio BASE  per il ciclo, continuo a ciclare sullo stesso foglio.

Capito ancora poco(non ti preoccupare, colpa mia).

Se devi ciclare 997 celle del primo foglio, confrontandole con 9999 celle del secondo foglio, raggiungi un totale di 9.969.003 cicli. Un bel po' di tempo macchina....

Questa macro, comunque, confronta le celle A3:A999 del Foglio1 con le celle A1:A9999 del Foglio2 e se trova una corrispondenza, colora di blu la cella C del Foglio1. Serve solo per far capire come confrontare celle di due fogli diversi. Tempo biblico....:

Public Sub m()

    Dim sh1 As Worksheet

    Dim sh2 As Worksheet

    Dim lng1 As Long

    Dim lng2 As Long

    With ThisWorkbook

        Set sh1 = .Worksheets("Foglio1")

        Set sh2 = .Worksheets("Foglio2")

    End With

    With sh1

        For lng1 = 3 To 999

            For lng2 = 1 To 9999

                If .Range("A" & lng1).Value = _

                    sh2.Range("A" & lng2).Value Then

                    .Range("C" & lng1).Interior.ColorIndex = 5

                End If

            Next

        Next

    End With

    Set sh1 = Nothing

    Set sh2 = Nothing

End Sub

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-05-03T15:39:38+00:00

    Allora.

    Ho un foglio Exel,

    devo ciclare su tutte le righe da E3 a E999

    prendermi per ogni riga il valore A corrispondente alla riga.

    Questo valore và ricercato nel Foglio BASE, ciclando le righe A1:A9999 , quando trovo la corrispondenza del valore devo fare un ulteriore confronto con la cella B (corrispondente alla riga) foglio BASE con una Variabile che mi sono salvata e derivante dal foglio1.

    Se trovo corrispondenza inserisco nel foglio1 sulla cella in cui mi trovo il valore C corrispondente alla riga foglio BASE.

    Praticamente è una corrispondenza su due fogli, solo che devo verificare più dati posizionati sulla stessa riga del foglio BASE e portarli nel foglio1 attivo solo se campo A e campo B sono uguali alle variabili che trovo sul foglio1 alla riga corrispondente al ciclo.

    Per questo pensavo di fare prima un ciclo sul foglio1 per riga, e poi al suo interno un ciclo sul foglio BASE per cercarmi i valori corrispondenti.

    Il primo ciclo mi esce tranquillamente, quello al suo interno non riesco a dargli il riferimento al foglio BASE  per il ciclo, continuo a ciclare sullo stesso foglio.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-05-03T15:21:13+00:00

    Ciao

    ho un problema con una macro che stò cercando di finire.

    Praticamente dovrei posizionarmi sul foglio attivo corrente, ciclare su determinate colonne per riga (e fin qui tutto bene)

    per ogni riga dovrei salvarmi il valore, ricercare il valore su un altro foglio exel al range A1:A999. A questo punto dovrei prendermi il valore B1 e confrontarlo con quello del ciclo precedente. 

    Se la cella ha il valore vuoto vorrei uscire dal 2* ciclo e proseguire con il 1* ciclo.

    Vi posto il codice inserendo il maiuscolo le parti che non riesco a completare.

    <cut>

    Attendo un aiutino da chi ne capisce più di me :-) io qui mi sono arenata e non riesco a proseguire.

    grazie mille

    Capito pochissimo.

    Puoi provare di spiegare nuovamente a parole, lasciando da parte il codice?

    Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento