2016-09-27 96 views
0

創建一個表單以供Google表格中的視頻遊戲使用,以便跟蹤參與小組活動。我希望將C列中的數據拆分並轉換爲多列,但無法找到無需我自己手動擴展公式的解決方案。拆分/將一列轉換爲多行和多列

這裏是什麼,我希望做一個例子: Desired Result

從F列和第1行是時間戳,連續3是艦隊指揮官,行4和的船隊成員(如果艦隊指揮官也在那裏,這很好,但如果我們可以過濾這個人,因爲他們也列在第3行)。這些數據將用於跟蹤每個成員的參與情況,以便他們得到回報。

到目前爲止,我使用=TRANSPOSE({Form!C2:C})並遵循了=TRANSPOSE(SPLIT(D4,", ",0))=TRANSPOSE(SPLIT(E4,", ",0)),等等。就像我說的,不過,我不想手動展開細胞,因爲會有很多車隊外出(包括當我睡着了),數據需要儘快更新。

+0

嗨,你可能分享一個示例電子表格,而不是一個截圖,以便我們有一些數據工作k與? – JPV

+0

當然,這是[鏈接](https://docs.google.com/spreadsheets/d/1DP8F6YzFbyRwAVRljFmFqufcwT8iJAhM1PuAg2BnWK4/edit#gid=975534474)。我需要的是引擎標籤。明天下面將嘗試js選項,但我希望他們的公式解決方案。 – dakaasin

+0

嗨達卡辛,如果你不允許複製,共享一張紙沒什麼用處。我很樂意嘗試制定一個公式,但請允許我使用這些數據(如果需要,用假值替換敏感數據)。 – JPV

回答

0

對於基於公式的方法,嘗試進入E1

=ArrayFormula(transpose({A2:A,D2:D,B2:B, IFERROR(TRIM(REGEXEXTRACT(","&C2:C,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,30))-1)&",+([^,]+)")))})) 

如果你並不真的需要你在包括空白行你想要的結果,改變上述

=ArrayFormula(transpose({A2:B,IFERROR(TRIM(REGEXEXTRACT(","&C2:C,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,30))-1)&",+([^,]+)")))})) 
+0

太棒了,這就是訣竅。我會進行一些研究,找出哪個部分做了什麼,但這是一個巨大的幫助。謝謝。 – dakaasin

0

可能有直接電子表格公式的解決方案(我正在考慮使用arrayformula的技巧),但爲了簡單起見,我會爲您提供一個使用自定義公式(Google Apps腳本)的解決方案。 所以here the demo 這裏在演示中使用的功能:

function fleetCommander(data) { 
    var out = [[], []]; 
    var header = data.shift(); 
    var fleets = []; 
    var maxFleet = 0; 
    data.map(
    function (row) { 
     if(row[0] == "") {return}; 
     var fleet = row[2].split(","); 
     fleets.push(fleet); 
     if(maxFleet < fleet.length) { maxFleet = fleet.length;} 
     out[0].push(row[0]); 
     out[1].push(row[1]); 
    } 
); 

    for(var fleetIndex = 0; fleetIndex < maxFleet; fleetIndex++) { 
    out.push([]); 
    } 
    for(var fleetIndex = 0; fleetIndex < maxFleet; fleetIndex++) { 
    for(var f = 0; f < fleets.length; f++) { 
     out[fleetIndex + 2].push(fleets[f][fleetIndex] || ""); 
    } 
    } 
    return out; 
}