InStr関数
Instr関数は、VBAでは頻繁に使われる必須関数で、
シート関数のFIND関数と同様機能のVBA関数になります。
最初に見つかった文字位置を返す文字列処理関数です。
つまり、
検索文字が見つかった時は、その文字位置の数値、
見つからなかった時は、0が戻り値となります。
しかっかりと使えるようになっておく必要があります。
InStr関数
検索の開始位置を表す数式を指定します。
省略すると、先頭の文字から検索されます。
引数startにNull 値が含まれている場合、エラーが発生します。
引数compareを指定した場合は、startも指定する必要があります。
検索対象となる文字列式を指定します。
引数string1内で検索する文字列式を指定します。
引数 compare を指定した場合は、start も指定する必要があります。
引数 compare を省略すると、バイナリ モードで比較が行われます。
引数compareを指定した場合は、引数startも指定する必要があります。
設定する値については、次の「設定値」を参照してください。
定数 | 値 | 説明 |
使用できません |
-1 | Option Compare ステートメントの設定を使用して比較を行います。 |
vbBinaryCompare | 0 | バイナリ モードで比較を行います。 全角半角、大文字小文字が区別されます。 |
vbTextCompare | 1 | テキスト モードで比較を行います。 全角半角、大文字小文字が区別されません。 |
VBA関数では多くの場合、大文字小文字を区別されます。
従って、InStr関数使用時も、大文字小文字を区別されるバイナリ モードを使う事が多くなります。
LCase関数
指定するとコンパイルエラーになります。
最初に見つかった文字位置(先頭からその位置までの文字数)を返します。
InStrB関数
検索結果をバイト位置 (先頭からその位置までのバイト数) で返します。
InStr関数の使用例
InStr("エクセルExcel", "ce") ・・・ 7
InStr(6, "エクセルexcel", "e")・・・ 8、6文字以降で検索するので、2番目のeの位置
InStr関数の応用例1
「(」の前までを取り出す場合です。
Dim i As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Cells(i, 1), "(") > 0 Then
Cells(i, 2) = Left(Cells(i, 1), InStr(Cells(i, 1), "(") - 1)
End If
Next
InStr関数で、「(」があるかどうかを判定してから、
「(」がある場合には、その前までを取り出してB列に入れています。
InStr関数の応用例2
「株式会社」という名称が含まれていたら、B列に「株式会社」と出力する。
Dim i As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Cells(i, 1), "株式会社") > 0 Then
Cells(i, 2) = "株式会社"
End If
Next
よく使われる使い方になります。
ただし、この場合は、Like演算子を使って、
If Cells(i, 1) Like "*株式会社*" Then
このように書いても同じです。
実際には、InStr関数とLike演算子は、好みによって使い分けられている場合が多いようです。
InStr関数の応用例3
以下のように関数をネストさせます。
Dim str As String
str = "ExcelExcel"
MsgBox InStr(str, "e") '結果は9
MsgBox InStr(StrConv(LCase(str), vbNarrow), StrConv(LCase("e"),
vbNarrow)) '結果は1
検索対象、検索文字、双方を、
・LCase関数で、小文字変換
・StrConv関数で、半角変換
これにより、全角半角、大文字小文字が区別せずに検索されます。
InStr関数の練習問題
InStr関数の関連関数
InStrRev関数は、
文字列の中から指定した文字列を最後の文字位置から検索を開始し、
最初に見つかった先頭からの文字位置を返す文字列処理関数です。
文字列系関数の参考ページ
文字列操作に関するVBA関数の一覧の掲載と、
Replace関数、InStr関数、StrConv関数について詳細に解説しています。
同じテーマ「VBA関数」の記事
Chr関数,ChrB関数,ChrW関数
Format関数
FormatCurrency関数,FormatDateTime関数,FormatNumber関数,FormatPercent関数
InStr関数
InStrRev関数
LCase関数
UCase関数
Replace関数
Left関数,LeftB関数
Right関数,RightB関数
Mid関数,MidB関数
新着記事NEW ・・・新着記事一覧を見る
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)
PIVOTBY関数(縦軸と横軸でグループ化して集計)|エクセル入門(2023-11-19)
GROUPBY関数(縦軸でグループ化して集計)|エクセル入門(2023-11-18)
PY関数(Pythonコードをセル内で実行)|エクセル入門(2023-11-17)
画像「セルに配置」のVBAについて(365の新機能)|VBA技術解説(2023-11-13)
スピルのゴーストの範囲を選択するVBA|ツイッター出題回答 (2023-10-31)
エクセル試験3:月間の所定労働時間|エクセル練習問題(2023-10-04)
エクセル試験2:所得税の計算|エクセル練習問題(2023-10-04)
エクセル試験1:曜日別の平均客単価|エクセル練習問題(2023-10-04)
列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.条件分岐(IF)|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。