【VBA】InStr関数をマスター!基本と応用テクニック

この記事では、VBA(Visual Basic for Applications)で頻繁に使用されるInStr関数について、基本から応用までを詳細に解説します。この関数を使いこなすことで、文字列の検索やデータの操作が格段に効率的になります。初心者から上級者まで、InStr関数の全てを理解できるように構成しています。

目次

InStr関数の基本

構文と引数について

InStr関数は、特定の文字列(以下、string1)の中から、別の文字列(以下、string2)を検索し、その文字列が最初に出現する位置を数値で返します。

構文の形式

InStr([start,] string1, string2[, compare])

各引数の詳細

  • start: 検索を開始する位置を指定します。この引数は省略可能で、省略した場合は文字列の先頭から検索が始まります。
  • string1: 検索対象となる文字列です。この文字列の中からstring2が検索されます。
  • string2: string1の中で検索する文字列を指定します。
  • compare: 文字列の比較モードを指定します。この引数も省略可能です。

基本的な使用例とその解説

InStr関数の一番シンプルな使用例を以下に示します。

Sub BasicUsage()
    Dim mainString As String, searchString As String
    mainString = "HelloWorld"
    searchString = "World"
    MsgBox InStr(mainString, searchString)  ' 結果は6
End Sub

この例では、mainStringに格納された”HelloWorld”という文字列の中から、searchStringに格納された”World”という文字列を検索しています。”World”は”HelloWorld”の中で6番目に位置しているため、MsgBoxで6が表示されます。

InStr関数の応用

文字列の分割:名前と姓を分ける

InStr関数を使って、名前と姓を分ける方法を見てみましょう。

Sub SplitFullName()
    Dim fullName As String, spacePos As Long
    fullName = "John Doe"
    spacePos = InStr(fullName, " ")
    MsgBox "First name: " & Left(fullName, spacePos - 1)
    MsgBox "Last name: " & Mid(fullName, spacePos + 1)
End Sub

このコードでは、InStr関数で半角スペースの位置(spacePos)を取得しています。その位置を基に、Left関数とMid関数を使用して文字列を分割しています。

複数の同じ文字を検索:最初に見つかった位置

InStr関数で複数の同じ文字が含まれる場合、最初に見つかった位置が返されます。これは、例えば、同じキーワードが複数回出現する文書を解析する際に役立ちます。

Sub FindFirstOccurrence()
    Dim text As String, charToFind As String
    text = "appleapple"
    charToFind = "p"
    MsgBox InStr(text, charToFind)  ' 結果は2
End Sub

この例では、”appleapple”という文字列の中から”p”を検索しています。”p”は2番目と3番目に出現しますが、InStr関数は最初に見つかった2番目の位置を返します。

大文字と小文字の区別:Case-Insensitiveな検索

大文字と小文字を区別しないで検索する方法です。

Sub CaseInsensitiveSearch()
    Dim filePath As String, folderName As String
    filePath = "C:\Documents\MyFile.txt"
    folderName = "documents"
    MsgBox InStr(LCase(filePath), LCase(folderName))  ' 結果は4
End Sub

この例では、LCase関数を使用して、filePathfolderNameの両方を小文字に変換しています。その上でInStr関数を使用しているため、大文字と小文字を区別せずに検索が行われます。

InStr関数に関するFAQ

Q:InStr関数は何に使えますか?

A:InStr関数は、一つの文字列(string1)内で別の文字列(string2)が最初に出現する位置を検索するために使用されます。この関数は、文字列の検索、分割、置換など、多くの文字列操作タスクで非常に便利です。

Q:InStr関数の基本的な構文は何ですか?

A:基本的な構文は以下のようになります。

InStr([start,] string1, string2[, compare])

ここで、startは検索開始位置、string1は検索対象の文字列、string2は検索する文字列、compareは文字列比較のモードを指定します。

Q:start引数を省略した場合、どうなりますか?

A:start引数を省略すると、string1の最初から検索が開始されます。

Q:compare引数は何を指定できますか?

A:compare引数は、文字列の比較方法を指定するためのものです。例えば、大文字と小文字を区別しない場合や、全角と半角を区別しない場合などに使用します。

Q:InStr関数は大文字と小文字を区別しますか?

A:デフォルトでは区別しますが、compare引数を使って区別しないように設定することも可能です。

Q:InStr関数で見つからなかった場合、どのような値が返されますか?

A:InStr関数で指定した文字列が見つからなかった場合、0が返されます。

Q:InStr関数は複数の出現位置を返すことはできますか?

A:いいえ、InStr関数は最初に見つかった出現位置のみを返します。複数の出現位置を知りたい場合は、ループ処理などを使って自分で実装する必要があります。

Q:InStr関数とInStrRev関数の違いは何ですか?

A:InStr関数は文字列の先頭から検索を行いますが、InStrRev関数は文字列の末尾から検索を行います。

Q:InStr関数で特定の文字以降を全て取得する方法は?

A:InStr関数で特定の文字の位置を取得した後、Mid関数を使用してその位置以降の文字列を取得することができます。

Q:InStr関数は数値にも使えますか?

A:いいえ、InStr関数は文字列データに対してのみ使用可能です。数値を検索する場合は、まず数値を文字列に変換する必要があります。

関連動画

まとめ

InStr関数は、VBAでの文字列操作において非常に強力なツールです。基本的な検索から、文字列の分割、大文字・小文字の区別といった応用的な使い方まで、多くの場面でその力を発揮します。この記事で解説した内容をしっかりと理解し、日々の業務やプロジェクトで活用してください。

Excelのショートカットキーの練習

当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。

下のスタートボタンを押して練習モードに入ります。
STARTSTOP
※入力モード切り替え ctrl + shift + alt + space
PRE
NEXT
現在の問題をリストから除外
除外したリストをリセット
現在の除外状況のURL取得
コピー
ガイドモード
リピートモード

※推奨ブラウザ Google Chrome

PUSH ENTER
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次