Funziona Trova



  • Funziona Trova()
    di alfrimpa data: 01/09/2015 15:55:35

    Domandina facile facile.....

    Nella funzione Trova è possibile specificare, come secondo parametro, più di un carattere?

    Se si come?

    Grazie

    Alfredo




  • creazione macro
    di ludagi data: 01/09/2015 15:58:54

    ho un file e su di essa ho fatto una macro per testare quanto segue :



    1° memorizzo prezzo attuale

    2° se prezzo corrente - prezzo memorizzato >50 vendo

    2a° se gain = 40 chiudo gain

    2b° se loss = 15 chiudo in loss

    2c° memorizzo prezzo attuale

    oppure


    3° se prezzo corrente - prezzo memorizzato < 50 compro

    3a° se gain = 40 chiudo gain

    3b° se loss = 15 chiudo in loss

    3c° memorizzo prezzo attuale


    e ripeto ciclo

    ma la macro non da risultati razionali

    è possibile correggerla

    grazie


     
    Sub sim()
    
    Static g, l, v, a, p, s, x
    s = 40
    
    
    For i = 8 To 15000
    
    If x = 0 Then
    
    p = Range("$f$" & i)
    
    If Range("f" & i) - p >= 50 Then  ' vendi
    
    v = Range("$F$" & i)  ' prezzo di vendita
    x = 1
    
    
    
    If Range("f" & i) - p <= 50 Then 'acquista
    
    a = Range("$F$" & i)  'prezzo d'acquisto
    
    x = 1
    
    End If
    End If
    End If
    
    
    
    If x = 1 Then
    
    
    If Range("F" & i) - v <= -40 Then
    
    g = g + s
    
    p = Range("$f$" & i)
    x = 0
    Else
    
    If Range("F" & i) - v >= 15 Then
    
    l = l + 15
    
    p = Range("$f$" & i)
    
     x = 0
    Else
    
    If Range("F" & i) - a >= 40 Then
    
    g = g + s
    
    p = Range("$f$" & i)
    x = 0
    
    Else
    If Range("F" & i) - a <= -15 Then
    l = l + 15
    
    p = Range("$f$" & i)
    
    x = 0
    
    End If
    
    
    End If
    End If
    End If
    End If
    
    
    
    
    Next i
    
    Range("F1") = g
    
    Range("G1") = l
    
    'g = o
    
    'l = 0
    
    End Sub
    
    


  • creazione macro
    di ludagi data: 01/09/2015 15:59:36

    ho un file e su di essa ho fatto una macro per testare quanto segue :



    1° memorizzo prezzo attuale

    2° se prezzo corrente - prezzo memorizzato >50 vendo

    2a° se gain = 40 chiudo gain

    2b° se loss = 15 chiudo in loss

    2c° memorizzo prezzo attuale

    oppure


    3° se prezzo corrente - prezzo memorizzato < 50 compro

    3a° se gain = 40 chiudo gain

    3b° se loss = 15 chiudo in loss

    3c° memorizzo prezzo attuale


    e ripeto ciclo

    ma la macro non da risultati razionali

    è possibile correggerla

    grazie


     
    Sub sim()
    
    Static g, l, v, a, p, s, x
    s = 40
    
    
    For i = 8 To 15000
    
    If x = 0 Then
    
    p = Range("$f$" & i)
    
    If Range("f" & i) - p >= 50 Then  ' vendi
    
    v = Range("$F$" & i)  ' prezzo di vendita
    x = 1
    
    
    
    If Range("f" & i) - p <= 50 Then 'acquista
    
    a = Range("$F$" & i)  'prezzo d'acquisto
    
    x = 1
    
    End If
    End If
    End If
    
    
    
    If x = 1 Then
    
    
    If Range("F" & i) - v <= -40 Then
    
    g = g + s
    
    p = Range("$f$" & i)
    x = 0
    Else
    
    If Range("F" & i) - v >= 15 Then
    
    l = l + 15
    
    p = Range("$f$" & i)
    
     x = 0
    Else
    
    If Range("F" & i) - a >= 40 Then
    
    g = g + s
    
    p = Range("$f$" & i)
    x = 0
    
    Else
    If Range("F" & i) - a <= -15 Then
    l = l + 15
    
    p = Range("$f$" & i)
    
    x = 0
    
    End If
    
    
    End If
    End If
    End If
    End If
    
    
    
    
    Next i
    
    Range("F1") = g
    
    Range("G1") = l
    
    'g = o
    
    'l = 0
    
    End Sub
    
    


  • creazione macro
    di ludagi data: 01/09/2015 16:16:42

    fatto casino

    come si annulla discussione



  • di Luca73 data: 01/09/2015 16:17:40

    @ alfredo
    il secondo parametro di trova è la stringa in cui cercare, il primo è il testo da cercare
    =TROVA("fr";"Alfredo";1) dà come risultato 3

    @ ludagi
    hai risposto ad un altro intervento. se vuoi una risposta aprine uno nuovo.

    Ciao
    Luca





  • di alfrimpa data: 01/09/2015 16:29:07

    Si Luca mi sono espresso male e non ricordavo l'esatta sintassi di trova().

    Comunque se ho una stringa in A1 e devo trovare in questa o lo spazio o il trattino o lo slash (o altro carattere) come si scrive la funzione TROVA? (sempre che si possa fare).





  • di Luca73 data: 01/09/2015 16:40:39

    @ alfredo
    scusa non ho capito la tua domanda
    tu all'interno di una stringa vuoi sapere la posizione di quale carattere?
    Lui cerca uno o più caratteri in una stringa
    Cosa vuoi dire quando dici cercare "o spazio o il trattino o lo slash (o altro carattere) " intendi uno solo di quasti oppure se esiste uno tra quelli cercati oppure altro
    mi fai un esempio
    oltre a trova c'è anche ricerca.






  • di alfrimpa data: 01/09/2015 16:53:48

    Supponiamo di avere

    Luca 73 oppure
    Luca-73 oppure
    Luca/73

    Come si deve scrivere il TROVA o RICERCA per avere sempre 5?
    O si deve scrivere una UDF?

    Spero di essere stato chiaro

    Alfredo





  • di Luca73 data: 01/09/2015 16:54:58

    Ciao Alfredo con una matriciale ci sono riuscito in questa maniera
    =MIN(SE.ERRORE(TROVA({":","","/"," ","*"};"mia Stringa /*:_-");""))
    così ti restituisce la posizione del primo trovato, altrimenti con Max, piccolo o grande ti puoi gestire cercando qulla che vuoi (la prima, l'ultima, la seconda, la penultima...)

    Ciao
    Luca





  • di Luca73 data: 01/09/2015 16:59:54

    altre possibilità essendo sicuro di avere un solo carattere di quelli da ricercare
    =SE.ERRORE(TROVA(" ";A1;1);SE.ERRORE(TROVA("-";A1;1);SE.ERRORE(TROVA("/";A1;1);"CARATTERI NON TROVATI")))

    Ciao
    Luca





  • di alfrimpa data: 01/09/2015 17:02:53

    Grazie Luca

    Appena rientro a casa (sono ancora al mare ) ci provo anche se io con le formule (figuriamoci le matriciali) ho poco feeling.

    Mi sa che proverò con una bella UDF che mi cicli l'intera stringa e se trova uno dei caratteri mi restituisca la variabile i del ciclo for che non è altro che la posizione del carattere

    Alfredo






  • di Luca73 data: 01/09/2015 17:15:30

    Ciao Alfredo
    1) goditi il mare fin che puoi
    2) se poi hai ancora bisogno ....





  • di alfrimpa data: 01/09/2015 17:27:12

    Grazie Luca so che posso contare su te e gli altri

    Piuttosto cosa pensi del ragionamento sulla UDF? Dici che funzion?

    Alfredo





  • di alfrimpa data: 01/09/2015 19:01:01

    Ciao Luca

    Avrei pensato ad una cosa del genere che al momento non ho modo di provare.

    Alfredo
     
    Function MioTrova(a)
    Dim i as Integer
    For i = 1 to Len(a)
         If Mid(a, i, 1) = " " Or Mid(a, i, 1) = "-" Or Mid(a, i, 1) = "/" Then
               MioTrova = i
         End if
    Next i
    End Function






  • di Luca73 data: 02/09/2015 08:08:16

    Ciao alfredo la fomula che hai scritto trova l'ultimo dei caratteri cercati.
    Se volessi cercare il primo bisogna aggiungere un exit for dopo MioTrova = i

    Esempio abc def-ghi
    la tua forrmula direbbe 8 (ultimo trovato è il -) , con l'exit for darebbe 4 ovvero lo spazio

    Dipende da cosa cerchi.
    Ciao
    Luca





  • di scossa data: 02/09/2015 08:51:32

    Ciao,

    cit. Alfrimpa: "Avrei pensato ad una cosa del genere ...."

    sarebbe bene, quando si crea una UDF, pervedere un argomento per ogni parametro utilizzato, in questo modo non serve modificare il codice ogni volta.
    Nel tuo caso, quindi, passare anche i caratteri da cercare come argomento della chiamata:

    =uMioTrova(A1; " -/")



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)

     
    Function uMioTrova(ByVal sStr As String, ByVal sSearch As String) As Integer
    Dim i As Integer
    
    For i = 1 To Len(sStr)
      If InStr(sSearch, Mid(sStr, i, 1)) Then
        uMioTrova = i
        Exit For
      End If
    Next i
    
    End Function



  • di Luca73 data: 02/09/2015 09:20:30

    @ scossa
    complimenti mi stavi per ingannare....rovesciando il problema lo hai semplificato....






  • di alfrimpa data: 02/09/2015 11:40:44

    Grazie a Luca e scossa.

    Come al solito l'avevo fatta troppo semplice ma le mie conoscenze (artigianali del VBA) sono ancora assai lontane dalle vostre.

    Alfredo