特定の文字のうちn番目のものの文字位置を求める

f:id:accs2014:20181027163930p:plain:right:w550

 いきなり実例で説明します。
 このようなテーブルがあり「型番」列にいくつかのハイフン(-)が含まれています。
 各レコードのハイフンのうち3番目のものは、文字列のそれぞれ何文字目に位置しているでしょうか。

 Excelの場合はFIND関数とSUBSTITUTE関数による解法がありますが、AccessではInstr関数とReplace関数を用います。


f:id:accs2014:20181027163928p:plain:right:w600

 デザインビューです。
 次のような列を設けます。



3番目ハイフン位置: InStr(Replace([型番],"-","/",1,2),"-")

 補足しますと、Replace関数により型番列の文字列のうち、左から2番目までのハイフンをスラッシュ(/)に置き換えています(「左から2番目まで」というのはReplace関数の第5引数により指定しています)。その結果をInStr関数に渡して最初のハイフンの位置を求めていますので、結果的に3番目のハイフンの位置がわかるというわけです。
 4番目のハイフンの位置を知りたい場合は、式中の「2」を「3」に替えればOKです。


f:id:accs2014:20181027163925p:plain:right:w550

 データシートビューです。
 3番目のハイフンが存在しない場合、戻り値は0となります。