昨日、読者の1人から6月にメールが届きました。
彼女はセル内の文字列の特定の部分に太字のフォント形式を適用する方法を知っています。たとえば、太字の形式を「HelloWorld」の「Hello」という単語にのみ適用します。
そして、彼女は一度に数百のセルに対してこれを実行したいと考えていました。
それを実行できるExcelの組み込み機能はないので、Excel VBA InStr関数を使用する単純なマクロを作成しました(このチュートリアルの例4でこれを実行する方法を説明します)。
しかし、最初に見てみましょう。 Excel VBA InStr関数のしくみ!
このチュートリアルの内容:
Excel VBAInStr関数
このチュートリアルでは、Excel VBAでのInStr関数の使用法を説明し、使用できるいくつかの実用的な例を示します。
Excel VBA InStr関数–はじめに
InStr関数は文字列内の指定されたサブ文字列の位置であり、その出現の最初の位置を返します。
たとえば、Excel VBA InStr関数を使用して、「Excel」で「x」の位置を検索する場合2を返します。
InStr関数の構文
- –(オプションの引数)これは、InStr関数に検索を開始する開始位置を指示する整数値です。たとえば、検索を最初から開始する場合は、値を1として入力します。3番目以降の文字から開始する場合は、3を使用します。省略した場合は、デフォルト値の1が使用されます。
- String1 –これは、検索するメイン文字列(または親文字列)です。たとえば、Excelでxの位置を検索する場合、文字列1は「Excel」になります。
- String2 –これは検索する部分文字列です。たとえば、 Excelでxの位置を探すと、String2はxになります。
- –(オプションの引数)引数には次の3つの値のいずれかを指定できます。
- vbBinaryCompare –これは文字を実行します文字比較による。たとえば、「Excel」で「x」を検索すると2が返されますが、「Excel」で「X」を検索すると、Xが上位にあるため0が返されます。大文字と小文字を区別します。vbBinaryCompareの代わりに0を使用することもできます。引数を省略した場合、これがデフォルトとして使用されます。
- vbTextCompare –テキスト比較を行います。たとえば、「x」を検索する場合またはExcelの「X」の場合、どちらの場合も2が返されます。この引数は大文字と小文字を無視します。vbTextCompareの代わりに1を使用することもできます。
- vbDatabaseCompare –これはMicrosoftAccessでのみ使用されます。の情報を使用します比較を実行するデータベース。 vbDatabaseCompareの代わりに2を使用することもできます。
Excel VBA InStr関数に関する追加の注意事項:
- InStrはVBAですワークシート関数ではなく関数。これは、ワークシート内で使用できないことを意味します。
- String2(探している位置の部分文字列)が空の場合、関数は引数の値を返します。
- InStr関数がメイン文字列内に部分文字列を見つけられない場合、0を返します。
ここで、Excel VBAInStr関数の使用例をいくつか見てみましょう
例1–最初から位置を見つける
この例では、InStr関数を使用して、「ExcelVBA」の「V」の位置を最初から見つけます。
このコードは次のようになります。
Sub FindFromBeginning()Dim Position As IntegerPosition = InStr(1, "Excel VBA", "V", vbBinaryCompare)MsgBox PositionEnd Sub
このコードを実行すると、値7のメッセージボックスが表示されます。は、文字列「ExcelVBA」内の「V」の位置です。
例2–2番目の単語の先頭から位置を検索する
位置を検索するとします。文中の「the」の–「速い茶色のキツネが怠惰な犬を飛び越える」
しかし、私は検索したい2番目の単語から始めます。
この場合、引数を変更して、2番目の単語が始まる位置を指定するようにする必要があります。
次のコードは次のとおりです。これを行います:
Sub FindFromSecondWord()Dim Position As IntegerPosition = InStr(4, "The quick brown fox jumps over the lazy dog", "the", vbBinaryCompare)MsgBox PositionEnd Sub
このコードは、開始位置を4に指定したため、値32のメッセージボックスを表示します。したがって、最初の ‘は無視されます。 ‘そして文中の2番目の’ the ‘を見つけます。
より動的にしたい場合は、最初の単語を自動的に無視するようにコードを拡張できます。
これを行う拡張コードは次のとおりです。
Sub FindFromSecondWord()Dim StartingPosition As IntegerDim Position As IntegerStartingPosition = InStr(1, "The quick brown fox jumps over the lazy dog", " ", vbBinaryCompare)Position = InStr(StartingPosition, "The quick brown fox jumps over the lazy dog", "the", vbBinaryCompare)MsgBox PositionEnd Sub
このコードは、最初にスペース文字の位置を見つけて、変数StartingPositionに格納します。
次に、この変数を開始位置として使用して、単語「the」を検索します。
したがって、32(最初の単語の後の「the」の開始位置)を返します。
例3–電子メールアドレスでの@の位置の検索
Excel VBA InStr関数を使用して、電子メールアドレスでの@の位置を検索するカスタム関数を簡単に作成できます。
カスタム関数を作成するためのコードは次のとおりです。
これで、このカスタム関数を他のワークシート関数と同じように使用できます。セル参照を入力として受け取り、その中の@の位置を示します。
同様に、メイン文字列内の任意の部分文字列の位置を検索するカスタム関数。
例4–セル内の文字列の一部を強調表示する
これは、6月(私の読者)が尋ねたクエリです。
6月に送られてきた形式のサンプルデータは次のとおりです。
彼女のクエリは、括弧の外側の数字を太字にすることでした。
これを行うために私が作成したコードは次のとおりです。
上記のコードは、ForEachループを使用して選択範囲内の各セルを通過します。 InStr関数を使用して、開き角かっこ文字の位置を識別します。次に、括弧の前のテキストのフォントを変更します。
このコードを使用するには、VBエディターのモジュールにコピーして貼り付ける必要があります。
コピーして貼り付けたらコードで、このフォーマットを実行するセルを選択し、マクロを実行します(以下を参照)。
次のExcelVBAチュートリアルもお気に召すかもしれません:
- Excel VBASPLIT関数。
- VBATRIM関数。
- ExcelVBAループの究極のガイド。
- ExcelVBAでForNextLoopを使用するための初心者向けガイド。
- Excelアドインを作成して使用する方法。
- 複数のワークブックを組み合わせる方法1つのExcelワークブックにまとめます。
- Excelで色付きのセルをカウントする方法。
- 初心者向けの便利なExcelVBAマクロの例。
- VBAを使用してExcelでデータを並べ替える方法(ステップバイステップガイド)