大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、テキストボックスの値を検索する方法について、ご紹介します。検索する方法は、テキストを「.TextFrame.Characters.Text」で取得して、検索は「InStr」を使うという感じです。「For Each」を使えば、シート内の全てのテキストボックスを検索できます。

はじめに

この記事では、テキストボックスの値を検索する方法について、ご紹介します。

テキストボックスの値を検索するには、まずは、「.TextFrame.Characters.Text」でテキストを取得します。

テキストの値が取得できれば、「InStr」を使って、値を検索することができます。

この流れを「For Each」でループして、シート内の全てのテキストボックスの値を検索する、という手順です。

では、テキストボックスの値を検索する方法について、解説していきます。

この記事で紹介すること

  • テキストボックスの値を検索する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAで選択したテキストボックスの値を検索

VBAで、選択したテキストボックスの値を検索する、というのをやってみます。

「Selection.ShapeRange.TextFrame.Characters.Text」を使う

選択したテキストボックスの値を取得するには、「Selection.ShapeRange.TextFrame.Characters.Text」を使います。

ちょっと長いですね。

これを使って次のように値を取得します。

a = Selection.ShapeRange.TextFrame.Characters.Text

テキストボックスの値が取得できれば、あとは、「InStr」で値を検索することができます。

では、選択したテキストボックスで、テキストボックスの値を検索してみます。

「あいう」が含まれているか検索

選択したテキストボックスの、値を検索してみます。

「あいう」が含まれているかを検索してみます。

Sub TEST1()
    
    '選択したテキストボックスの値を取得
    a = Selection.ShapeRange.TextFrame.Characters.Text
    
    'テキストボックスの値を検索
    If InStr(a, "あいう") > 0 Then
        MsgBox "「あいう」が含まれている"
    Else
        MsgBox "「あいう」が含まれていない"
    End If
    
End Sub

テキストボックスを選択しておきました。

テキストボックスを選択

テキストボックスを選択しておく

では、実行してみます。

テキストボックスの値を検索

選択したテキストボックスの値を検索した結果

結果は、「「あいう」が含まれている」となりました。

テキストボックスの値を検索できています。

VBAで指定したテキストボックスの値を検索

次は、指定したテキストボックスで、値を検索してみます。

「Shape(テキストボックス名).TextFrame.Characters.Text」を使う

指定したテキストボックスから、テキストを取得するには、次のように入力します。

a = Activesheet.Shape(テキストボックス名).TextFrame.Characters.Text

という感じです。

では、指定したテキストボックスで、値を検索してみます。

「あいう」が含まれているか検索

先ほどと同じように、テキストボックスに「あいう」が含まれているか、検索してみます。

テキストボックスを指定する場合は、こんな感じになります。

Sub TEST2()
    
    '指定したテキストボックスの値を取得
    a = ActiveSheet.Shapes("正方形/長方形 1").TextFrame.Characters.Text
    
    'テキストボックスの値を検索
    If InStr(a, "あいう") > 0 Then
        MsgBox "「あいう」が含まれている"
    Else
        MsgBox "「あいう」が含まれていない"
    End If
    
End Sub

テキストボックスを用意しておきました。

テキストボックスを用意

テキストボックスを用意

では、実行してみます。

指定したテキストボックスを検索

指定したテキストボックスの値を検索した結果

結果は、「「あいう」が含まれている」となりました。

正しく、テキストボックスの値を検索できています。

VBAでシート内の全てのテキストボックスの値を検索

次は、シート内の全てのテキストボックスの値を検索してみます。

これが、実務的ですね。

「For Each」を使って、シート内の図形を全てループして、テキストボックスの値を検索する、という感じでやります。

では、やってみます。

「あいう」が含まれていたら選択

シート内の全てのテキストボックスをループして、「あいう」が含まれていたら選択する、というのをやってみます。

VBAコードは、こんな感じになります。

Sub TEST3()
    
    'シート内の全ての図形をループ
    For Each a In ActiveSheet.Shapes
        'テキストボックスで、「あいう」を検索
        If InStr(a.TextFrame.Characters.Text, "あいう") > 0 Then
            a.Select False '選択する
        End If
    Next
    
End Sub

シート内に複数のテキストボックスを用意しました。

複数のテキストボックスを用意

シート内に複数のテキストボックスを用意

では、実行してみます。

全てのテキストボックスの値を検索

シート内の全てのテキストボックスを検索して「あいう」が含まれている場合に選択した結果

「あいう」が含まれている図形を、選択できました。

正しく、テキストボックスの値を検索できています。

画像が含まれているとエラーとなる

「For Each」で図形をループする場合に、「画像」がシート内に含まれていると、テキストを取得するところでエラーとなってしまいます。

こんな感じです。

シート内に「画像」がある場合

シート内に画像がある場合

画像をシート内に追加しています。

VBAコードは、先ほどと同じものを使います。

Sub TEST4()
    
    'シート内の全ての図形をループ
    For Each a In ActiveSheet.Shapes
        'テキストボックスで、「あいう」を検索
        If InStr(a.TextFrame.Characters.Text, "あいう") > 0 Then
            a.Select False '選択する
        End If
    Next
    
End Sub

では、実行してみます。

テキスト検索で「エラー」となる

画像からテキストを取得しようとするとエラーとなる①
画像からテキストを取得しようとするとエラーとなる②

という感じで、画像からテキストを取得しようとすると、エラーとなってしまいます。

なので、オートシェイプか吹き出しの場合に検索する、という条件を追加してあげます。

オートシェイプか吹き出しの条件を追加

シート内の図形を検索する際に、オートシェイプか吹き出しである、という条件を追加してみます。

次のようなVBAコードとなります。

Sub TEST5()
    
    'シート内の全ての図形をループ
    For Each a In ActiveSheet.Shapes
        'オートシェイプ、もしくは、吹き出しの場合
        If a.Type = 1 Or a.Type = 2 Then
            'テキストボックスで、「あいう」を検索
            If InStr(a.TextFrame.Characters.Text, "あいう") > 0 Then
                a.Select False '選択する
            End If
        End If
    Next
    
End Sub

オートシェイプのタイプが「1」で、吹き出しのタイプが「2」です。

先ほどと同じように、シートに画像を追加しておきます。

シート内に画像を追加しておく

シート内に画像を追加しておく

では、テキストボックスの値を検索してみます。

テキストボックスのみを検索できる

画像が含まれるシート内で、テキストボックスの値を検索して、あったらテキストボックスを選択した結果

今度は、エラーとならず、テキストボックスが選択されました。

「あいう」が含まれるテキストボックスを、正しく検索できています。

こんな感じで、テキストボックスの値を検索する場合は、「オートシェイプ」もしくは「吹き出し」の条件をつけて、検索しましょう。

「あいう」が含まれていたら削除

先ほどの選択するVBAコードを使うと、検索できたテキストボックスを削除する、ということもできます。

VBAコードはこんな感じになります。

Sub TEST6()
    
    'シート内の全ての図形をループ
    For Each a In ActiveSheet.Shapes
        'オートシェイプ、もしくは、吹き出しの場合
        If a.Type = 1 Or a.Type = 2 Then
            'テキストボックスで、「あいう」を検索
            If InStr(a.TextFrame.Characters.Text, "あいう") > 0 Then
                a.Delete '削除する
            End If
        End If
    Next
    
End Sub

複数のテキストボックスを用意しました。

複数のテキストボックスを用意

複数のテキストボックスを用意

では、実行してみます。

テキストボックスを検索して削除

「あいう」が含まれるテキストボックスを削除

「あいう」が含まれるテキストボックスを削除できました。

「あいう」が含まれていたら値を取得

最後に、検索できたテキストボックスのテキストを取得する、というのをやってみます。

VBAコードはこんな感じになります。

Sub TEST7()
    
    'シート内の全ての図形をループ
    For Each a In ActiveSheet.Shapes
        'オートシェイプ、もしくは、吹き出しの場合
        If a.Type = 1 Or a.Type = 2 Then
            'テキストボックスで、「あいう」を検索
            If InStr(a.TextFrame.Characters.Text, "あいう") > 0 Then
                'テキストを取得
                Debug.Print a.TextFrame.Characters.Text
            End If
        End If
    Next
    
End Sub

複数のテキストボックスを用意しました。

複数のテキストボックスを用意

複数のテキストボックスを用意

では、実行してみます。

テキストボックスを検索してテキストを取得

「あいう」が含まれるテキストボックスのテキストを取得

「あいう」が含まれるテキストボックスのテキストを、取得できました。

こんな感じで、「For Each」を使って、テキストボックスをループすると、テキストボックスの検索ができます。

おわりに

この記事では、テキストボックスの値を検索する方法について、ご紹介しました。

テキストボックスの値を検索するには、「.TextFrame.Characters.Text」でテキストを取得します。

テキストの値が取得できれば、「InStr」を使って、値を検索することができます。

この流れを「For Each」でループして、シート内の全てのテキストボックスの値を検索する、という手順です。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す