テキストボックス内のテキストの検索(Microsoft Excel)
Walterには、いくつかのテキストボックスを含むワークシートがあります。彼はそれらのテキストボックスを検索して特定のテキストを見つけたいと思っていますが、検索と置換ではテキストボックス内のテキストを見つけることができないようです。彼は、テキストボックスを検索する方法があるかどうか疑問に思います。
ウォルターは正しいです。 Excelのテキストボックスにテキストが見つかりません。これをテストするために、新しいワークブックを開き、その中に1つのフレーズ(「マイメッセージ」)を配置してから、ワークシートの他のセルにランダムなテキストと数字を配置しました。次に、テキストボックスが選択されていない状態で、Ctrl + Fを押して「マイメッセージ」を検索しました。 Excelは、テキストボックス内にテキストがまだあるにもかかわらず、テキストが見つからなかったことを忠実に報告しました。
幸い、マクロを使用してテキストボックス内のテキストを検索できます。ワークシートの各テキストボックスはShapesコレクションに属しているため、コレクションの各メンバーをステップスルーして、目的のテキストが含まれているかどうかを確認するだけです。これは、検索文字列の入力を求め、テキストボックスでそれを検索するマクロです。
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.TextFrame.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
このマクロは、テキストボックスだけでなく、ワークシート内のすべての図形を調べます。検索をテキストボックスのみに制限したい場合は、Shapesコレクションの代わりにTextBoxesコレクションをステップスルーできます。どちらの方法でも問題なく動作します。
また、このアプローチは、一致するテキストが見つかるたびに停止し(テキストの大文字と小文字は関係ありません)、続行するかどうかを尋ねられることに注意してください。代わりに、テキストボックス内の一致するテキストを単にマークするマクロが必要な場合があります。これは、次に示すように、より短いマクロで実行できます。
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.TextFrame.Characters.Text) iPos = InStr(sTemp, sFind) If iPos > 0 Then With shp.TextFrame.Characters(Start:=iPos, _ Length:=Len(sFind)).Font .ColorIndex = 3 .Bold = True End With End If Next MsgBox "Finished" End Sub
このマクロは、太字の赤いフォントを使用して、検索されたテキストを強調表示します。完了したら、テキストを通常のテキストに戻したいと思うでしょう。次のマクロを使用してこれを行うことができます:
Sub ResetFont() Dim shp As Shape For Each shp In ActiveSheet.Shapes With shp.TextFrame.Characters.Font .ColorIndex = 0 .Bold = False End With Next End Sub
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(11281)は、Microsoft Excel 97、2000、2002、および2003に適用されます。
Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります:
linkテキストボックス内のテキストの検索。