Ricerca di testo nelle caselle di testo (Microsoft Excel)
Walter ha un foglio di lavoro che contiene un numero di caselle di testo. Vorrebbe cercare in quelle caselle di testo per trovare del testo specifico, ma Trova e sostituisci non sembra in grado di trovare il testo nelle caselle di testo. Si chiede se esiste un modo per cercare nelle caselle di testo.
Walter ha ragione; non è possibile trovare il testo che si trova nelle caselle di testo in Excel. Per verificarlo, abbiamo aperto una cartella di lavoro nuova di zecca, inserito una singola frase (“il mio messaggio”) e quindi inserito del testo e dei numeri casuali in altre celle del foglio di lavoro. Quindi, con la casella di testo non selezionata, è stato premuto Ctrl + F per cercare “il mio messaggio”. Excel ha doverosamente riferito di non riuscire a trovare il testo, anche se era ancora lì, nella casella di testo.
Fortunatamente, puoi cercare del testo in una casella di testo utilizzando una macro. Ogni casella di testo in un foglio di lavoro appartiene alla raccolta Shapes, quindi tutto ciò che devi fare è scorrere ogni membro della raccolta e vedere se contiene il testo desiderato. Ecco una macro che richiede una stringa di ricerca e quindi la cerca nelle caselle di testo.
Sub FindInShape1() Dim rStart As Range Dim shp As Shape Dim sFind As String Dim sTemp As String Dim Response sFind = InputBox("Search for?") If Trim(sFind) = "" Then MsgBox "Nothing entered" Exit Sub End If Set rStart = ActiveCell For Each shp In ActiveSheet.Shapes sTemp = shp.TextFrame2.TextRange.Characters.Text If InStr(LCase(sTemp), LCase(sFind)) <> 0 Then shp.Select Response = MsgBox( _ prompt:=shp.Name & vbCrLf & _ sTemp & vbCrLf & vbCrLf & _ "Do you want to continue?", _ Buttons:=vbYesNo, Title:="Continue?") If Response <> vbYes Then Set rStart = Nothing Exit Sub End If End If Next MsgBox "No more found" rStart.Select Set rStart = Nothing End Sub
Questa macro esamina tutte le forme nel foglio di lavoro, non solo le caselle di testo. Se preferisci limitare la ricerca alle sole caselle di testo, puoi scorrere la raccolta TextBoxes invece della raccolta Shapes; in entrambi i casi funzionerà bene.
Si noti, inoltre, che questo approccio si interrompe ogni volta che trova il testo corrispondente (il caso del testo non ha importanza) e ti chiede se vuoi continuare. Potresti, invece, volere una macro che contrassegni semplicemente il testo corrispondente nelle caselle di testo. Questo può essere fatto con una macro più breve, come mostrato qui:
Sub FindInShape2() Dim shp As Shape Dim sFind As String Dim sTemp As String Dim iPos As Integer Dim Response sFind = InputBox("Search for?") If Trim(sFind) = "" Then MsgBox "Nothing entered" Exit Sub End If sFind = LCase(sFind) For Each shp In ActiveSheet.Shapes sTemp = LCase(shp.TextFrame2.TextRange.Characters.Text) iPos = InStr(sTemp, sFind) If iPos > 0 Then With shp.TextFrame2.TextRange.Characters(Start:=iPos, _ Length:=Len(sFind)).Font .UnderlineStyle = msoUnderlineHeavyLine .Bold = True End With End If Next MsgBox "Finished" End Sub
Questa macro sottolinea il testo individuato utilizzando una linea pesante e quindi lo rende in grassetto. Quando hai finito, probabilmente vorrai riportare il testo al testo normale. Puoi farlo utilizzando la seguente macro:
Sub ResetFont() Dim shp As Shape For Each shp In ActiveSheet.Shapes With shp.TextFrame2.TextRange.Characters.Font .UnderlineStyle = msoNoUnderline .Bold = False End With Next End Sub
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (11282) si applica a Microsoft Excel 2007 e 2010. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: