[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一番右のアンダーバー以降の文字列を取得(ただし例外あり)』(ふくまる)
お世話になります。
特定のセル(例えばA1)の文字列を参照し、以下の条件でB1セルに値を自動入力する関数を組んでいます。
1.A1の文字列のどこかに"kuro"が含まれている場合、B1に「黒」と入力
2.1がFalseの場合、一番最後のアンダーバーより右側の文字列をB1に入力
3.ただし、2の文字列が"ab6_9"や"ru11_13"のように数値の組み合わせが2つある場合は、最後から2番目のアンダーバーより右側の文字列を取得する
1と2は下記の式で可能ですが、3をどのようにすれば良いかわかりません。
=IF(COUNTIF(A1,"*_kuro*"),"黒",RIGHT(A1,LEN(A1)-FIND("●",SUBSTITUTE(A1,"_","●",LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))))))
ご教示いただけると大変助かります。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
3番目のパターン、例と結果を示してもらえないだろうか?
あと365であればTEXTAFTER関数が使えないだろうか?
=TEXTAFTER(A1,"_",-1) で、A1セルの文字列の一番最後の"_"より後を抜き出す。 (ねむねむ) 2023/06/06(火) 12:26:51
<ケース2>
id_abc_ru10
<ケース3>
id_abc_ru11_13
ケース3について、現在の式では"13"しか取り出せませんが、正しくは"ru11_13"となるよう、ひとつの式でケース2と3を区別したいです。
TEXTAFTER関数については知識不足でした。
ケース2と3を区別できればこれを使いシンプルにできますね!
(ふくまる) 2023/06/06(火) 12:43:59
現在、式をたてて確認できるのが2016なのでアイデアだけ。 TEXTSPLIT関数を使うと一つの文字列から区切り文字で区切った配列を求められる。
=TEXTSPLIT("id_abc_ru11_13","_") で id_abc abc ru11 13 という配列を得られる。 で =RIGHT(INDEX(TEXTSPLIT("id_abc_ru11_13","_"),LEN(A1)-LEN(SUBSTITUTE(A1,"_","")))) で ru11 の右端、1が
=LEFT(INDEX(TEXTSPLIT("id_abc_ru11_13","_"),LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))+1)) で 13 の左端 1が得られるので その両方が数値かどうかで判断できないだろうか? (ねむねむ) 2023/06/06(火) 13:19:50
_が2個以上なら TEXTAFTER(A1,"_",-(ISEVEN(COLUMNS(TEXTSPLIT(A1,"_")))+1)) (どん) 2023/06/06(火) 14:18:52
ああ、わざわざTEXTSPLIT関数の必要はなかった。 で式を立ててみた。 TEXTBEFORE関数で最後の_の前を抜き出しその右端、TEXTAFTER関数で最後の_の後ろを抜き出しその左端をチェック。
ただ365で試していないため、エラーなく動くかは未保障。
=LET(aa,LEN(A1)-LEN(SUBSTITUTE(A1,"_","")), IF(COUNTIF(A1,"*_kuro*"),"黒",TEXTAFTER(a1,"_",IF(AND(ISNUMBER(RIGHT(TEXTBEFORE(A1,"_",aa))*1),ISNUMBER(LEFT(TEXTAFTER(A1,"_",aa))*1)),-2,-1)))) (ねむねむ) 2023/06/06(火) 14:25:06
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.