web-dev-qa-db-ja.com

区切り文字を交互に使用して2行のデータを結合する

私は互いに関連している2行の値を使用して、2つの区切り文字を使用する構文を使用して、データを1つのセルにコンパイルする数式を作成しようとしています。

アクティブな行のセルに値が含まれている場合は、行2と3の情報を取得し、それらを区切り記号|と組み合わせて、すべての値が完了するまで別の区切り記号;を使用します。追加されました。出力は次のようになります。

1

私はtextjoin、join、およびifs関数を試しましたが、これを行うための式を構造化する正しい方法を見つけることができません。引数は、データの終わりまで2つの行の値を交互にします。別のtextjoinをネストしようとしましたが、これは値/区切り文字を交互にではなく追加するだけです。

これをどのように構成できるかについての提案は、いただければ幸いです。

4
Steven D.

スキルの列がBからGであると仮定して(適するように変更)、これを試してください:

=REGEXREPLACE(REGEXREPLACE(ARRAYFORMULA(JOIN(";",IF(NOT(LEN(B2:G2)),"",B$1:G$1&"|")&B2:G2)),";{2,}",";"),";$","")`

それはあなたが言ったことだけを行います...空白でないことを確認し、見つかったエントリのペアを返し、次にregexreplacesを使用して連続または末尾のセミコロンを削除します。

0

1
Joel Reid

Joelとは別のソリューションを思いついたので、自分の質問に答えます。データに対して少し異なるアプローチを使用する必要がありますが、答えに異なるアプローチをする人には役立つかもしれません。

上の画像のスキルレベル行(行34)の下に2行目(行35)を作成しました。その行には、次の式があります。

=ifs(ISBLANK(C34),,C34, (join("|", C33:C34)))

これは、そのスキルに設定された値の上記のセルを参照します。参照先のセルが空白の場合、数式セルは空白として扱われます。それ以外の場合は、joinを使用して、スキルIDを|を間に挟んでスキルレベルにリンクします。

次に、最終結果を生成するための2番目の式があります。

=textjoin(";", TRUE, C35:H35)

textjoinのブール値は、空白と識別されたセルをスキップするため、元の意図どおりに、スキル/スキルレベルの組み合わせを;で連結して区切ります。この方法を使用するより簡単な解決策がある場合、そこからどのように分解するのかまだわかりません!

1
Steven D.

別の行を追加したくないと仮定すると、誰が追加するので、以下が機能するはずです:

=JOIN(";",FILTER(
ArrayFormula(TRANSPOSE($C$2:$G$2)&"|"&TRANSPOSE(C3:G3)),
NOT(ISBLANK(TRANSPOSE(C3:G3)))
))
  • $ C $ 2:$ G $ 2はスキルIDの行の範囲です
  • C3:G3は個々のスキルIDの行の範囲です

ここでの仕掛けは、「|」を追加するだけです。すべてに適用し、FILTERを使用して、特定の行で空白になっているセルを削除します。

転置により、行を列として扱い、問題を単純化できます。ただし、コメントに記載されているように、これらは厳密には必要ありません。

=JOIN(";",FILTER(
ArrayFormula($C$2:$G$2&"|"&C3:G3),
NOT(ISBLANK(C3:G3))
))
1
sageco
  • 1セルソリューション:

    =ARRAYFORMULA(IF(LEN(C4:C&D4:D&E4:E&F4:F&G4:G&H4:H),
     REGEXREPLACE(REGEXREPLACE(TRANSPOSE(QUERY(TRANSPOSE(
     IF(C4:H<>"", C3:H3&"|", )&C4:H), , 50000)),
     " {5}| {4}| {3}| {2}| ", ";"), "^;|;$", ""), ))

    0

0
user0