Cerca un valore



  • Cerca un valore
    di Giorgum (utente non iscritto) data: 11/06/2015 15:33:53

    Ciao a tutti, ho un problema. Ho una serie di nomi di valute nelle colonne di excel, avrei bisogno di una funzione che cerca nell'insieme delle etichette e mi restituisca il numero della colonna, oppure -1 se non lo trova. Purtroppo il mio if non riesce a fare mai matching.
    vi riporto il programma che ho provato a scrivere, la funzione la richiamo poi con una main.
    Grazie in anticipo.
     
    Function ricerca(lab As Range, ByVal etichetta As String) As Integer
        
        Dim f As Integer
        Dim c As Integer
        
        
        
           'Rem v = InputBox("Tell me, the currency you need"))
            f = -1
            
            For c = 1 To lab.Columns.Count Step 1
        
                If lab.Cells(1, c).Value Like "*" & etichetta & "*" Then
                    f = c
                End If
            
            ricerca = f
            Next c
            
     End Function
    
      Set dset = Range("A2 : N100") 'a)identifico il set di dati, nel foglio di lavoro da elaborare;
        
        Dim cambio As String
        Dim x As Integer
        
        
        
            cambio = InputBox("Che valuta stai cercando?") 'b)richiesta dell'utente 'chiedo all'utente la valuta da analizzare
            
            x = ricerca(Range(dset.Cells(1, 2), dset.Cells(1, 13)), cambio)
            
            If x = -1 Then
            
            MsgBox ("Non è stato possibile procedere!")
            
            ElseIf MsgBox("colonna = " & x) Then
            
            End If
            
            
            
            
            MsgBox ("Elaborazione Terminata") 'informa l'utente che l'elaborazione è terminata
        
        
        
        
        
        
    End Sub
    
    



  • di Marius44 data: 11/06/2015 22:01:58

    E' sempre consigliabile allegare un file.
    Nel tuo listato vi sono delle "cose" che chi legge non può capire (forse derivano dalla macro Main?) ad esempio:
    For c = 1 To lab.Columns.Count Step 1 - premesso che Step 1 è inutile, cos'è lab.Columns.Count?
    If lab.Cells(1, c).Value Like "*" & etichetta & "*" Then - lab. vedi sopra; cos'è "etichetta"?
    Resto dell'idea che è meglio un file di prova.
    Ciao
    Mario



  • di Giorgum data: 11/06/2015 23:46:36

    Ciao Mario, prima di tutto grazie per la risposta.
    Scusa per le mie incomprensioni, comunque ho allegato alla discussione il file di prova.
    "lab.Columns.Count " è il conteggio di tutte le colonne del range da me fornito, in "etichetta" inserisco la parola che devo cercare nella serie di colonne.
    La funzione che vorrei cercare di fare è simile a un cerca verticale, nel quale inserendo una parola da cercare, anche simile al testo riportato nella colonna(motivo del "like") mi restituisce il numero di colonna dove ha fatto il matching, altrimenti -1 se non trova nulla.
    Ho provato poi a richiamare la funzione tramite una main() dove gli fornivo tutti gli argomenti.
    Spero sia più chiaro con i file allegato.
    Ciao
    Giorgio



  • di Marius44 data: 12/06/2015 09:34:01

    Andiamo con ordine.
    1) Metti all'inizio del modulo "Option Compare Text"; anche se l'inserimento è in minuscolo trova la moneta;
    2) "Set dset = Range("A2 : N100") 'a)identifico il set di dati, nel foglio di lavoro da elaborare; " ma il tuo foglio comincia da A1, altrimenti la ricerca della moneta parte dalla riga 2;
    3) cambia il ciclo della funzione come sotto indicato al punto 1 (altrimenti quando trova la moneta continua a cercare);
    4) cambia la sezione IF come sotto indicato al punto 2
    Infine io avrei adottato un altro sistema: avrei aggiunto una colonna (col.A); quindi in A1 avrei indicato "Inserire il nome della moneta cercata in A2 e una data in A3; poi selezionare CERCA"; Nella cella A4 avrei indicato "CERCA".
    Nella cella A2, con Convalida dati, avrei inserito tutti i nomi delle monete (basta un clic per selezionarne una).
    A questo punto avrei elaborato la tua ricerca in Worksheet_SelectionChange del foglio facendo trovare riga (data) e colonna (moneta) e l'avrei fatta selezionare.
    Fammi sapere.
    Ciao,
    Mario
     
    punto 1        
    For c = 1 To lab.Columns.Count
        If lab.Cells(1, c) Like "*" & etichetta & "*" Then
            f = c: GoTo 1
        End If
    1   ricerca = f: If ricerca > 0 Then Exit For
    Next c
    
    punto 2
    If x = -1 Then
        MsgBox ("Non è stato possibile procedere!")
    Else
        MsgBox ("colonna = " & x)
    End If



  • di Giorgum data: 12/06/2015 17:05:37

    Grazie mille Mario, ora la Msgbox mi restituisce il numero di colonna!
    Il sistema alternativo che avresti preferito adottare sembra molto interessante ma per il momento sono molto soddisfatto così,e per il mio livello, penso sia anche un po' più complessa.
    Grazie ancora, Ciao
    Giorgio.



  • di Marius44 data: 12/06/2015 18:17:02

    Ciao Giorgio,
    in informatica mai desistere e mai accontentarsi. Si può sempre migliorare.
    Ti allego il tuo file nel quale ho inserito una colonna (col.A); nella cella A3 vi è l'elenco delle monete (con Convalida Dati); nella cella A6 occorre inserire una data (se vuoi sempre con Convalida Dati puoi indicare l'elenco); infine nella cella A9 vi è una formula (fra le tante possibili) che reperisce il dato cercato immediatamente.
    Prova e dimmi se ti piace. Se per te va bene non dimenticare di fleggare RISOLTO.
    Ciao,
    Mario



  • di Giorgum data: 12/06/2015 19:11:20

    Molto bello, complimenti, e grazie per l'incoraggiamento,è stato per me di notevole aiuto, a risentirci.
    Ciao,
    Giorgio.