Discussione:
trova in vba
(troppo vecchio per rispondere)
o***@libero.it
2015-11-03 15:28:41 UTC
Permalink
Salve,
ho un foglio che è composto da un migliaio di righe.
Con una macro che ho creato verifico che se una riga risponde a determinate condizioni.
Sin qui ce l'ho fatta.
Le righe individuate sono in formato testo e io ho la necessità di estrarre la prima parte di questo testo sino al carattere (codice 149) che è presente in tutte le righe.
Ora in excel userei la funzione trova per individuare la posizione del carattere desiderato e con l'istruzione "sinistra" avrei belle e fatta la mia nuova stringa.
Ma purtroppo non conosco l'equivalente di "trova" in vba.
Come fare?
Grazie
Pino
casanmaner
2015-11-03 16:45:08 UTC
Permalink
Post by o***@libero.it
Salve,
ho un foglio che è composto da un migliaio di righe.
Con una macro che ho creato verifico che se una riga risponde a determinate condizioni.
Sin qui ce l'ho fatta.
Le righe individuate sono in formato testo e io ho la necessità di estrarre la prima parte di questo testo sino al carattere (codice 149) che è presente in tutte le righe.
Ora in excel userei la funzione trova per individuare la posizione del carattere desiderato e con l'istruzione "sinistra" avrei belle e fatta la mia nuova stringa.
Ma purtroppo non conosco l'equivalente di "trova" in vba.
Come fare?
Grazie
Pino
Una soluzione per conoscere il nome delle funzioni excel in vba è iniziare la registrazione di una macro, inserire in una cella la formula e poi andare a vedere cosa è stato registrato.
Da lì utilizzare la funzione vba tramite application.worksheetsfunction.nomefunzionevba

Ad es. TROVA corrisponde a FIND

Quindi con application.worksheetfunction.find, tramite i suoi argomenti, trovare la posizione del carattere che ti interessa.
Bruno Campanini
2015-11-03 16:57:11 UTC
Permalink
Post by o***@libero.it
Salve,
ho un foglio che è composto da un migliaio di righe.
Con una macro che ho creato verifico che se una riga risponde a determinate
condizioni. Sin qui ce l'ho fatta.
Le righe individuate sono in formato testo e io ho la necessità di estrarre
la prima parte di questo testo sino al carattere (codice 149) che è presente
in tutte le righe. Ora in excel userei la funzione trova per individuare la
posizione del carattere desiderato e con l'istruzione "sinistra" avrei belle
e fatta la mia nuova stringa. Ma purtroppo non conosco l'equivalente di
"trova" in vba. Come fare? Grazie Pino
Puoi usare la funzione VBA InStr().
=============================================
Public Sub Find149()
Dim SR As Range, SearchKey As String
Dim i, S As String

Set SR = [Sheet4!A1]
Set SR = Range(SR, SR.End(xlDown))
SearchKey = "•"

For Each i In SR
S = Left(i, InStr(1, i, SearchKey) - 1)
MsgBox S
Next

End Sub
==========================================

Bruno
casanmaner
2015-11-03 17:10:42 UTC
Permalink
Post by Bruno Campanini
Post by o***@libero.it
Salve,
ho un foglio che è composto da un migliaio di righe.
Con una macro che ho creato verifico che se una riga risponde a determinate
condizioni. Sin qui ce l'ho fatta.
Le righe individuate sono in formato testo e io ho la necessità di estrarre
la prima parte di questo testo sino al carattere (codice 149) che è presente
in tutte le righe. Ora in excel userei la funzione trova per individuare la
posizione del carattere desiderato e con l'istruzione "sinistra" avrei belle
e fatta la mia nuova stringa. Ma purtroppo non conosco l'equivalente di
"trova" in vba. Come fare? Grazie Pino
Puoi usare la funzione VBA InStr().
=============================================
Public Sub Find149()
Dim SR As Range, SearchKey As String
Dim i, S As String
Set SR = [Sheet4!A1]
Set SR = Range(SR, SR.End(xlDown))
SearchKey = "*"
For Each i In SR
S = Left(i, InStr(1, i, SearchKey) - 1)
MsgBox S
Next
End Sub
==========================================
Bruno
Ovviamente funziona :-)
Però dà errore se trova una stringa senza il carattere 149.
Io ho ovviato così:
==================
Public Sub Find149()
Dim SR As Range, SearchKey As String
Dim i, S As String

Set SR = [Foglio1!A1]
Set SR = Range(SR, SR.End(xlDown))
SearchKey = "*"

For Each i In SR
On Error GoTo Next_i
S = Left(i, InStr(1, i, SearchKey) - 1)
MsgBox S
Next_i:
Next

End Sub
=================

facendo "saltare" il "ciclo" (detta così può far pensare ad una fanciulla nei guai :-D) nel caso non trovi il carattere ricercato
Bruno Campanini
2015-11-03 17:24:18 UTC
Permalink
Post by casanmaner
Post by Bruno Campanini
Post by o***@libero.it
Salve,
ho un foglio che è composto da un migliaio di righe.
Con una macro che ho creato verifico che se una riga risponde a determinate
condizioni. Sin qui ce l'ho fatta.
Le righe individuate sono in formato testo e io ho la necessità di estrarre
la prima parte di questo testo sino al carattere (codice 149) che è
presente in tutte le righe. Ora in excel userei la funzione trova per
individuare la posizione del carattere desiderato e con l'istruzione
"sinistra" avrei belle e fatta la mia nuova stringa. Ma purtroppo non
conosco l'equivalente di "trova" in vba. Come fare? Grazie Pino
Puoi usare la funzione VBA InStr().
=============================================
Public Sub Find149()
Dim SR As Range, SearchKey As String
Dim i, S As String
Set SR = [Sheet4!A1]
Set SR = Range(SR, SR.End(xlDown))
SearchKey = "*"
For Each i In SR
S = Left(i, InStr(1, i, SearchKey) - 1)
MsgBox S
Next
End Sub
==========================================
Bruno
Ovviamente funziona :-)
Però dà errore se trova una stringa senza il carattere 149.
==================
Public Sub Find149()
Dim SR As Range, SearchKey As String
Dim i, S As String
Set SR = [Foglio1!A1]
Set SR = Range(SR, SR.End(xlDown))
SearchKey = "*"
For Each i In SR
On Error GoTo Next_i
S = Left(i, InStr(1, i, SearchKey) - 1)
MsgBox S
Next
End Sub
=================
facendo "saltare" il "ciclo" (detta così può far pensare ad una fanciulla nei
guai :-D) nel caso non trovi il carattere ricercato
Sì, non vi ho posto attenzione perché l'OP ha dichiarato:
"(codice 149) che è presente in tutte le righe".

Comunque, sempre per eccesso di zelo, si può
anche prevedere che Alt-0149 sia il primo carattere
o che possa apparire più volte nella stringa...

Bruno
casanmaner
2015-11-03 18:13:29 UTC
Permalink
In effetti io ho pensato che la tua procedura potesse essere unica per passare tutte le celle di Pino che potrebbero anche non contenere il carattere ricercato e non solo quelle già in precedenza individuate e che contegono per certo il carattere.
A meno che anche tutte le altre contengano sempre il carattere 149 e la selezione iniziale venga effettuata in base ad altri criteri.
o***@libero.it
2015-11-04 09:14:18 UTC
Permalink
Post by casanmaner
In effetti io ho pensato che la tua procedura potesse essere unica per passare tutte le celle di Pino che potrebbero anche non contenere il carattere ricercato e non solo quelle già in precedenza individuate e che contegono per certo il carattere.
A meno che anche tutte le altre contengano sempre il carattere 149 e la selezione iniziale venga effettuata in base ad altri criteri.
Grazie per le risposte.
In effetti il carattere cercato è presente in tutte le righe e non c'è il pericolo che la routine si blocchi ma tutto è utile per altre applicazioni.
Pino

Continua a leggere su narkive:
Loading...