1. ホーム
  2. エクセル

[解決済み】Excel:文字列の最後の文字/文字列の一致

2022-04-12 08:31:08

質問

基本関数を使用して、文字列内の最後の文字/文字列の一致を識別する効率的な方法はありますか? つまり、最後の文字/文字列ではなく 文字列が最後に出現する位置、すなわち での 文字列のことです。 Searchfind どちらも左から右へ動くので、長い再帰的アルゴリズムなしに適用する方法が思いつきません。 そして この解決策 はもう古いようです。

どのように解決するのですか?

エクセルのバージョンが新しくなると、新しい関数が追加され、その結果新しい方法が生まれます。古いバージョンでも再現可能ですが(まだ見たことがありません)、Excel O365を持っている場合は使用することができます。

=MATCH(2,1/(MID(A1,SEQUENCE(LEN(A1)),1)="Y"))

これは、(重なっている)部分文字列の最後の位置を取得するために使用することもできる。

=MATCH(2,1/(MID(A1,SEQUENCE(LEN(A1)),2)="YY"))


| Value  | Pattern | Formula                                        | Position |
|--------|---------|------------------------------------------------|----------|
| XYYZ   | Y       | =MATCH(2,1/(MID(A2,SEQUENCE(LEN(A2)),1)="Y"))  | 3        |
| XYYYZ  | YY      | =MATCH(2,1/(MID(A3,SEQUENCE(LEN(A3)),2)="YY")) | 3        |
| XYYYYZ | YY      | =MATCH(2,1/(MID(A4,SEQUENCE(LEN(A4)),2)="YY")) | 4        |


これにより、任意の置換文字が不要になり、パターンの重ね合わせも可能になりますが、その反面、配列を使用することになります。


古いバージョンのExcelでも、次のいずれかの方法で同じ動作を強制することができます。

=MATCH(2,1/(MID(A2,ROW(A1:INDEX(A:A,LEN(A2))),1)="Y"))

を通じて入場。 Ctrl シフト 入力 またはインラインで INDEX で暗黙の交差を解消します。

=MATCH(2,INDEX(1/(MID(A2,ROW(A1:INDEX(A:A,LEN(A2))),1)="Y"),))