これは、Rubénの答えに似た正規表現ベースの式です。
=arrayformula({regexextract(A1:A3,"^[^ ]+"), regexextract(A1:A3,"[^ ]+$")})
ここで、^[^ ]+
は、文字列の先頭にある[^ ]+$
すべての非スペース文字と、を意味します:文字列の最後にあるすべての非スペース文字を意味します。スペースをコンマなどで置き換えることができます。たとえば、[^,]
これは、セパレータを1つだけ含む文字列のみを対象としています。それ以外の場合、出力は正しくありません。
カスタム機能
任意の数の文字列への分割を処理するために、として使用できるカスタム関数を作成しましたarraysplit(A1:A3, " ")
。最初のパラメーターとして列範囲(または単一のセル)を受け入れ、2番目のパラメーターとしてセパレーターを受け入れます。
組み込みsplit
関数とは異なり、これは空の文字列を無視しません。たとえば、a,b,,c
コンマで分割すると4つのセルになり、3番目のセルは空白になります。(私の意見では、空の文字列を無視することは、組み込みsplit
関数の設計における大きな欠陥です。)
/**
* Splits a column of strings by a separator.
*
* @param {A1:A3} range Column range or a single cell
* @param {" "} separator Separating character or substring
* @returns Substrings, including empty strings
* @customfunction
*/
function arraysplit(range, separator) {
if (range.constructor !== Array) {
range = [[range]]; // handle single-cell input
}
if (range[0].length !== 1) {
throw new Error('First argument must be a column range');
}
var i, j, split, output = [], width = 1;
for (i = 0; i < range.length; i++) {
split = range[i][0].split(separator);
output.push(split);
width = Math.max(width, split.length); // max number of pieces
}
for (i = 0; i < output.length; i++) {
for (j = 0; j < width - output[i].length; j++) {
output[i].push(''); // empty string to make rectangular array
}
}
return output;
}
ボーナス機能:組み込みの分割とは異なり、arraysplit
空の文字列を区切り文字として受け入れます。その場合、文字列は個別の文字に分割されます。(もちろん、この動作はJavaScriptのsplitメソッドから単純に継承されます。)
=arrayformula(split(A1:A3," "))
とにかく期待通りに機能しません。