どうも。つじけ(tsujikenzo)です。今日は「スプレッドシートのセルの書式設定は2次元配列の版画で」というお話をします。
「スプレッドシート」や「セルの書式設定」というのはよく聞きますが、「版画」というのは初めてかもしれません。とは言っても難しい話ではありません。効率よくセルの書式設定をしようという試みで、GAS中級程度の方が対象の記事です。
条件付き書式
皆さんもExcelで経験あると思いますが、スプレッドシートにも「条件付き書式」機能があります。条件付き書式のシート上の設定などについては割愛させていただきますが、GASではどのような扱いなのか少し説明させていただきます。
ConditionalFormatRule(条件付き書式)Builderクラス
まず、本文が読みやすくなるようにConditionalFormatRuleという単語を「条件付き書式」に変換して書きますことをご了承ください。
GASで「条件付き書式」を表す条件付き書式BuilderクラスはSpreadsheetサービスに所属しています。SpreadsheetAPPクラスのメンバーには.new条件付き書式()メソッドが用意されており、戻り値として条件付き書式Builderオブジェクトを生成することができます。
また、Sheetクラスの.get条件付き書式()メソッドではシートが保持している条件付き書式オブジェクト(条件付き書式の設定が保持されています)を取得することができます。
条件付き書式Builderクラスのメンバー
条件付き書式Builderクラスには条件付き書式を定義するメンバーが用意されており、そのほとんどのメンバーの戻り値は条件付き書式Builderオブジェクトであるため、以下のような数珠つなぎで記述することができます。
条件付き書式Builderオブジェクト
.メンバー
.メンバー
.メンバー;
主なメンバーはこちらです。(他にも数多くのメンバーが用意されています)
メンバー | 説明 | 引数 |
setBackground() | 背景色を変更する | color |
setBold() | 太字にする | Boolean |
setFontColor() | 文字色を変更する | color |
whenTextEqualTo() | 文字列が引数と同じ時 | text |
whenNumberLessThan() | 数値が引数以下の時 | number |
setRanges() | この条件付き書式が適応されるセル範囲 | Range |
build() | この条件付き書式を構築する |
colorの指定はHex Code
色は「文字列」「Hex Code」「数値」の3種類で指定することができますが、黒なら「’#000000’」やライトブルーなら「’#cfe2f3’」など、Hex Codeと呼ばれる#6桁で色を指定する方が、業務の効率を上げると私は考えます。特別な理由がない限りHex Codeでいきましょう。
スプレッドシート上で指定できるcolorの一覧はこちらで確認できます。
条件付き書式は使わない
と、ここまで条件付き書式の紹介をしてきましたが、私は「条件付き書式」が好きではありません💦「シートが重たくなる」というのが最大の理由ですが、GASが書けるようになってからはセルに式を挿入したり、条件付き書式を設定したり、一切やらなくなりました。
後半はGASでセルの書式設定をする方法についてご説明します。
セルの書式設定は『版画』で
セルの書式設定に関するメンバーはSpreadsheetサービスのRangeクラスに用意されています。
主なメンバーはこちらです。(他にも数多くのメンバーが用意されています)
メンバー | 説明 | 引数 |
setBackground() | 背景色を変更する | color(Hex code) |
setBackgrounds() | 複数セルの背景色を変更する | colors |
setBorder() | 罫線を設定する | top, left, bottom, right, vertical, horizontal(Boolean, null) |
setFontColor() | 文字色を変更する | color(Hex code) |
setFontColors() | 複数セルの文字色を変更する | colors |
setFontWeight() | 太字を設定する | fontWeight(bold, normal, null) |
setFontWeights() | この条件付き書式を構築する | fontWeights |
メンバーの呼び出し方は以下の通りです。
Rangeオブジェクト.メンバー
複数セルの書式設定をするメンバー
勘のいい方はお気付きかもしれませんが、メンバーの中に.set○○s()という複数形のメソッドがあります。
複数セルの書式設定を行うメンバーの呼び出し方は以下の通りです。
Rangeオブジェクト(2次元配列).メンバー(引数に指定する値を要素に持つ2次元配列)
メソッドの引数には、引数に指定する値を要素に持つ2次元配列を指定する必要があり、その2次元配列は貼り付け先のRangeオブジェクト(2次元配列)と同じ長さである必要があります。
const range = SpreadsheetApp.getActiveSheet().getRange('A1:C3');
const colors = [['#000000','#000000','#000000'],['#808080','#808080','#808080'],['#000000','#000000','#000000']];
range.setBackgrounds(colors);
版画の版のように
引数の値を要素としてもつ2次元配列を、1つのメソッドに付き1つずつ用意してセルの書式設定を行うことは、版画の版のようではありませんか?
- メソッド・・・版
- 引数・・・・・版の色
GASで実行する
実際にコードを書いて実行してみましょう。コンテナバインドで書きます。
function myFunction(){
const sheet = SpreadsheetApp.getActiveSheet();
let range = sheet.getRange('A1:C4');
//罫線の設定
const [top, left, bottom, right, vertical, horizontal] = [true, true, true, true, false, true];
range.setBorder(top, left, bottom, right, vertical, horizontal);
//背景色の設定
let colors = [['#cfe2f3','#cfe2f3','#cfe2f3'],['#c9daf8','#c9daf8','#c9daf8'],['#cfe2f3','#cfe2f3','#cfe2f3'],['#c9daf8','#c9daf8','#c9daf8']];
range.setBackgrounds(colors);
//太字の設定
colors = [['bold','bold','bold'],['normal','normal','normal'],['normal','normal','normal'],['normal','normal','normal']];
range.setFontWeights(colors);
//文字色の設定
range = sheet.getRange('A1:C1');
colors = [['#ff0000','#ff0000','#ff0000']];
range.setFontColors(colors);
}
このような書式設定ができました。
まとめ
以上で、「スプレッドシートの書式設定」について、スプレッドシートの条件付き書式を操作するクラス群の確認と、後半は条件付き書式のメソッドと2次元配列を使って、版画の版のようにセルの書式設定を行う方法をご紹介しました。
今回はRangeオブジェクトの取得やメソッドの引数はほぼリテラルに書きましたが、2次元配列の生成を配列のメソッド群と掛け合わせるともっと便利な使い方ができそうですね。いつか記事を書いてみたいです。
【追伸】この記事はTVでやっていた葛飾北斎の特集から着想を得ました。