ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.007

特定の文字より右部分にある文字列を取り出す 《Right・Instr・Len》

2003/2007/2010/2013

とある特定文字より右にある文字列を取り出したい、というお問い合わせです。
特定文字より左の文字列を取り出す場合は、ヘルプ「特定の文字より左部分にある文字列を取り出す 《Left・InStr》」をご参照ください。
左の場合よりも、今回多少工夫が必要です。

右から文字列を取り出すのは Right関数、特定文字の位置が先頭から何文字目にあるかを調べることができる InStr関数、右からの文字数を得るために、全体文字数を調べる Len関数 も必要となります。

まず InStr関数 を把握しておきましょう。
InStr関数 は、対象文字列の中から特定文字を検索し、特定文字の先頭位置が対象文字列の先頭から何文字目にあるかを、数値で返します。

InStr関数

この InStr関数 は特定文字の先頭位置を数値で返しますが、その値と右から取り出したい文字数とのかかわりを把握する必要があります。
求めたい右からの文字数は、特定文字を含まない右側の文字です。
対象文字列の全体文字数から InStr関数 が返した値を引くと、右側の文字数が残るのかな、とイメージしていきます。
式を立ててみましょう。全体文字数を求める関数は Len関数 です。

  Right([対象文字列], Len([対象文字列])-InStr([対象文字列], "特定文字"))

具体的な例題でも確認してください。
フィールド[F1]が対象文字列、特定文字は「A」としています。下図では、列[式1]に下記の式で求めています。

  Right([F1],Len([F1])-InStr([F1],"A"))

クエリ結果

上の例は対象文字列がフィールドになっていますが、フォームなどの場合はコントロールになることもありますね。

さて、先の例では特定文字は1文字ですので、Right関数 で取り出す文字数の部分は、

  Len([対象文字列])-InStr([対象文字列], "特定文字")

で求めましたが、特定文字が複数文字列の場合は、さらに特定文字数分を引かねばなりません。
しかし、先の InStr関数 で1文字分は引かれていますので、引き過ぎ分を +1 して調整します。とすると、次のように式を工夫します。

  Len([対象文字列])-InStr([対象文字列], "特定文字")-Len("特定文字")+1

下図では、テーブルのデータが前と変わり、特定文字「ABC」より右の文字列を取り出します。
列[式1]は、先の「A」の右を取り出す例の式を使っていますので、うまく取り出せていません。
今回は列[式2]に、下記の式で求めています。

  Right([F1],Len([F1])-InStr([F1],"ABC")-Len("ABC")+1)

クエリ結果

少し面倒な工夫ですが、これで万全です。

関連ヘルプ

2つの日付の期間を求める 《DateDiff》
数値の先頭に0を付け桁を揃えて表示する(ExcelならTEXT関数のような) 《Format》
特定の文字より左部分にある文字列を取り出す 《Left・InStr》
条件に一致するレコードの件数を求める(ExcelならCOUNTIF関数のような) 《Dcount》
文字列を半角または全角にする(ExcelのASC/JIS関数のような) 《StrConv》
DCount、DLookUpなど定義域集合関数について