Discussione:
VBA: cercare una parola in una frase
(troppo vecchio per rispondere)
draleo
2018-09-22 09:38:34 UTC
Permalink
Nella col U (da U2 a scendere) ho una serie di frasi. Dovrei cercare cella per cella se contengono la parola Libretto. Se questa parola esiste nella frase , allora la rispettiva cella della colonna G dovrebbe assumere il valore Libretto. Ho provato e riprovato ma non ne riesco a venire a capo
Chi mi aiuta ?
Bruno Campanini
2018-09-22 10:56:03 UTC
Permalink
Post by draleo
Nella col U (da U2 a scendere) ho una serie di frasi. Dovrei cercare cella
per cella se contengono la parola Libretto. Se questa parola esiste nella
frase , allora la rispettiva cella della colonna G dovrebbe assumere il
valore Libretto. Ho provato e riprovato ma non ne riesco a venire a capo Chi
mi aiuta ?
Prova così:
==============================
Public Sub SearchInCell()
Dim rng As Range, i
Set rng = [Sheet4!U3:U21]
For Each i In rng
On Error Resume Next
i(1, -13) = Mid(i, WorksheetFunction.Search("Libretto", i), 8)
Next
End Sub
==============================

Bruno
draleo
2018-09-22 18:16:35 UTC
Permalink
Ok Grazie. Funziona molto bene. Draleo
Mauro Furlanetto
2018-09-25 09:59:09 UTC
Permalink
salve ho provato la sub ma non mi funziona , ho copiato il codice e confermato con alt+q , lo lancio e mi dà "necessario oggetto" . ovviamente nella colonna U c'è scritto Libretto in tutte le celle ......cosa può essere ???

Excel 2003

grazie
Bruno Campanini
2018-09-25 10:23:19 UTC
Permalink
Post by Mauro Furlanetto
salve ho provato la sub ma non mi funziona , ho copiato il codice e
confermato con alt+q , lo lancio e mi dà "necessario oggetto" . ovviamente
nella colonna U c'è scritto Libretto in tutte le celle ......cosa può essere
???
Excel 2003
Non saprei... è talmente semplice il tutto!

Non sono in grado di verificare con Excel 2003, ma prova
a sostituire Set rng = ... con:

Set rng = Sheets("Sheet4").Range("U3:U21")

Bruno
Mauro Furlanetto
2018-09-25 20:16:06 UTC
Permalink
Post by Bruno Campanini
Set rng = Sheets("Sheet4").Range("U3:U21")
ho provato a cambiare con questa e dando Sheet1 ma mi da errore "indice non incluso nell'intervallo " :(
draleo
2018-09-25 20:28:49 UTC
Permalink
Post by Mauro Furlanetto
Post by Bruno Campanini
Set rng = Sheets("Sheet4").Range("U3:U21")
ho provato a cambiare con questa e dando Sheet1 ma mi da errore "indice non incluso nell'intervallo " :(
Così:
Set rng = Worksheets("NometuoFoglio").Range("U3:U21") 'metti il nome del tuo foglio
oppure se l'operazione va fatta sul foglio attivo
Set rng = Activesheet.Range("U3:U21")

draleo
Mauro Furlanetto
2018-09-26 06:30:34 UTC
Permalink
Post by draleo
Post by Mauro Furlanetto
Post by Bruno Campanini
Set rng = Sheets("Sheet4").Range("U3:U21")
ho provato a cambiare con questa e dando Sheet1 ma mi da errore "indice non incluso nell'intervallo " :(
Set rng = Worksheets("NometuoFoglio").Range("U3:U21") 'metti il nome del tuo foglio
oppure se l'operazione va fatta sul foglio attivo
Set rng = Activesheet.Range("U3:U21")
draleo
alla fine con questa funziona "Set rng = Worksheets("Foglio1").Range("u3:u21")"

adesso vi chiedo una ultima cosa :se volessi rendere la sub più flessibile , per esempio decidendo su che colonna o cella copiare la parola come dovrei fare ???
per dire il range dove cercare è chiaro ma non capisco il comando di copiare nella colonna G

grazie mille
draleo
2018-09-26 08:36:15 UTC
Permalink
Post by Mauro Furlanetto
Post by draleo
Post by Mauro Furlanetto
Post by Bruno Campanini
Set rng = Sheets("Sheet4").Range("U3:U21")
ho provato a cambiare con questa e dando Sheet1 ma mi da errore "indice non incluso nell'intervallo " :(
Set rng = Worksheets("NometuoFoglio").Range("U3:U21") 'metti il nome del tuo foglio
oppure se l'operazione va fatta sul foglio attivo
Set rng = Activesheet.Range("U3:U21")
draleo
alla fine con questa funziona "Set rng = Worksheets("Foglio1").Range("u3:u21")"
adesso vi chiedo una ultima cosa :se volessi rendere la sub più flessibile , per esempio decidendo su che colonna o cella copiare la parola come dovrei fare ???
per dire il range dove cercare è chiaro ma non capisco il comando di copiare nella colonna G
grazie mille
l'istruzione
i(1, -13)
ti dice che la parola libretto va messa nella cella posizionata 13 colonne prima (13 infatti è il num di colonne che separano la col U dalla G escludendo le 2 col estreme U e G)
draleo
casanmaner
2018-09-26 09:02:49 UTC
Permalink
Post by Mauro Furlanetto
adesso vi chiedo una ultima cosa :se volessi rendere la sub più flessibile ,
Volendo qualcosa di più elaborato ma forse che consente una certa "flessibilità" prova qualcosa del genere:

Sub TrovaParola()

Const sFoglio As String = "Foglio1"
Const iPrimaRigaDati As Long = 2
Const sColonnaRicerca As String = "U"
Const sColonnaScrittura As String = "G"
Const sParolaDaRicercare As String = "Libretto"

Dim Wb As Workbook
Dim Ws As Worksheet
Dim SrcRng As Range
Dim UltimaRiga As Long
Dim arrRicerca As Variant
Dim arrScrittura As Variant
Dim i As Long, NumRec As Long

Set Wb = ThisWorkbook
Set Ws = Wb.Worksheets(sFoglio)

With Ws
Set SrcRng = .Columns(sColonnaRicerca)
UltimaRiga = Application.Max(SrcRng.Find(What:="*", _
After:=SrcRng.Cells(1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row, iPrimaRigaDati)
With .Cells(iPrimaRigaDati, sColonnaRicerca). _
Resize(UltimaRiga - iPrimaRigaDati + 1)
arrRicerca = .Value
NumRec = .Rows.Count
End With
arrScrittura = .Cells(iPrimaRigaDati, sColonnaScrittura). _
Resize(UltimaRiga - iPrimaRigaDati + 1).Formula
For i = 1 To NumRec
If NumRec > 1 Then
If arrRicerca(i, 1) Like "*" & sParolaDaRicercare & "*" Then
arrScrittura(i, 1) = sParolaDaRicercare
End If
Else
If arrRicerca Like "*" & sParolaDaRicercare & "*" Then
arrScrittura = sParolaDaRicercare
End If
End If
Next i
.Cells(iPrimaRigaDati, sColonnaScrittura). _
Resize(UltimaRiga - iPrimaRigaDati + 1).Formula = arrScrittura
End With

End Sub
Mauro Furlanetto
2018-09-26 11:57:30 UTC
Permalink
Post by casanmaner
Post by Mauro Furlanetto
adesso vi chiedo una ultima cosa :se volessi rendere la sub più flessibile ,
Sub TrovaParola()
Const sFoglio As String = "Foglio1"
Const iPrimaRigaDati As Long = 2
Const sColonnaRicerca As String = "U"
Const sColonnaScrittura As String = "G"
Const sParolaDaRicercare As String = "Libretto"
Dim Wb As Workbook
Dim Ws As Worksheet
Dim SrcRng As Range
Dim UltimaRiga As Long
Dim arrRicerca As Variant
Dim arrScrittura As Variant
Dim i As Long, NumRec As Long
Set Wb = ThisWorkbook
Set Ws = Wb.Worksheets(sFoglio)
With Ws
Set SrcRng = .Columns(sColonnaRicerca)
UltimaRiga = Application.Max(SrcRng.Find(What:="*", _
After:=SrcRng.Cells(1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row, iPrimaRigaDati)
With .Cells(iPrimaRigaDati, sColonnaRicerca). _
Resize(UltimaRiga - iPrimaRigaDati + 1)
arrRicerca = .Value
NumRec = .Rows.Count
End With
arrScrittura = .Cells(iPrimaRigaDati, sColonnaScrittura). _
Resize(UltimaRiga - iPrimaRigaDati + 1).Formula
For i = 1 To NumRec
If NumRec > 1 Then
If arrRicerca(i, 1) Like "*" & sParolaDaRicercare & "*" Then
arrScrittura(i, 1) = sParolaDaRicercare
End If
Else
If arrRicerca Like "*" & sParolaDaRicercare & "*" Then
arrScrittura = sParolaDaRicercare
End If
End If
Next i
.Cells(iPrimaRigaDati, sColonnaScrittura). _
Resize(UltimaRiga - iPrimaRigaDati + 1).Formula = arrScrittura
End With
End Sub
la vedo un pò dura capire questa am ci provo

grazie mille e tutti
casanmaner
2018-09-26 13:04:05 UTC
Permalink
Post by Mauro Furlanetto
la vedo un pò dura capire questa am ci provo
Queste sono le costanti i cui valori possono essere personalizzati

Const sFoglio As String = "Foglio1"
Const iPrimaRigaDati As Long = 2
Const sColonnaRicerca As String = "U"
Const sColonnaScrittura As String = "G"
Const sParolaDaRicercare As String = "Libretto"

Dove sFoglio rappresenta il nome del foglio su cui sono presenti i dati.
iPrimaRigaDati è la riga da cui iniziano i dati da elaborare.
sColonnaRicerca è la colonna dove sono presenti le stringhe in cui cercare la parola "chiave".
sColonnaScrittura è la colonna in cui riportare la parola chiave nel caso in cui venga trovata in una cella della colonna di ricerca.
sParolaDaRicercare è la parola chiave da certare e scrivere.
Gianky
2018-09-26 18:30:28 UTC
Permalink
Buonasera (ciao Mauro)
Dico la mia, per rendere dinamici i parametri non si potrebbe aprire una form e e prendere da lì i dati immessi dall’utente?
casanmaner
2018-09-25 21:54:51 UTC
Permalink
Post by Mauro Furlanetto
Post by Bruno Campanini
Set rng = Sheets("Sheet4").Range("U3:U21")
ho provato a cambiare con questa e dando Sheet1 ma mi da errore "indice non incluso nell'intervallo " :(
Eh, grazie tanto :)
Magari perché tu hai una versione in italiano dove ai fogli viene assegnato il nome e il codename in italiano e quindi Foglio1.
Dove il nome è quello inserito nella "linguetta" (scheda) da interfaccia utente della cartella di lavoro e il codename è il nome dell'oggetto Sheet nel progetto VBA.
Loading Image...

Loading Image...
casanmaner
2018-09-25 22:00:19 UTC
Permalink
Post by casanmaner
Post by Mauro Furlanetto
Post by Bruno Campanini
Set rng = Sheets("Sheet4").Range("U3:U21")
ho provato a cambiare con questa e dando Sheet1 ma mi da errore "indice non incluso nell'intervallo " :(
Eh, grazie tanto :)
Magari perché tu hai una versione in italiano dove ai fogli viene assegnato il nome e il codename in italiano e quindi Foglio1.
Dove il nome è quello inserito nella "linguetta" (scheda) da interfaccia utente della cartella di lavoro e il codename è il nome dell'oggetto Sheet nel progetto VBA.
https://www.dropbox.com/s/ot05u7ppu1gfqxw/Screenshot%202018-09-25%2023.47.38.png?dl=0
https://www.dropbox.com/s/hdtn0k0qksrc0qk/Screenshot%202018-09-25%2023.47.45.png?dl=0
Però devo correggermi :)
Con questa forma
[Sheet4!U3:U21]
il riferimento non è al codename ma al nome utente.

il riferimento al codename sarebbe in questa forma:
Sheet4.[U3:U21]
casanmaner
2018-09-25 10:26:25 UTC
Permalink
Post by Mauro Furlanetto
salve ho provato la sub ma non mi funziona , ho copiato il codice e confermato con alt+q , lo lancio e mi dà "necessario oggetto" . ovviamente nella colonna U c'è scritto Libretto in tutte le celle ......cosa può essere ???
Non trova

[Sheet4!U3:U21]

in particolare Sheet4 che è il riferimeto al codename del foglio.
Continua a leggere su narkive:
Loading...