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.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

このマクロは、テキストボックスだけでなく、ワークシート内のすべての図形を調べます。検索をテキストボックスのみに制限したい場合は、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.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

このマクロは、太線を使用して検索されたテキストに下線を引き、太字にします。完了したら、テキストを通常のテキストに戻したいと思うでしょう。次のマクロを使用してこれを行うことができます:

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

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(11282)は、Microsoft Excel 2007および2010に適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。