Googleスプレッドシートでテキストから列への変換はどのように行いますか?
たとえば、1つのセルに次のデータ文字列があります。
5,233,6,2,6,7,2,2,6,6
コンマ区切りで列に分割します。
編集:Googleの能力を弱体化することで地獄に曲がったように見えるため、承認済みの回答をGoogle Apps Scriptingを使用しないものに変更しました。
SPLIT
。値が設定されている?知っている値を貼り付けることができます。
Googleスプレッドシートでテキストから列への変換はどのように行いますか?
たとえば、1つのセルに次のデータ文字列があります。
5,233,6,2,6,7,2,2,6,6
コンマ区切りで列に分割します。
編集:Googleの能力を弱体化することで地獄に曲がったように見えるため、承認済みの回答をGoogle Apps Scriptingを使用しないものに変更しました。
SPLIT
。値が設定されている?知っている値を貼り付けることができます。
回答:
次の式はまさにそれを行います。テキストから列へ:
A1=5,233,6,2,6,7,2,2,6,6
A2=SPLIT(A1;",")
そして次; テキストから行:
A1=5,233,6,2,6,7,2,2,6,6
A2=TRANSPOSE(SPLIT(A1;","))
UPDATE 03-02-2013
結果を分割しA1
て値を貼り付けると、OPの回答で使用されるすべてのコード行と同じ結果が得られます。Google Apps Scriptでも試してみましたが、これが私が作成したものです。テキストから列へ
function mySplit() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cell = sh.getActiveCell().getValues()[0];
var sCell = cell[0].split(",");
var row = sh.getActiveCell().getRowIndex();
var col = sh.getActiveCell().getColumnIndex();
sh.getRange(row,col+1,1,sCell.length).setValues([sCell]);
}
組み込みのsplit関数を使用して、結果を分割し、それをシートに追加します。それ以上でもそれ以下でもありません。
Text to Columnsは非常に便利な機能であり、多くのGoogleスプレッドシートユーザーがExcelを使用するようになった理由の1つです。Googleがこの機能を公式にサポートすることを決定するまで、このソリューションは機能を追加するためのポリフィルとして使用できます。
コードは次のとおりです。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
menuEntries.push({ name:"Text to columns", functionName:"textToColumns" });
menuEntries.push({ name:"Text to columns (custom separator)", functionName:"textToColumnsCustom" });
menuEntries.push(null);
menuEntries.push({ name:"Columns to Text", functionName:"columnsToText" });
menuEntries.push({ name:"Columns to Text (custom separator)", functionName:"columnsToTextCustom" });
ss.addMenu("Advanced", menuEntries);
}
function textToColumnsCustom() {
var separator = Browser.inputBox("Text to column","Enter the the separator",Browser.Buttons.OK);
textToColumns(separator);
}
function columnsToTextCustom() {
var separator = Browser.inputBox("Column to text","Enter the the separator",Browser.Buttons.OK);
columnsToText(separator);
}
// Expands a single cell of CSV formatted text to multiple columns
function textToColumns(separator) {
var sep = typeof(separator) !== 'undefined' ? separator : ',';
var ss = SpreadsheetApp.getActiveSheet();
var r = ss.getActiveRange();
// check that only one column was selected
var col = r.getColumn();
if(col !== r.getLastColumn()) {
Browser.msgBox("Error", "Invalid selection, too many columns.", Browser.Buttons.OK);
return;
}
var firstRow = r.getRow();
// short cut the one row selection
if(firstRow === r.getLastRow()) {
var values = r.getValues().toString().split(sep);
ss.getRange(firstRow,col+1,1,values.length).setValues(new Array(values));
return;
} else {
var rows = r.getValues();
var values = [];
var cols = 0;
for(var i = 0, len = rows.length; i < len; i++) {
var rowValues = rows[i].toString().split(sep);
var rowValuesLen = rowValues.length;
if(cols < rowValuesLen) { cols = rowValuesLen; }
values.push(rowValues);
}
// set all values at once (padding required because setValues doesn't accept jagged 2d arrays)
padRow(values, cols);
ss.getRange(firstRow,col+1,values.length,cols).setValues(values);
}
}
// Pads a row with empty values to the specified length
function padRow(array, length) {
for(var i = 0; i < array.length; i++) {
var arrLen = array[i].length;
if(arrLen < length) {
var padLen = length - arrLen;
var padding = new Array(padLen);
array[i].push.apply(array[i], padding);
for(var j = 0, len = array[i].length; j < len; j++) {
if(typeof(array[i][j]) === 'undefined') {
array[i][j] = "";
}
}
}
}
return array;
}
function columnsToText(separator) {
var sep = typeof(separator) !== 'undefined' ? separator : ',';
var ss = SpreadsheetApp.getActiveSheet();
var r = ss.getActiveRange();
var col = r.getColumn();
var firstRow = r.getRow();
var rows = r.getValues();
var values = [];
for(var i = 0, len = rows.length; i < len; i++) {
var value = rows[i].join(sep);
values[i] = [value];
}
col -= 1;
ss.getRange(firstRow,col,values.length,1).setValues(values);
}
スクリプトエディターを保存して閉じます。次に、スプレッドシートを更新します。読み込みには数秒かかりますが、ツールバーの「ヘルプ」の後に「詳細」ポップアップというメニューが表示されます。
使用法:
それでおしまい。また、カスタム区切り文字を使用して(「テキストから列(カスタム)」を介して)分割を行い、プロセスを逆に(「列からテキスト」を介して)行うこともできます。
1,421,873,190,017,370,000,000,000 1.42E+24
そのcsv行は9列に分割されるはずでしたが、1列に分割されました。
split関数を使用しましたが、continue式も使用し、A列のテキストから適切な間隔でBCDE列に正確に変換するため、完全に機能しました。
私の例:
Cell A1= text1, text2, date1, number1
Cell B1= split(A1,",")
B1の結果はtext1です。C1の結果はtext2 D1の結果はdate1 E1の結果はnumber1です。
日付は6月1日と綴られており、01/06に翻訳されているため、形式を処理します。
分割がセルで使用することを公式にはどこBCDE CONTINUE(B1; 1; 2)
、CONTINUE(B1; 1; 3)
、CONTINUE(B1; 1; 4)
。この部分はすべて自動的に作成されました。
私はAppsスクリプトを使用したEvanの回答が本当に好きで、わずかな改善を行いました。正規表現の区切り文字の一致のサポートを追加しました。onOpenのmenuEntriesに追加したもの:
menuEntries.push({
name: "Text to columns (regular expression separator)",
functionName:"textToColumnsRegExp"
});
そして、参照される関数を追加しました:
function textToColumnsRegExp() {
var separator = Browser.inputBox(
"Text to column",
"Enter the regular expression for the separator ",
Browser.Buttons.OK);
if (separator) {
textToColumns(new RegExp(separator));
}
}
EvanはJavascriptのString.prototype.splitを使用しているため、他の変更は必要ありません。これは、区切り文字として文字列またはRegExpオブジェクトを受け入れます。エヴァンを称賛します!
これに役立つメニュー項目があるように見えます:データ→テキストを列に分割...
セルをシングルクリックして、データを貼り付けます。
複数行にわたって表示されますが、1列のみです。
新しく入力されたセルを強調表示したまま、メニューのデータ→テキストを列に分割...に移動します
アプリがセパレーターを自動検出できた場合は、おめでとうございます。完了です!
それ以外の場合は、分割するセパレーターを尋ねる小さなウィジェットが表示されます。
注:このウィジェットはウィンドウの下部近くに表示され、見つけにくい場合があります。
ウィジェットを使用して、データの区切り文字をコンマ、セミコロン、ピリオド、スペース、またはカスタムで選択します。
タブで分割する場合:
また、columnToTextに相当するのは、=JOIN(delim, array)
式を使用することです。たとえば=JOIN(",", A1:A10)
、セルA1〜A10の値の文字列を連結した結果になります。
Googleスプレッドシートの新しいバージョンでは、Google App Scriptsは廃止されました。
Googleアドオンギャラリーのパワーツールを使用して、分割機能を使用できます。うまくいきます。