2つの列を指定し、すべての組み合わせを出力してくれるGoogle Apps Scriptです。列はプロンプトで指定するので繰り返せば何列でも組み合わせることができます。
特にありません。今お使いのスプレッドシートに組み込めます。
サンプルは「何年何組何番」の全通りを出力したいという設定です。
組み合わせたいデータは1列ずつ格納しておきます。
さっそくスクリプトを実行してみます。
上のメニューにある「スクリプト実行」から「指定した2つの列の全組み合わせを生成する」を実行します。
プロンプトが表示されますので、組み合わせたい列の1つ目を指定します。
列名をアルファベットで入力してください。
続いて組み合わせたいもう1つの列も同じように入力します。
少し待つと使われていない列に結果が書き込まれます。
データが多いと少し時間がかかるかもしれません。
今回のサンプルでは、ABCの3列を組み合わせる必要がありました。
D列にAとBの組み合わせが書き込まれているので、今度はD列とC列でスクリプトを実行すれば3つの列の全通りの組み合わせが完成します。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00157/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('指定した2つの列の全組み合わせを生成する', 'concat_and_combination');
// メニューを画面に追加する
menu.addToUi();
}
function concat_and_combination() {
// 開いているスプレッドシートオブジェクトを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// アクティブなシートを取得
const sheet = ss.getActiveSheet();
// プロンプトを表示するためのUIオブジェクトを取得
const ui = SpreadsheetApp.getUi();
// プロンプトを表示し、何列目を結合するか指定する(1個目)
const response1 = ui.prompt('組み合わせる列(1個目)を入力してください', '例:A', ui.ButtonSet.OK_CANCEL);
// キャンセルボタンが押されたときは何もせず終了する
if (response1.getSelectedButton() == ui.Button.CANCEL) {
return;
}
// プロンプトを表示し、何列目を結合するか指定する(2個目)
const response2 = ui.prompt('組み合わせる列(2個目)を入力してください', '例:B', ui.ButtonSet.OK_CANCEL);
// キャンセルボタンが押されたときは何もせず終了する
if (response2.getSelectedButton() == ui.Button.CANCEL) {
return;
}
// 入力された文字(列)を取得する
const col1 = response1.getResponseText();
const col2 = response2.getResponseText();
// 入力された列全体の値を取得する
const vals1 = ss.getRange(col1 + ':' + col1).getValues();
const vals2 = ss.getRange(col2 + ':' + col2).getValues();
// 組み合わせを格納するための変数を定義
const result = [];
// 1つ目に指定された列でループ
for (let i = 0; i < vals1.length; i++) {
if (vals1[i][0]) { // 空白セルは飛ばす
// 2つ目に指定された列でループ
for (let j = 0; j < vals2.length; j++) {
if (vals2[j][0]) { // 空白セルは飛ばす
// それぞれの列の値を結合する
let concat_val = vals1[i][0] + vals2[j][0];
// 結果用の配列に追加する
result.push([concat_val]);
}
}
}
}
// 最終列の1つとなりに書き込むため、今使われている最後の列を取得する
let last_col = sheet.getLastColumn();
// 書き込み先範囲の定義
let range = sheet.getRange(1, last_col + 1, result.length, 1);
// 結果を書き込む
range.setValues(result);
}
選択した2つのセル(範囲)の値を、入れ替えるGoogle Apps Scriptです。行や列の入れ替えもできます。
選択した行範囲の順番を逆にするGoogle Apps Scriptです。ソートではなく、単純に順番を逆にします。関数の組み合わせでも実現できますが、GASを登録してしまったほうが早いかもしれません。
選択した列範囲の順番を逆にするGoogle Apps Scriptです。行バージョンを作ったので、列バージョンも。ニーズはあるのでしょうか。
1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。行方向に分割します。
1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。列方向に分割します。
選択範囲に存在する結合されたセルを検索し、解除することもできるGoogle Apps Scriptです。予想外の結合によって困ったことがある方は多いと思います。このアプリが転ばぬ先の杖になれば幸いです。結合を解除するかどうかはダイアログで選択できます。
検索キーワードを全シートから探して、ヒットしたセル番地をまとめて表示するGoogle Apps Scriptです。標準の検索機能ではヒットしたセルが1個ずつ分かりますが、まとめて知りたくなったので作成しました。
選択範囲に改行が含まれているセルを検索し、削除することもできるGoogle Apps Scriptです。想定外の改行によって困ることが稀によくありますので作ってみました。改行を削除するかどうかはダイアログで選択できます。
シート内の「何も書き込まれていない行」を削除してくれるGoogle Apps Scriptです。スプレッドシートをメモ帳代わりにしていると、特に意味のない空白行がたくさんあったりして、消すのが面倒だったので作成してみました。すべての列に何も文字が入っていない行を消し去ります。
1行ごとに任意の空白行を挿入してくれるGoogle Apps Scriptです。データを整理中に「今ある行の間に1行ずつ足したい・・・」ということが稀によくあるので作成しました。追加する行数はプロンプトで指定が可能です。
全てのシートの行固定、列固定を解除するGoogle Apps Scriptです。ニーズはあんまりなさそうですが、思いつきで作ってみました。