VBAで文字列を検索する方法(9つの方法)

  • これを共有
Hugh West

VBAを使って部分文字列を見つける最も簡単な方法を探しているなら、あなたは正しい場所にいます。 この記事に目を通すと、部分文字列の位置を見つけたり、この部分文字列を使ってデータを抽出したり、部分文字列のフォーマットを簡単に変更できるようになります。 では、記事に入っていきましょう。

ワークブックダウンロード

サンプルコンテンツ

VBAを使用してサブストリングを検索する9つの方法

ここでは、VBAを使用して文字列の部分文字列を見つける方法を示す以下のデータテーブルがあります。 また、ランダムな文字列の部分文字列を見つける方法も示してみます。

を使用してこのタスクを実行しました。 Microsoft Excel 365 のバージョンがありますが、お客様のご都合に合わせてご利用ください。

方法-1:VBAを使った文字列の部分文字列の検索

VBAを使って、文字列の中から目的の部分文字列を見つけたい場合、次のようにします。 InStr関数 をVBAコードに追加してください。

Step-01 :

➤に移動します。 デベロッパー タブ>> ビジュアルベーシック オプション

その後 Visual Basic エディター が開きます。

➤に移動します。 インサート タブ>> モジュール オプション

その後 モジュール が作成されます。

ステップ02 :

➤ 次のコードを書いてください。

 Sub FindFirst() Dim Pos As Integer Pos = InStr(1, "我思う故に我あり", "思う") MsgBox Pos End Sub 

これです。 InStr(1, "我思う、故に我あり", "思う") は、文字列の部分文字列の位置を返します。 1 は開始位置、" 我思う故に我あり は目的の部分文字列を見つけるための文字列であり 惟う は検索したい部分文字列です。 デフォルトでは大文字と小文字が区別されるので、検索したい部分文字列の大文字と小文字に注意してください。

➤プレス F5

結果 :

その後、以下のようになります。 メッセージボックス の位置を含む。 惟う の部分文字列です。

方法2:文字列中の大文字小文字を区別しない部分文字列を見つける

VBAを使って、大文字小文字に関係なく、文字列から目的の部分文字列を見つけたい場合は、次の方法に従ってください。

Step-01 :

➤フォロー Step-01 方法-1

 Public Sub caseinsensitive() Dim Pos As Integer Pos = InStr(1, "I Think Therefore I Am", "think",vbTextCompare) MsgBox Pos End Sub 

これです。 vbTextCompare は大文字小文字を区別しない部分文字列の検索に使用されます。

➤プレス F5

結果 :

すると、以下のようになります。 メッセージボックス の位置を含む。 惟う の部分文字列です。

以下のコードを使用することで同様のことが可能です。

 Option Compare Text Public Sub caseinsensitive() Dim Pos As Integer Pos = InStr(1, "I Think Therefore I Am", "think") MsgBox Pos End Sub 

これです。 オプション比較テキスト は大文字と小文字を区別して検索します。

➤プレス F5

結果 :

その後、以下のようになります。 メッセージボックス の位置を含む。 惟う の部分文字列です。

方法-3:VBAでInstrRev関数を使う。

ここでは、文字列の末尾から部分文字列を検索する方法を紹介します。

Step-01 :

➤フォロー Step-01 方法-1

 Sub FindFromEnd() MsgBox InStrRev("I think therefore I am", "I") End Sub 

InStrRev は、左側ではなく右側から部分文字列を検索します。

➤プレス F5

結果 :

すると、以下のようになります。 メッセージボックス の位置を含む。 "I" の部分文字列を右側から見る。

方法-4:データ範囲内の文字列の中の部分文字列の位置を求める

特殊文字を見つけたい場合 "@" において メールアドレス を追加し、このメソッドに従います。 ポジション欄 このため

Step-01 :

➤フォロー Step-01 方法-1

 Function FindSubstring(value As Range) As Integer Dim Pos As Integer Pos = InStr(1, value, "@") FindSubstring = Pos End Function 

という名前の関数が作成されます。 部分文字列の検索 (他の名前でも可)

価値 は、文字列を含むセル参照で、次のように宣言されています。 レンジ .

ステップ02 :

➤出力を選択する セルE5

➤ 次のような関数を入力する(作成したのは ブイビーエー )

=FindSubstring(D5)です。

D5 は、文字列を含むセルである。

➤プレス エンタメ

➤ドラッグダウンする。 フィルハンドル ツール

結果 :

その後、特殊文字の位置が表示されます " @" において メールアドレス .

類似の読み物。

  • ExcelのVBAを使用してセル内の文字列を検索する方法(2つの方法)
  • FindNext ExcelでVBAを使用する(2例)
  • ExcelのVBAで文字列を検索する方法(8例)
  • VBA Excelの最終行を検索する(5つの方法)

方法-5:データ範囲内の文字列のうち、特定の部分文字列をチェックする

例えば、次のように書くとします。 パス または 対応に失敗する に応じて、生徒の名前に 結果欄 どこ パス または 失敗 が括弧でくくられ、この部分文字列を見つけるには 結果欄 に書き込んでください。 合格・不合格欄 は、この方法に従います。

Step-01 :

➤フォロー Step-01 方法-1

 Sub CheckSubstring() Dim cell As Range For Each cell In Range("C5:C10") If InStr(cell.value, "Pass")> 0 Then cell.Offset(0, 1).value ="Passed" Else cell.Offset(0, 1).value ="Failed" End If Next cell End Sub 

ここでは、セル範囲が C5:C10 というものである。 結果欄

InStr(cell.value, "Pass")> 0 は、数値が0より大きい状態(セルに "パス" ) の場合、次の行が続き、隣のセルに次のような出力が得られます。 合格 .

この条件が偽の場合、セルには何も含まれていないことを意味します。 "パス" の下の行は エルゼ が実行され、隣接するセルの出力値が 失敗 .

このループは各セルに対して続けられる。

➤プレス F5

結果 :

すると、以下のような出力が 合格または不合格 の欄があります。

方法-6:文字列中の特定の部分文字列を調べてデータを取り出す

という生徒を探す方法を紹介します。 マイケル において 生徒名欄 を使用して対応するデータを抽出します。 ブイビーエー この方法では

Step-01 :

➤フォロー Step-01 方法-1

 Sub Extractdata() Dim lastusedrow As Long Dim i As Integer, icount As Integer lastusedrow = ActiveSheet.Range("B100").End(xlUp).Row For i = 1 To lastusedrow If InStr(1, Range("B" & i), "Michael")> 0 Then icount = icount + 1 Range("E" & icount & ":G" & icount ) = Range("B" & i & ":D" & i).value End If Next i End Sub 

ここで、私は B100 として アクティブシートの範囲 が、用途に応じて任意の範囲を使用することができます。

InStr(1, Range("B" & i), "Michael")> 0 は、列のセルが B を含む マイケル

範囲("E" & icount & ":G" & icount) は出力データが欲しい範囲 Range("B" & i & ":D" & i).value は列の値を与える。 B まで D .

➤プレス F5

結果 :

その後、名前を持つ学生について、次のような抽出されたデータが得られます。 マイケル .

方法-7: 単語の部分文字列を検索する

もし、部分文字列を単語として見つけたい場合は、次の方法に従ってください。

Step-01 :

➤フォロー Step-01 方法-1

 Sub Stringforword() Dim j As Integer j = InStr("Here is what I am", "is") If j = 0 Then MsgBox "Word not found" Else MsgBox "Word found in position: " & j End If End Sub 

を含む文字列かどうかをチェックします。 でございます となり、その位置が与えられる

➤プレス F5

結果 :

その後、以下のようなメッセージボックスが表示され、その中で 位置:6にある単語 (の位置)。 でございます ).

このコードは、文字列の中にない単語に対してテストすることができます。

➤ 次のコードを入力します。

 Sub Stringforword() Dim j As Integer j = InStr("Here is what I am", "are") If j = 0 Then MsgBox "Word not found" Else MsgBox "Word found in position: " & j End If End Sub 

➤プレス F5

結果 :

その後、以下のようなメッセージボックスが表示され、その中で みとめられないことば .

方法-8:Instr関数とLEFT関数を使用する。

ここでは、文字列中のある部分文字列の位置を求め、その部分文字列より前のテキストを抽出する方法について説明します。 ブイビーエー LEFT機能 .

Step-01 :

➤フォロー Step-01 方法-1

 Sub InstrandLeft() Dim txt As String Dim j As Long txt = "Here is what I am" j = InStr(txt, "is") MsgBox Left(txt, j - 1) End Sub 

j = InStr(txt, "is") は部分文字列の位置 でございます 左(txt, j - 1) の前の部分文字列を抽出します。 でございます .

➤プレス F5

結果 :

その後、次のようなメッセージボックスが表示されます。 こちら (前置文字列 でございます ).

方法-9:文字列の中の特定の部分文字列を太字にする

の括弧の前のグレードを太字にすることができます。 結果欄 を、この方法に従って行ってください。

Step-01 :

➤フォロー Step-01 方法-1

 Sub Boldingsubstring() Dim Cell As Range Dim txt As Integer For Each Cell In Selection txtCount = Len(Cell) txt = InStr(1, Cell, "(") Cell.Characters(1, txt - 1).Font.Bold = True Next Cell End Sub 

txt = InStr(1, Cell, "(")) は,最初の括弧の位置を返し Cell.Characters(1, txt - 1).Font.Bold は、最初の括弧の前の部分文字列を 太字 .

ステップ02 :

を選択します。 結果欄

➤に移動します。 デベロッパー タブ>> マクロ オプション

次に、a マクロ ウィザードが表示されます。

➤選択する 太字サブストリング (VBAのコードネーム)を入力し 実行 .

結果 :

その後、成績の 結果 コラム は太字になります。

プラクティス部門

自分で練習できるように 実践編 という名前のシートに、以下のようなセクションを作成します。 実践編 .自分でやってください。

結論

この記事では、以下の方法で部分文字列を検索する最も簡単な方法について説明します。 ブイビーエー をExcelで効果的に使用することができます。 あなたが有用であることを願っています。 あなたが何か提案や質問がある場合は、私たちとそれらを共有すること自由に感じなさい。

Hugh West は、業界で 10 年以上の経験を持つ、非常に経験豊富な Excel トレーナー兼アナリストです。彼は会計と財務の学士号と経営管理の修士号を取得しています。ヒューは教えることに情熱を持っており、理解しやすい独自の教育アプローチを開発しました。彼の Excel に関する専門知識は、世界中の何千人もの学生や専門家がスキルを向上させ、キャリアで優れた成果を上げるのに役立ってきました。 Hugh はブログを通じて知識を世界に共有し、個人や企業が潜在能力を最大限に発揮できるよう無料の Excel チュートリアルとオンライン トレーニングを提供しています。