Trovare riferimento riga

Anonimo
2011-03-13T13:04:13+00:00

Ciao, sto impazzendo su un problema sicuramente sciocco, ma che non riesco a capire.

Dato un foglio1 ed un foglio 2, devo trovare in quale riga della colonna A di foglio1 esiste un testo esattamente corrrispondente alla cella A1 di foglio2. Mi sembrava una cosa fattibile anche per me, ho quindi provato con:

Dim rng As Range

Dim sh1 As Worksheet

Dim sh2 As Worksheet

Dim lr As Long

Dim sr As Long

Dim doc As String

With ThisWorkbook

    Set sh1 = Worksheets("Foglio1")

    Set sh2 = Worksheets("Foglio2")

End With

With sh2

    lr = sh1.Range("A" & .Rows.Count).End(xlUp).Row

    Set rng = sh1.Range("A1:A" & lr)

    doc = .Range("A1")

    sr = Evaluate("=MATCH(" & doc & "," & rng.Address & ",0)")

End With

Set rng = Nothing

Set sh1 = Nothing

Set sh2 = Nothing

Non funziona , mi dà un messaggio 'Tipo non corrispondente'. Eppure nel seguire passo passo dall'editor vb sia il testo da cercare (doc = "FATTURA MARIO per esempio") sia il rng in cui fare la ricerca (rng.address = $A$1:$A$xxx) mi sembrano riconosciuti correttamente nella formula. Dove sto sbagliando?

Dim doc as String, non serve ad identificare il suo risultato come testo da utilizzare nella formula in questione? o altre formule che utilizzino stringhe di testo?

Qualcuno mi può spiegare in dettaglio l'errore? Grazie

Ciao, Fabrizio

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
2011-03-14T18:04:33+00:00

Ciao e grazie per la risposta. La tua macro ovviamente funziona, ma  a me sembra restituisca il primo riferimento trovato, non l'ultimo, che comunque è ciò che mi serve. A dire il vero mi serve il rif riga e non cella, ma sostituisco c.Address con c.Row e sono a posto.

Quel che mi fa rabbia è perché non riesco  a fare la stessa cosa con la formula MATCH che utilizzerei io. Se hai tempo e voglia mi togli il dubbio? Ti posto un piccolo file di prova in cui ho creato le 2 macro, la tua e la mia.

http://cid-0ff1d1aaac9b53bf.skydrive.live.com/redir.aspx?resid=FF1D1AAAC9B53BF!129

Grazie, ciao

Fabrizio

Modifica così la tua:

With sh1

    lr = .Range("A" & .Rows.Count).End(xlUp).Row

    Set rng = .Range("A1:A" & lr)

    doc = sh2.Range("A1").Value

    sr = Evaluate("=MATCH(" & """" & _

        doc & """" & "," & .Name & _

        "!" & rng.Address & ",0)")

    MsgBox sr

End With

E sì, la mia restituisce il primo trovato. Scusami ma ho fatto confusione nel copia/incolla da una mia libreria di codice. Correggo la risposta precedente per non creare confusione, Grazie per la segnalazione.

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2011-03-14T08:18:31+00:00

Ciao, sto impazzendo su un problema sicuramente sciocco, ma che non riesco a capire.

Dato un foglio1 ed un foglio 2, devo trovare in quale riga della colonna A di foglio1 esiste un testo esattamente corrrispondente alla cella A1 di foglio2. Mi sembrava una cosa fattibile anche per me, ho quindi provato con:

Dim rng As Range

Dim sh1 As Worksheet

Dim sh2 As Worksheet

Dim lr As Long

Dim sr As Long

Dim doc As String

With ThisWorkbook

    Set sh1 = Worksheets("Foglio1")

    Set sh2 = Worksheets("Foglio2")

End With

   

With sh2

   

    lr = sh1.Range("A" & .Rows.Count).End(xlUp).Row

    Set rng = sh1.Range("A1:A" & lr)

    doc = .Range("A1")

    sr = Evaluate("=MATCH(" & doc & "," & rng.Address & ",0)")

  

End With

Set rng = Nothing

Set sh1 = Nothing

Set sh2 = Nothing

Non funziona , mi dà un messaggio 'Tipo non corrispondente'. Eppure nel seguire passo passo dall'editor vb sia il testo da cercare (doc = "FATTURA MARIO per esempio") sia il rng in cui fare la ricerca (rng.address = $A$1:$A$xxx) mi sembrano riconosciuti correttamente nella formula. Dove sto sbagliando?

Dim doc as String, non serve ad identificare il suo risultato come testo da utilizzare nella formula in questione? o altre formule che utilizzino stringhe di testo?

Qualcuno mi può spiegare in dettaglio l'errore? Grazie

Ciao, Fabrizio

Non so se ho capito. Questa cerca la corrispondenza nella colonna A del Foglio1 di quanto hai inserito in A1 del Foglio2:

Public Sub m_1()

    Dim sh1 As Worksheet

    Dim sh2 As Worksheet

    Dim lRiga As Long

    Dim rng As Range

    Dim s As String

    Dim c As Range

    With ThisWorkbook

        Set sh1 = .Worksheets("Foglio1")

        Set sh2 = .Worksheets("Foglio2")

    End With

    With sh1

        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

        s = sh2.Range("A1").Value

        Set rng = .Range("A1:A" & lRiga)

        Set c = rng.Find(what:=s, lookat:=xlPart, LookIn:=xlValues)

        If Not c Is Nothing Then MsgBox c.Address

    End With

    Set c = Nothing

    Set rng = Nothing

    Set sh1 = Nothing

    Set sh2 = Nothing

End Sub

Restituirà la prima trovata, nel senso che se in colonna A del Foglio1 hai più valori corrispondenti a quanto il A1 del Foglio2, ti restituirà il riferimento al primo trovato.

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-03-14T18:23:12+00:00

    Grazie a te.

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  3. Anonimo
    2011-03-14T12:59:34+00:00

    Ciao e grazie per la risposta. La tua macro ovviamente funziona, ma  a me sembra restituisca il primo riferimento trovato, non l'ultimo, che comunque è ciò che mi serve. A dire il vero mi serve il rif riga e non cella, ma sostituisco c.Address con c.Row e sono a posto.

    Quel che mi fa rabbia è perché non riesco  a fare la stessa cosa con la formula MATCH che utilizzerei io. Se hai tempo e voglia mi togli il dubbio? Ti posto un piccolo file di prova in cui ho creato le 2 macro, la tua e la mia.

    http://cid-0ff1d1aaac9b53bf.skydrive.live.com/redir.aspx?resid=FF1D1AAAC9B53BF!129

    Grazie, ciao

    Fabrizio

    La risposta è stata utile?

    0 commenti Nessun commento