EXCELの関数で、「文字列の中から、指定した文字(列)が最初に現れる位置を見つける」のはSERCHやFINDで簡単にできますが、「指定した文字(列)が最後に現れる位置」を探すことはできるのでしょうか?

ただし、マクロやaddinは使用せず、あくまでワークシート関数で処理可能な範囲で回答を御願いします。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:2006/09/13 09:20:16
  • 終了:2006/09/13 10:50:27

回答(2件)

id:ohmix1 No.1

ohmix1回答回数235ベストアンサー獲得回数142006/09/13 10:00:26

ポイント10pt

http://www.eurus.dti.ne.jp/yoneyama/Excel/kansu/moji_1.htm#find2

URLはダミー。


回答としてはいまいちですが、

検索文字列の出現回数を想定できるのなら以下のような組み合わせでできます。

A列 B列 C列 D列
--------------------------------------------------------------------------
1行 | ABC =FIND(A1,A2) =IF(ISERROR(B1),0,B1) =MAX(C1:C5)
2行 | ABCABCABC =FIND(A1,A2,B1+1) =IF(ISERROR(B2),0,B2)
3行 | =FIND(A1,A2,B2+1) =IF(ISERROR(B3),0,B3)
4行 | =FIND(A1,A2,B3+1) =IF(ISERROR(B4),0,B4)
5行 | =FIND(A1,A2,B4+1) =IF(ISERROR(B5),0,B5)


A1 ... 検索文字列

A2 ... 対象文字列

B1~B5 ... 検索処理(出現回数を5回と想定)

C1~C5 ... エラー補正

D1 ... 指定した文字(列)が最後に現れる位置


以上

id:kamaseimo

ありがとうございます。

実は自分も同様の手法で解決していたところです。

最大出現回数は今のところ11回ですが、日々変化する可能性があるため毎日列を精査する必要があり困っています。

2006/09/13 10:43:02
id:rikuzai No.2

りくっち回答回数1366ベストアンサー獲得回数1412006/09/13 10:16:44

ポイント60pt

A1に検索したい文字列、

検索したい文字列を「す」

検索対象の文字列に含まれない文字を「$」とすると、

任意のセルに


=FIND("$",SUBSTITUTE(A1,"す","$",LEN(A1)-LEN(SUBSTITUTE(A1,"す",""))))


でご希望の結果が得られるかと思います。


これは、検索文字列の中で探したい文字列を、元の文字列に含まれない文字に置換することでその場所をFINDで特定しています。

尚、何番目の文字を置換するかは、検索文字列の文字数から検索したい文字を消した文字列を引くことによって、検索したい文字が何回含まれているかを算出しています。

http://www.moug.net/

id:kamaseimo

すばらしい!できました。

大変勉強になりましたありがとうございました。

2006/09/13 10:47:30
  • id:ohmix1
    なるほど~。すばらしい発想です。
    でも、文字列(2文字以上)の検索でおかしくなりますね。
    <br>
    ・左のSUBSTITUTE関数の第4引数の計算がおかしい。LEN("す")で割るのかな?
    ・AAAA文字列からAA文字列を検索する場合。
  • id:rikuzai
    >ohmix1さん

    おっと!ミステイクでした!ご指摘の通り検索する文字列が2文字以上の場合おかしくなってしまいますね。
    というわけで改良版。
    文字数が多いといちいち書くのも面倒だろうと思うので、
    検索したい文字列がC1に記入されていると仮定してみました。
    =FIND("$",SUBSTITUTE(A1,C1,"$",(LEN(A1)-LEN(SUBSTITUTE(A1,C1,"")))/LEN(C1)))
  • id:ohmix1
    >rikuzaiさん

    AAAAA文字列からAA文字列を検索する場合。

    に対応しようと考えてみましたが、私には難しすぎて...

    上記式では2が返ってきますが、正解は4なのか3なのかも判断の分かれるところです。

    以上
  • id:rikuzai
    >ohmix1さん
    検索する文字列が同じ文字が連続するもので、かつ、検索対象の文字列の中でも連続する場合、
    確かに上記の式でも使えないですね。
    これはAAAAの中にAAが三つあると算出されてしまうためなんですが、
    このケースだけに特化した数式は作れても汎用は難しいですね。
    基本的には重なっている回数分を変換位置の数に足してやればいいんだとおもうのですが、
    これをどうやって判定させるかが今のところちょっと思いつきません。
    思いついたらまた書き込みますね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません