アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のような関数が作りたく、どなたかご教示いただけますでしょうか。

**********************
以下のような文章があり、〇〇=の後ろの「〜」だけ抽出したい。(〜には英数字が入る)

【文章】
〇〇=〜,△△=〜,××=〜,〇〇=〜
**********************

A 回答 (5件)

No.3,4です。


No.3の回答の数式は、ご質問者が提示した例
〇〇=〜,△△=〜,××=〜,〇〇=〜
のように、元の文章は「〇〇=」から始まるとの先入観を持っていました。しかし、元の文章は「〇〇=」から始まるとは説明されていませんし、もしかすると「〇〇=」は一つも含まれていないかも知れません。
だとすると、No.3の回答の数式は、

=IFERROR(INDEX(TEXTSPLIT(REPLACE(A1,1,FIND("〇〇=",A1)+2,""),",","〇〇=",TRUE),0,1),"")

のように修正する必要があります。
また、No.4の数式も、「〇〇=」が一つも含まれていない場合のエラー処理を加えて、

=IFERROR(LEFT(TRIM(MID(SUBSTITUTE(REPLACE($A$1&",",1,FIND("〇〇=",$A$1)+2,""),"〇〇=",REPT(" ",LEN($A$1))),(ROW(A1)-1)*LEN($A$1)+1,LEN($A$1))),FIND(",",TRIM(MID(SUBSTITUTE(REPLACE($A$1&",",1,FIND("〇〇=",$A$1)+2,""),"〇〇=",REPT(" ",LEN($A$1))),(ROW(A1)-1)*LEN($A$1)+1,LEN($A$1))))-1),"")

とする必要があります。

また、fujillinさんが、FILTER関数を使用した数式をお示しになっています。別の数式として、FILTER関数を使って、

=FILTER(INDEX(TEXTSPLIT(A1,"=",",",TRUE),0,2),(INDEX(TEXTSPLIT(A1,"=",",",TRUE),0,1)="〇〇")*(1-ISERROR(INDEX(TEXTSPLIT(A1,"=",",",TRUE),0,2))))

を記述すれば、対象の「英数字」がスピル機能によって、縦方向に列挙されます。

なお、fujillinさんのご指摘のように、文字として扱う"「〇」「=」についは文章の中と同じ文字(文字種、全角半角を一致させる)必要があります。
    • good
    • 0

No.3です。


textsplit関数が使えないバージョンの場合は、抽出結果を列挙開始したいセルに、

=LEFT(TRIM(MID(SUBSTITUTE(REPLACE($A$1&",",1,FIND("〇〇=",$A$1)+2,""),"〇〇=",REPT(" ",LEN($A$1))),(ROW(A1)-1)*LEN($A$1)+1,LEN($A$1))),FIND(",",TRIM(MID(SUBSTITUTE(REPLACE($A$1&",",1,FIND("〇〇=",$A$1)+2,""),"〇〇=",REPT(" ",LEN($A$1))),(ROW(A1)-1)*LEN($A$1)+1,LEN($A$1))))-1)

を入れて、下方向へコビーすばよいと思います。
但し、No.3のtextsplit関数を用いた数式では抽出結果が空白の場合対象外にしていますが、上記数式では「空白」が返ります。
    • good
    • 0

textsplit関数が使えるバージョン限定ですが、対象が複数あり、それらを列挙するという前提なら、元の文章がA1セルにあるとして、列強を開始したいセルに、



=INDEX(TEXTSPLIT(A1,",","〇〇=",TRUE),0,1)

を記述すれば、対象の「英数字」がスピル機能によって、縦方向に列挙されると思います。
    • good
    • 0

こんばんは



ご例示の文章の場合、複数の「〇〇=」が存在するようですが、全てを抜き出すということと解釈しました。
また、「英数字」の連続をチェックするのは面倒なので、「〇〇=」の後の「,」までの文字列を抜き出すことと解釈しました。

対象が複数でいくつ存在するのか不明の場合は、スピル機能が使える環境(=356など)の方が便利なので・・・
仮に、A1セルの対象の文章があるものとして、
=IFERROR(TEXTJOIN(",",0,MID(A1,FILTER(ROW(OFFSET(A1,,,LEN(A1))),MID(A1,ROW(OFFSET(A1,,,LEN(A1))),3)="〇〇=","")+3,FIND(",",A1&",",FILTER(ROW(OFFSET(A1,,,LEN(A1))),MID(A1,ROW(OFFSET(A1,,,LEN(A1))),3)="〇〇=",""))-FILTER(ROW(OFFSET(A1,,,LEN(A1))),MID(A1,ROW(OFFSET(A1,,,LEN(A1))),3)="〇〇=","")-3)),"")

で全ての対象部分を「,」区切りで抽出できると思います。

例として、A1セルが
 〇〇=A12,△△=〜,××=〜,〇〇=B3456
の場合、結果は、
 A12,B3456
となります。

※ 「〇」の字体が何種類か異字体がありますので、文章中の「〇」と同じものを式中にも使用する必要があります。
    • good
    • 0

findを使うと目的の文字の位置がわかるので、=を見つけるようにする。


lenで文字列の長さを求める。
midで文字列の指定した開始位置から必要な桁数持ってくる
(開始位置はfindで求めた数+1、桁数はlenで求めた数-findの結果)
つまり、mid( findの結果+1, lenの結果-findの結果)みたいな感じ
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A