トップページ

#11_1 文字列の取得/検索


初めにVBA関数を学ぼう

文字列操作について学習する前に、ワークシート関数とVBA関数について把握しておく必要があります。普段からExcelを使っている方には「Sum関数」や「AVERAGE関数」とは聞きなれた言葉だと思います。そう言ったExcelに搭載されている関数をまとめて「ワークシート関数」と呼びます。その一方で、C言語などのたのプログラミング言語同様に、VBAも独自の関数を持っています。今まで学習したもので言えば「MsgBox関数」「InputBox関数」などです。それらはワークシート関数に対して「VBA関数」と呼びます。

VBA関数とメソッド

何か対象を操作するという点で、VBA関数とメソッドはよく似ていますが、基本文法に違いがあり、なおかつメソッドはオブジェクトに対してのみ有効です。

VBAでオブジェクトをメソッドで操作する場合には、「オブジェクト.メソッド」の基本構文を使います。

一方でVBA関数の基本構造は「VBA関数(引数1の値,引数2の値,...)」あるいは正確に書けば「VBA関数(引数1:=値, 引数2:=値, ...)」となります。

例として、InputBoxメソッドとInputBox関数を見てみましょう。

オブジェクトに属しているか、独立しているかがメソッドとVBA関数の違いなのです。

VBA関数の構文を理解しよう

VBA関数は、基本的には与えられた引数に応じた処理をします。ただ、関数ごとに「省略できる引数」と「省略できない引数」があり、それぞれの引数によって書式が違いますので、ややこしいですが頭に留めておいてください。

ここでは指定した文字列を検索し、別の文字に置き換えるReplace関数を例に見てみましょう。細かい引数の意味は後で説明しますので、今は気にしなくて結構です。

Replace(文字列, 検索文字列, 置換文字列〔, 開始位置〔, 置換数〔, 比較モード〕〕〕)

ここで、幾つかルールがあります。まずReplaceは当然「関数名」です。また、引数と引数は「,」で区切り、かつ引数全体を「()」で囲みます。さらに、省略できる引数は「〔 〕」で囲み、引数の中でさらに引数を指定するときも「〔 〕」で囲みます。

これはVBAの様々な解説書でも共通の書式ですので、この先未知のVBA関数に出会った時のためにここでこの書き方を理解しておいてください。また、自身がVBA関数を使う際には特に「省略できない引数」に注意してください。

文字列を取得してみよう

では忘れないうちに文字列を取得するVBA関数を早速使ってみましょう。今回は使用頻度の高いRight関数、Left関数、Mid関数、Len関数をまとめて勉強しましょう。

引数も多くなく、直感的で覚えやすい関数なので、特に問題はないはずです。

文字列を検索しよう

文字列検索に主に使われるのはInStr関数とInStrRev関数です。両者の構文は以下のようになります。

InStr(〔開始位置,〕 文字列, 検索文字列〔, 比較モード〕)

InStrRev(文字列, 検索文字列, 置換文字列〔, 開始位置〔, 比較モード〕〕)

よく似ていますが、微妙に違うので注意しましょう。

InStr関数は先頭から、InStrRev関数は後方から文字列を検索し、文字列が何文字目かを返します。