各行に次のようなデータが含まれるテーブルがあります。
チーム名|最初のメンバー|第二メンバー|第三メンバー|チームの説明
このデータを変換/分割して、各行にメンバーが1つだけ含まれるようにすることは可能でしょうか?このような:
チーム名|最初のメンバー|チームの説明 チーム名|第二メンバー|チームの説明 チーム名|第三メンバー|チームの説明
TRANSPOSE
を使用して列を変換できます。つまり、「最初のメンバー、2番目のメンバー、3番目のメンバー」がA1:A3であると仮定すると、どこかで関数を使用できます。
= TRANSPOSE(A1:A3)
以下のように列を埋めます
First member
Second member
Third member
チームメンバーの前後に列を繰り返すには、試してみてください。
= TRANSPOSE (SPLIT(REPT(CONCAT(A1, ","), COUNTA(A1:A3)), ","))
= TRANSPOSE (SPLIT(REPT(CONCAT(A5, ","), COUNTA(A1:A3)), ","))
列を区切りコンマで繰り返し、結果の配列を分割して変換します。
Google Sheets配列処理機能とFILTERを使用して、目的の結果を取得します
=FILTER({A:A,B:B,E:E;A:A,C:C,E:E;A:A,D:D,E:E},LEN({A:A;A:A;A:A}))
注:スプレッドシートで小数点記号としてカンマ,
を使用している場合は、上記の式のコンマをバックスラッシュ\
に置き換えてください
次のGoogle Appsスクリプトを使用する場合、自動的に実行されます。
function SPLIT() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh0 = ss.getSheets()[0], sh1 = ss.getSheets()[1];
// get data from sheet 1
var data = sh0.getDataRange().getValues();
// create array to hold data
var aMain = new Array();
// itterate through data and add to array
for(var i=1, dLen=data.length; i<dLen; i++) {
for(var j=1; j<4; j++) {
aMain.Push([data[i][0],data[i][j],data[i][4]]);
}
}
// add array of data to second sheet
sh1.getRange(2, 1, aMain.length, 3).setValues(aMain);
}
サンプルファイルを用意しました:SPLIT開くと、2つのオプションを持つ追加のメニュー項目が作成されます。
スクリプトをシートで機能させるには、スクリプトを微調整する必要があります。メニューオプションTools、Script Editorを使用してスクリプトを追加します
Rubénの優れたソリューションに追加するために、彼の式を次のように変更すると、空のユーザーとチームごとのグループがスキップされます。
=QUERY(FILTER({A:A,B:B,E:E;A:A,C:C,E:E;A:A,D:D,E:E},LEN({A:A;A:A;A:A})),"Select * Where Not Col2='' Order by Col1 Asc")