セルに入力されているテキストを、1文字ずつ分解して1文字ずつセルに入れてくれるGoogle Apps Scriptです。先日作成した「スプレッドシートを一発で方眼紙にする」と組み合わせると原稿用紙に書いたようなシートが作れます。
特にありません。今お使いのスプレッドシートに組み込めます。
選択されているセルに入っているテキストを分割し、1セルに1文字ずつ分割することができます。
1行あたりの文字数は任意の数を入力可能です。
分割したいテキストが入力されているセルを選択します。
上のメニューに有る「スクリプト実行」から「文章を1文字ずつセルに分割する」を実行します。
1行あたりの文字数を半角数字で入力してください。
シートの列数を超えないように入力する必要があります。デフォルトのA〜Z列だと26が上限になります。
テキストが分割され、1文字ずつセルに入りました。
1行の文字数が1以上の整数ではなかった場合は「1以上の半角整数を入力してください」を表示されてスクリプトが終了します。
指定した1行あたりの文字数が、存在する列の数より多かった場合は「列の数が足りません。増やしてから再度実行してください。現在の列数:xx」と表示されてスクリプトが終了します。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00049/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('文章を1文字ずつセルに分割する', 'split_text_by_character');
// メニューを画面に追加する
menu.addToUi();
}
function split_text_by_character() {
// UIを取得
const ui = SpreadsheetApp.getUi();
// アクティブなスプレッドシート、シートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 1行あたりの行数を入力させる
const response = ui.prompt('1行あたりの文字数を入力してください', ui.ButtonSet.OK_CANCEL);
// キャンセルが押されたらスクリプトを終了する
if (response.getSelectedButton() == ui.Button.CANCEL) {
return;
}
// 入力した文字数を取得する
const char_per_line = parseInt(response.getResponseText());
// 入力された値が数値ではない or 1未満の場合はエラーメッセージを表示して終了する
if (!isFinite(char_per_line) || char_per_line < 1) {
ui.alert('1以上の半角整数を入力してください');
return;
}
// 指定された1行の文字数=必要な列数になる。現在存在する列で足りるかどうかチェック。
if (char_per_line > sheet.getMaxColumns()) {
ui.alert('列の数が足りません。増やしてから再度実行してください。\n現在の列数:' + sheet.getMaxColumns());
return;
}
// アクティブなセルを取得
const active_cell = sheet.getActiveCell();
// アクティブセルのテキストを取得する
const text = active_cell.getValue();
// テキストを1文字ずつ分割して配列にする
const text_split = text.split('');
// 分割した配列を格納する変数を準備
const result = [];
// 分割すると複数列になるため、行数を管理するためのカウンタ
let counter = 0;
// 1行目はループ外で定義する。1行あたりの文字数の配列を事前に作成する
result[counter] = new Array(char_per_line);
for (let i = 1; i <= text_split.length; i++) {
// 結果の配列に文字を追加していく
// 事前に配列は作られているので、そのキーに対して文字を追加。
// ループの開始値が1なので1引いておく
result[counter][i - (counter * char_per_line + 1)] = text_split[i - 1];
if (i % char_per_line == 0) {
// テキストの文字数/1行の文字数が0になったら改行する必要があるためカウンタを増加させる
counter++;
// 1行あたりの文字数の配列を事前に作成する
result[counter] = new Array(char_per_line);
}
}
// アクティブセルを起点に、必要な範囲を取得する
const range = sheet.getRange(active_cell.getRow(), active_cell.getColumn(), result.length, result[0].length);
// シートに書き込む
range.setValues(result);
}
選択した行範囲の順番を逆にするGoogle Apps Scriptです。ソートではなく、単純に順番を逆にします。関数の組み合わせでも実現できますが、GASを登録してしまったほうが早いかもしれません。
選択した列範囲の順番を逆にするGoogle Apps Scriptです。行バージョンを作ったので、列バージョンも。ニーズはあるのでしょうか。
選択した行および列範囲の順番を逆にするGoogle Apps Scriptです。これは本当に使い所があるのかわかりませんが、作ってみたので公開します。
1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。行方向に分割します。
1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。列方向に分割します。
選択されたセル範囲のテキストを、1つのセルにまとめるGoogle Apps Scriptです。セルを分けて色々書き込んだけど、1セル内に改行して入力するんだった・・・!というときに使えるかも。
スプレッドシートの選択している範囲だけをCSVで出力するGoogle Apps Scriptです。CSVで出力したい・・・けどシート全体をCSVでダウンロードするのは面倒という方へ。
職場によっては使用が強制されていたり、逆に禁止されていたりする「方眼紙」を作成するGoogle Apps Scriptです。