Risultati da 1 a 14 di 14

Discussione: funzione Instr



  1. #1
    L'avatar di Lelex
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Parma
    Messaggi
    4
    Versione Office
    Office 2013
    Likes ricevuti
    0
    Likes dati
    0

    funzione Instr

    Ciao a tutti,
    ho un problema con la funzione InStr che uso per estrarre uno o più caratteri da una stringa.
    Il problema è che non riesce a distinguere alcuni caratteri, in particolare mi restituisce uguale "N"="Nx"; "Sw"="Sx"; "Y3"="Y3a".

    ho provato in mille modi ma niente da fare...

    applico questo codice, dove K è un array di valori e A una stringa di testo tipo: "VFNxY3aTmTv"

    Codice: 
    If InStr(A, RES(K)) >= 1 Then Workbooks("confronto.xlsm").Sheets("foglio2").Cells(cont, 1) = RES(K)
    ho provato modificandola così ma nulla:
    Codice: 
    I = Len(RES(K))
    If InStr(I, A, RES(K), vbTextCompare) >= 1 Then Workbooks("confronto_linee.xlsm").Sheets("foglio2").Cells(cont, 1) = RES(K)
    come posso senza fargli fare i lunghi e macchinosi cicli (do, for ect) a fargli capire che N e diverso da Nx?

    avete un'idea?

    grazie

  2. #2
    L'avatar di Oregon
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Messaggi
    43
    Versione Office
    2007
    Likes ricevuti
    11
    Likes dati
    0
    Ma tu cosa vorresti fare esattamente? Forse non hai compreso come funziona la Instr ...

  3. #3
    L'avatar di Lelex
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Parma
    Messaggi
    4
    Versione Office
    Office 2013
    Likes ricevuti
    0
    Likes dati
    0
    Ciao Oregon,
    beh che sappia io la funzione InStr credo di conoscerla, forse non in modo approfondito ma nella macro fa quello che deve fare e per cui è stata pensata...ma forse credo d'essermi spiegato male.
    In sostanza ti porto alcuni esempi così ci intendiamo

    Data la stringa "VFNY3aTmTv"

    applicando la funzione posso avere questi casi:

    1° caso InStr(
    "VFNY3aTmTv", Res("N")= darà come risultato 3

    2° caso InStr("VFNY3aTmTv", Res("F") = darà come risultato 2

    3° caso InStr("VFNY3aTmTv", Res("F2") = darà come risultato 0 (ovvero dato non trovato)

    assodato questo...il mio problema era che se cerco invece "Nx"

    4° caso InStr("VFNY3aTmTv", Res("Nx")= darà come risultato 3 anche se in realtà la stringa "Nx" non c'è.

    siccome io non posso andare a modificare le stringhe con le funzioni UCASE o LCASE volevo sapere se c'era un'altro metodo per discriminare. In sostanza InStr sembra leggere solo le lettere maiuscole e non considerare le minuscole. Lo stesso vale applicando il vbTextCompare



  4. #4
    L'avatar di TuttoExcel
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Milano
    Età
    43
    Messaggi
    82
    Versione Office
    Excel 2013
    Likes ricevuti
    19
    Likes dati
    3
    Ciao, provo anche io ad aiutarti, però ho una romanda Res() è una tua funzione? Cosa ti restituisce?

    Perché se tu usi InStr in questo modo:

    InStr(1, "VFNY3aTmTv", "n", vbTextCompare)

    avrei come risultato 3 anche se la "n" è minuscola, se elimini il vbTextCompare invece avrai come risultato 0. Inoltre ti consiglio di usare anche il primo parametro di InStr che determina la posizione da cui iniziare.

  5. #5
    L'avatar di Lelex
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Parma
    Messaggi
    4
    Versione Office
    Office 2013
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da TuttoExcel Visualizza Messaggio
    Ciao, provo anche io ad aiutarti, però ho una romanda Res() è una tua funzione? Cosa ti restituisce?

    Perché se tu usi InStr in questo modo:

    InStr(1, "VFNY3aTmTv", "n", vbTextCompare)

    avrei come risultato 3 anche se la "n" è minuscola, se elimini il vbTextCompare invece avrai come risultato 0. Inoltre ti consiglio di usare anche il primo parametro di InStr che determina la posizione da cui iniziare.

    Ciao e grazie per la risposta.
    Allora, ho omesso un pò di informazioni... RES è un'array di 21 stringhe che poi con ciclo for vado a estrarre dalla stringa di riferimento.
    I valori di RES quindi sono tipo "N", "V", F", "F2", "Nx" e via dicendo...

    quello che tu proponi era una delle opzioni a cui avevo pensato anche io purtroppo per me cercando la seconda lettera minuscola mi crea confusione in quanto (e purtroppo) anch'essa si ripete. In particolare ho problemi in questi casi:

    "N" e "Nx" - "Sw" e "Sx" - "Y3" e "Y3a"

    InStr non considerando la lettera minuscola dopo la 1° lettera maiuscola mi crea solo che casini...

    come risolvere?

  6. #6
    L'avatar di TuttoExcel
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Milano
    Età
    43
    Messaggi
    82
    Versione Office
    Excel 2013
    Likes ricevuti
    19
    Likes dati
    3
    Per te sarebbe un problema allegare un file con la macro? Ciò che mi dici risulta molto strano oppure non ho capito a fondo il problema.

  7. #7
    L'avatar di Oregon
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Messaggi
    43
    Versione Office
    2007
    Likes ricevuti
    11
    Likes dati
    0
    Citazione Originariamente Scritto da Lelex Visualizza Messaggio
    Ciao Oregon,
    beh che sappia io la funzione InStr credo di conoscerla,
    Il fatto è che se tu cerchi

    "Nx"

    nella stringa

    "VFNY3aTmTv"

    questa ti restituirà 0

    Se, come dici, restituisce 3 vuol dire che stai cercando "N" e qualcosa non funziona nel vettore di cui parli (e che non ho sinceramente capito come funziona ...).

  8. #8
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    a me viene questo, come infatti dovrebbe essere
    Codice: 
    Sub prova()
    
    caso1 = InStr("VFNY3aTmTv", "N") 'risultato 3
    
    caso2 = InStr("VFNY3aTmTv", "F") 'risultato 2
    
    caso3 = InStr("VFNY3aTmTv", "F2") 'risultato 0
    
    caso4 = InStr("VFNY3aTmTv", "Nx") 'risultato 0
    
    caso5 = InStr("VFNY3aTmTv", "NY") 'risultato 3
    
    caso6 = InStr("VFNY3aTmTv", "NY3") 'risultato 3
    
    caso7 = InStr("VFNY3aTmTv", "M") 'risultato 0
    
    caso8 = InStr("VFNY3aTmTv", "m") 'risultato 8
    
    caso9 = InStr("nFNY3aTmTv", "N") 'risultato 3
    
    caso10 = InStr("nFNY3aTmTv", "n") 'risultato 1
    
    End Sub
    penso che il problema sia su quel RES(

  9. #9
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    Codice: 
    Sub prova()
        Dim RES(14) As String, A As String, i As Integer, p As Integer
        RES(1) = "N"
        RES(2) = "V"
        RES(3) = "F"
        RES(4) = "F2"
        RES(5) = "Nx"
        RES(6) = "Sw"
        RES(7) = "Sx"
        RES(8) = "Y3"
        RES(9) = "Y3a"
        RES(10) = "t"
        RES(11) = "T"
        RES(12) = "Tv"
        RES(13) = "TV"
        RES(14) = "3A"
        
        A = "VFNY3aTmTv"
        
        For i = 1 To 14
            p = InStr(A, RES(i))
               Cells(i, 1) = RES(i)
               Cells(i, 2) = p
            If p > 0 Then
               Cells(i, 3) = "OK"
            Else
               Cells(i, 3) = "NO"
            End If
        Next i
    End Sub
    N 3 OK
    V 1 OK
    F 2 OK
    F2 0 NO
    Nx 0 NO
    Sw 0 NO
    Sx 0 NO
    Y3 4 OK
    Y3a 4 OK
    t 0 NO
    T 7 OK
    Tv 9 OK
    TV 0 NO
    3A 0 NO

  10. #10
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    815
    Versione Office
    2016 64bit
    Likes ricevuti
    147
    Likes dati
    53
    zio_tom, prendo in prestito la tua macro per confermare a Lelex che la sua è una battaglia persa.
    Con una stringa tipo:
    "VFNY3aTmTv"
    saranno sempre "vere" queste condizioni:

    Y 4 OK
    Y3 4 OK
    Y3a 4 OK

  11. #11
    L'avatar di Oregon
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Messaggi
    43
    Versione Office
    2007
    Likes ricevuti
    11
    Likes dati
    0
    Citazione Originariamente Scritto da Lelex Visualizza Messaggio
    come risolvere?
    Io ancora non ho capito il problema.

    Tu hai una stringa e devi cercare un'altra stringa al suo interno. Vuoi spiegare le varie situazioni un po' meglio?

  12. #12
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3211
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Buon giorno a tutti
    O non ho capito qual'è il problema o non ho capito come agisce la funzione InStr. Riporto quanto indicato nella Guida di VBA
    Funzione InStrRestituisce un valore Variant (Long) che specifica la posizione della prima occorrenza di una stringa all'interno di un'altra.
    Sintassi
    InStr([inizio, ]stringa1, stringa2[, confronto])
    Ora, se io in dico "N" oppure "Nx" mi dovrebbe indicare SEMPRE la stessa posizione. Cosa non ho capito?
    Grazie anticipato a chi vorrà rispondermi.
    Ciao,
    Mario

  13. #13
    L'avatar di TuttoExcel
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Milano
    Età
    43
    Messaggi
    82
    Versione Office
    Excel 2013
    Likes ricevuti
    19
    Likes dati
    3
    Citazione Originariamente Scritto da Marius44 Visualizza Messaggio
    Buon giorno a tutti
    O non ho capito qual'è il problema o non ho capito come agisce la funzione InStr. Riporto quanto indicato nella Guida di VBA


    Ora, se io in dico "N" oppure "Nx" mi dovrebbe indicare SEMPRE la stessa posizione. Cosa non ho capito?
    Grazie anticipato a chi vorrà rispondermi.
    Ciao,
    Mario
    Eh no... perché in "VFNY3aTmTv" non c'è Nx, hai NY.. non confronta solo una parte della seconda stringa, la confronta tutta
    Condividi la tua conoscenza. E’ un modo per raggiungere l’immortalità. (Dalai Lama)
    Amministratore di www.tuttoexcel.it

  14. #14
    L'avatar di Oregon
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Messaggi
    43
    Versione Office
    2007
    Likes ricevuti
    11
    Likes dati
    0
    Citazione Originariamente Scritto da Marius44 Visualizza Messaggio
    Ora, se io in dico "N" oppure "Nx" mi dovrebbe indicare SEMPRE la stessa posizione.
    Sì, a patto che nella stringa sia presente Nx

    Se non c'è ma trovi NY o altro, ovviamente Nx non sarà trovata mentre N sì

Discussioni Simili

  1. Funzione indice/confronta all'interno della Funzione "O" ed "E"
    Di Rosaria79 nel forum Domande su Excel in generale
    Risposte: 6
    Ultimo Messaggio: 28/06/16, 20:57

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •