miyyyyyy
@miyyyyyy

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【スプレッドシート】&CHAR(10)で複数セルを接続した際、空白があったら詰める関数

解決したいこと

下記のF2に出勤者の氏名を、氏名ごとに改行を入れて表示したいのですが、
中間に空白ができてしまいます。
この空白を消す方法を教えていただきたいです。

image.png

・B~E列は出勤の日にチェックを入れてもらいます。
・チェックを入れた場合、XLOOKUPでG~J列にその日の出勤者の氏名を表示させます。
・F列に=は「TRIM(G2&CHAR(10)&H2&CHAR(10)&I2&CHAR(10)&J2)」と入れて、
 出勤している人の氏名を氏名ごとに改行を入れて表示しています。

発生している問題・エラー

お休みの場合(チェックが入っていない場合)、TRIMで前後の空白はカットしているのですが、間の人が休んだ場合(画像でいうと田中・山田)、そこが空白になってしまいます。

該当するソースコード

=TRIM(G2&CHAR(10)&H2&CHAR(10)&I2&CHAR(10)&J2)

自分で試したこと

TRIMで空白をカットしようとしましたが、前後しかカットできませんでした。

0

3Answer

"G2:J2"のセル値を使用して、それらの値を改行させて一つのセルへ入れたいとの理解です。

この場合、次のようなFormulaはいかがでしょうか。どちらのFormulaもセル"F2"へ入れてください。

=TEXTJOIN(CHAR(10),TRUE,G2:J2)

各セル値をTRIMしたい場合は下記をテストしてください。

=ARRAYFORMULA(TEXTJOIN(CHAR(10),TRUE,TRIM(G2:J2)))

または、F列に=は「TRIM(G2&CHAR(10)&H2&CHAR(10)&I2&CHAR(10)&J2)」と入れて、出勤している人の氏名を氏名ごとに改行を入れて表示しています。から、"G2:J"の値を使って1つのFormulaで"F2:F"へ値を出力させたい場合は下記のFormulaはいかがでしょうか。この場合、Formulaをセル"F2"へ入れてください。

=BYROW(G2:J,LAMBDA(values,TEXTJOIN(CHAR(10),TRUE,values)))

または

=BYROW(G2:J, LAMBDA(values, ARRAYFORMULA(TEXTJOIN(CHAR(10),TRUE,TRIM(values)))))
1Like

Comments

  1. @miyyyyyy

    Questioner

    ご回答ありがとうございます!

    =TEXTJOIN(CHAR(10),TRUE,G2:J2)
    

    こちらでやりたいことができました!
    私の頭でも理解できました!
    TEXTJOINという関数を初めて知りました!

    【自分のメモ】
    TEXTJOINテキストジョイン
    (区切り記号, 空の文字列を無視, 文字列1, 文字列2, ..., 文字列252)
    https://dekiru.net/article/14504/

    他のご提案もありがとうございます!
    少し難しいですが理解できるように参考に勉強します!

そこが空白になってしまいます

それは空白ではなく、CHAR(10)改行ですね。
セルH2やI2が空白であっても、CHAR(10)を連結しているためです。
空白セルの場合は、CHAR(10)を連結しないようにすることですかね?

=G2&if(ISBLANK(G2),"",CHAR(10))&H2&if(ISBLANK(H2),"",CHAR(10))&I2&IF(ISBLANK(I2),"",CHAR(10))&J2
1Like

Comments

  1. @miyyyyyy

    Questioner

    ご回答ありがとうございます!

    >空白セルの場合は、CHAR(10)を連結しないようにすることですかね?

    はい!そうです!
    ご回答いただいた、中にifを入れることでやりたいことができました!
    ifを中に入れられると思っていなかったので、とても参考になりました!
    ありがとうございます!!!

このような方法はどうでしょう:

spreadsheet.png

=IFNA(TEXTJOIN(CHAR(10),TRUE,FILTER(B1:E1,B2:E2)))

FILTER 関数でチェックが入っている列を選んで,同じ列の先頭行(名前行)を TEXTJOIN 関数で結合しています.
チェックが入っている列が存在しないと #N/A になるので,IFNA 関数でつぶしています.

1Like

Comments

  1. @miyyyyyy

    Questioner

    ご回答ありがとうございます!
    こちら、やりたいことのファイナルアンサーです(TT)
    FILTERを使うことでG~J列がいらなくなり、よりシンプルになりますね!!!!
    ありがとうございます!!!!

Your answer might help someone💌