「分割」区切り文字列、空白のエントリを保持


10

Googleスプレッドシート(​​新バージョン)のSPLITおよびJOIN関数を使用して一部のデータを操作しようとしていSPLITます。空白のエントリが保持されていないため、問題が発生しています。

データソースは、基本的に次のように設定されています。

   |  A    B    C    D
-----------------------
1  |  q    5    r    2
2  |  s         t    4
3  |  u    8    v
4  |  w    3    x    6

(このデータセットの空白のエントリは、「測定なし」を表します。これはの測定とは異なります0

AとではC、次の式を使用して必要な結果を取得しています。

=SPLIT(JOIN("~",A1:A4,C1:C4),"~")

これにより、予想どおりq s u w r t v x、それぞれのセルに行が作成されます。

ただし、このメソッドは列Bとでは機能しませんDJOIN期待どおりに機能し、出力が得られます。

5~~8~3~2~4~~6

SPLITただし、その出力で実行すると、問題が発生します。5 8 3 2 4 6空のセルなしで58またはの間4、またはの間で残ります6。これは、ペアが分割されることを意味します(たとえばsv空のセルに対応する必要がwありxますが、代わりに、そうします)。問題は、2つの区切り文字の間にヌルエントリが存在するのではなく、1つの区切り文字としてSPLIT解釈~~されることです。

このようなシナリオで空白のエントリを保持する方法を知っている人はいますか?

望ましい出力は次のようになります

q  s  u  w  r  t  v  x
5     8  3  2  4     6

これらの空のフィールドのスペースで問題が解決しますか?
エール

「」を入力すると、空白のエントリが保持されます(ありがとう、@ AlE。!)。ただし、特にこれらすべてのエントリに「」を手動で入力すると、非常に時間がかかり、エラーが発生しやすい。
LiberalArtist 2014

スプレッドシートの数式は私の得意ではありません。おそらくIF()、空のフィールドをスペースに自動変換することで何かができるでしょう。
エール

1
更新:@AlE。のアイデアにより=ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))、空白セルに ""を含む列のダミーセットを作成するためにを使用して、すぐに計算を実行できるようにSPLITなりましたJOIN。これは、およびに使用されます。しかし、誰かがよりエレガントな解決策を持っていることを願っています:これは私のドキュメントにたくさんの余分なものを追加し、さらにデータセットに測定が追加されるので、いくつかの異なる場所で行番号を更新する必要があります。(少なくとも今のところデータを
整理して

回答:


3

次の解決策を試してください。

=ARRAYFORMULA(TRIM(SPLIT(JOIN(" ,", A1:A4,C1:C4), ",")))

説明しました

SPLIT関数は空のセルを無視することをすでに示したので、区切り文字としてこの文字列を選択します" ,"JOIN関数の中間結果は次のようになります。
ここに画像の説明を入力してください

SPLIT関数の区切り文字を次のように選択します","SPLIT関数の中間結果は次のようになります。
ここに画像の説明を入力してください

ただし、ここで、追加された余白に対処する必要があります。したがって、このTRIM関数を使用して、末尾または先頭の空白をすべて削除しました(と組み合わせてARRAYFORMULA)。LEN各中間結果の値を比較します。

結果

ここに画像の説明を入力してください

:私はあなたのためのサンプルファイル作成した空白のセルを保持するためにSPLITを


2

次の解決策を試してください。

コード

function myJoin() { 
  var output = []; 
  for(var i = 0, iLen = arguments.length; i < iLen; i++) {
    for(var r = 0, rLen = arguments[i].length; r < rLen; r++) {
      output.push(arguments[i][r][0]);
    }    
  }
  return [output];
}

使用法

ここに画像の説明を入力してください

必要な数だけ関数に範囲を追加すると、それらが処理されます。この小さなスクリプトをスプレッドシートのスクリプトエディターに追加します([ツール]> [スクリプトエディター]、[保存]ボタンを押します)。

:私はあなたのためのサンプルファイル作成した空白のセルを保持するためにSPLITを


2

簡潔な答え

次の式は、目的の結果を返します。

=Transpose({A1:B4;C1:D4})

拡張回答

この回答は、選択したアプローチを機能させる方法を説明するのではなく、望ましい結果を得る方法を提供することに重点を置いています。

XY問題

OPはXを取得する必要があり、Yはその結果を返す必要があると考えています。Yにはいくつかの注意点があるため、このアプローチには問題があります。OPがXを取得する方法を求める代わりにYを機能させる方法について尋ねるので、これは市長の問題になる可能性がありますが、コンテキストと目的の結果が提供されるため、それほど大きくありません。

解決

Googleスプレッドシートは、エンドユーザーの視点から見ると、非常にシンプルな方法で複数値の結果を処理できます。一方、特別な表記法を使用して、エンドユーザーが配列を定義できるようにすることができます。

上記の機能により、SPLIT()およびJOIN()関数を使用せずに、またそれらに固有の警告なしに、期待される結果を得ることができます。

式の説明

{A1:B4;C1:D4}

これは、2つの2 X 4配列/範囲によって作成された2 X 8配列です。セミコロン(;)は、スプレッドシートの小数点記号がドット(.)であると想定して使用されています。小数点記号がカンマの場合は、バックスラッシュ(\)に置き換えます。

=Transpose({A1:B4;C1:D4})

2 X 8配列を8 X 2配列に変換します。

この方法の利点の1つは、空白セルを特別に処理する必要がないことです。その他の利点は、非常にコンパクトなフォーミュラであり、適応が非常に簡単なことです。

参考文献


1

結合して区切り文字を ""にすると、基本的に、前にスペースが付いたコンマは、再度分割したときにそのスペースを自動的に保持します。

=SPLIT(JOIN(" ,",A1:A4),",")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.