###前提・実現したいこと
VBAを使用せず数式のみで、数字と数字以外がランダムな全角/半角混在の文字列から、出現する連続した数字(1文字含む)のうち最後尾のものを取り出したい。
VBAで行った方が簡潔なのは分かっています。
こちらの質問で、ハマってしまいました。
###発生している問題・エラーメッセージ
以下の手順で取り出そうとしていますが、③のNOT判定が意図通りに動作しません。
何か記述に足りないところがあるのでしょうか?
①文字列の最後尾にある数字の位置を取得(=B1)
※文字列分の配列をROW()関数で生成し、MID()により1文字ずつ、"0"~"9"に含まれるかの判定結果と文字位置との積を取りTrueとなる文字位置の配列の最大値を求める。
②①の位置までの文字列を生成(=C1)
③②文字列の最後尾にある数字以外の位置を取得(=D1)
※対象文字列と判定が逆転している以外は①に同じ。
④文字列より③と①で挟まれる文字列を取得(=E1)
###該当のソースコード
A1="あいうえお12345かきくけこ67890さしすせそ" B1=MAX((MID(ASC(A1),ROW(INDIRECT("1:"&LEN(A1))),1)={"1","2","3","4","5","6","7","8","9","0"})*ROW(INDIRECT("1:"&LEN(A1)))) C1=MID(A1,1,B1) D1=MAX((MID(ASC(C1),ROW(INDIRECT("1:"&LEN(C1))),1)<>{"1","2","3","4","5","6","7","8","9","0"})*ROW(INDIRECT("1:"&LEN(C1)))) E1=MID(A1,D1+1,B1-D1)
※先頭のA1~D1はセルの位置を表したものです。B1およびD1は、ctrl+shift+enterによる配列数式です。
上記例では、B1=20となり正しい結果ですが、D1=15となって欲しいのにD1=20となります。
###試したこと
NOT()関数に変更したり、ISERROR()とFIND()の組み合わせに変更したりしてみましたが、同様の結果です。
###補足情報(言語/FW/ツール等のバージョンなど)
Excel 2010
Windows 10

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/11 12:53 編集