Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB Macro] Problema con metodo .Find

    Ciao a tutti,
    ho un problema con la ricerca in un foglio excel attraverso una macro.
    Mi spiego meglio :

    Ho 2 campi, colonne (A,B)
    La colonna A possiede 332 righe
    La colonna B possiede 895 righe

    Voglio, attraverso macro, per tutti i valori contenuti nella colonna A cercare tutte quelle righe di B che contengono un valore simile ad A e posizionare i vari valori trovati in una terza colonna, la C separati dal carattere ; punto e virgola.

    Ad esempio
    codice:
    A                   B                         C
    pippo                pippo_1                pippo_1;pippo_2;pippo_3
    paperino             pippo_2                paperino_1;paperino_2;paperino_3;
    pluto                pippo_3                pluto_1;pluto_2
                         paperino_1
                         paperino_2
                         paperino_3                     
                         pluto_1
                         pluto_2
    ovvero nella colonna B , il valore pippo di A occorre 3 volte e quindi tutte e tre le occorrenze dovrebbero apparire in C seguita da un punto e virgola.
    Stessa cosa per paperino etc....

    A tale scopo ho scritto questa macro :
    codice:
    Public Function FindAllStrings(ByVal strSearchString As String)
        With ActiveSheet.Range("B1:B895")
           Set c = .Find(strSearchString, LookIn:=xlValues)
           If Not c Is Nothing Then
            Valore = c.Value
            first = c.Address
            firstRow = c.Row
            firstCol = c.Column
                Do
                    Valore = Valore & ";" & c.Value
                    Set c = .FindNext(c)
                Loop While c Is Nothing And c.Address <> first
                 ActiveSheet.Cells(firstRow, firstCol + 1).Value = Valore
            End If
        End With
    End Function
    Sub Trova_e_Copia()
    '
    ' Trova_e_Copia Macro
    '
    For i = 1 To 332
        FindAllStrings (Range("A" & i).Value)
    Next i
    End Sub
    Il problema è che eseguendola non mi trova tutti i campi ma solo alcuni di essi a volte raddoppiandoli. ad esempio in C avrò qualcosa tipo

    C
    pippo_2;pippo_2
    paperino_1;paperino_1;
    pluto_1;pluto_2

    Stranezza è che provando con una cosa simile

    codice:
    With ActiveSheet.Range("B1:B895")
           Set c = .Find("pippo", LookIn:=xlValues)
           MsgBox(c.Value)
    End With
    appare il messaggio con pippo_2 e non con pippo_1.
    Invece se eseguo una ricerca tradizionale usando lo strumento messo a disposizione da Excel stesso, nessun problema, find mi trova la prima occorrenza, usando next passa alla seconda occorrenza, usando next all'eventuale terza occorrenza, senza problemi
    mi vien da pensare che non funzioni a dovere la funzione .find
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Il linguaggio usato nelle macro è VBA, non VB (di cui andrebbe, comunque, specificata la versione).

    In secondo luogo, tutti i figli del linguaggio VB vengono trattati nel forum "Visual Basic e .NET Framework".

    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.