web-dev-qa-db-ja.com

ARRAYFORMULA()はSPLIT()では機能しません

=arrayformula(split(input!G2:G, ","))を使用すると、分割式が列全体に展開されないのはなぜですか?

Input!G2セルについてのみ結果が得られますが、G列の残りの結果は得られません。 =arrayformula(find(",", input!G2:G))のような他の式は機能し、問題なく展開されるようです。

15
jakub

垂直配列に適用されたSPLITは、現在機能しています。(2017年1月4日)

=ArrayFormula(SPLIT(input!G2:G,","))

またはエラーマスキング用

=ArrayFormula(IFERROR(SPLIT(input!G2:G,",")))

注:結果の配列は、分割された要素の最大数と同じ幅になります。


(回答の残りの部分は適用されなくなりましたが、...歴史的な目的のために保持されていますか?)

これは本当に悪い答えと見なされますが、そうではありません。

ギザギザの配列(各行に異なる数の要素)が生成される可能性があり、問題があると見なされる可能性があるためだと思います。ただし、以前のバージョンのSheetsでは「arraySPLIT」が「機能」していました(ただし、配列の最初の要素で正しく機能しなかったというバグがありました)。

SPLITは、配列(INDIRECT、INDEX、SUMIFSなど)で反復できない関数として単独ではありません。


回避策(2017年1月4日編集):

=ArrayFormula(REGEXREPLACE(input!G2:G&REPT(",",6),REPT("([^,]*),",6)&",*","$"&COLUMN(OFFSET(A1,,,1,6))))

OFFSET(A1 , 1,6)およびREPT関数の6は、SPLITの要素の最大数を決定します。データの列から要素の最大数を計算する式を挿入することもできますが、その場合、パフォーマンスはさらに低下します。

また、ここでの注意点は、1文字(この場合はコンマ)による分割のみをサポートすることです。

または、Google AppsScriptのカスタム関数を確認することもできます。


いずれにせよ、REGEXEXTRACTは2番目の引数の配列をサポートしていないように見えるため、この以前の回避策は機能しなくなりました。

=ArrayFormula(IFERROR(REGEXEXTRACT(","&input!G2:G,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,6))-1)&",+([^,]+)")))

18
AdamL

次のスクリプトを使用できます。

function better_split(col, separator) {
  var new_col = [];
  for (var r = 0; r < col.length; r++) {
    if (col[r]) {
      new_col.Push(col[r][0].split(separator));
    }
  }
  return new_col;
}

そのように使用します(パフォーマンス上の理由から):

=better_split(filter(A2:A, len(A2:A)>0), "/")
6
Mario

別の回避策は、最初にARRAYFORMULAを使用してG2:G列をコンマで結合することです。次に、それを分割することができます。最後に、オプションでそれを列に転置して戻すことができます(そうでない場合は行として出力されます)。

=TRANSPOSE(SPLIT(ARRAYFORMULA(JOIN(",",FILTER(G2:G,NOT(ISBLANK(G2:G))))),","))
1
Ellesmera

[データ]> [テキストを列に分割...]は関数や数式なしで機能するため、配列数式は必要ありません。

0
pnuts