[スプレッドシート]セルの書式設定は2次元配列の版画で

GAS

どうも。つじけ(tsujikenzo)です。今日は「スプレッドシートのセルの書式設定は2次元配列の版画で」というお話をします。

「スプレッドシート」や「セルの書式設定」というのはよく聞きますが、「版画」というのは初めてかもしれません。とは言っても難しい話ではありません。効率よくセルの書式設定をしようという試みで、GAS中級程度の方が対象の記事です。

条件付き書式

皆さんもExcelで経験あると思いますが、スプレッドシートにも「条件付き書式」機能があります。条件付き書式のシート上の設定などについては割愛させていただきますが、GASではどのような扱いなのか少し説明させていただきます。

ConditionalFormatRule(条件付き書式)Builderクラス

まず、本文が読みやすくなるようにConditionalFormatRuleという単語を「条件付き書式」に変換して書きますことをご了承ください。

GASで「条件付き書式」を表す条件付き書式BuilderクラスはSpreadsheetサービスに所属しています。SpreadsheetAPPクラスのメンバーには.new条件付き書式()メソッドが用意されており、戻り値として条件付き書式Builderオブジェクトを生成することができます。

Class ConditionalFormatRuleBuilder  |  Apps Script  |  Google for Developers

また、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の一覧はこちらで確認できます。

How to get the Hexadecimal codes of colors in Google Sheets
Learn how to write a custom function to get the HTML color code (also known as a Hex code) of a cell's background color.

条件付き書式は使わない

と、ここまで条件付き書式の紹介をしてきましたが、私は「条件付き書式」が好きではありません💦「シートが重たくなる」というのが最大の理由ですが、GASが書けるようになってからはセルに式を挿入したり、条件付き書式を設定したり、一切やらなくなりました。

後半はGASでセルの書式設定をする方法についてご説明します。

セルの書式設定は『版画』で

セルの書式設定に関するメンバーはSpreadsheetサービスのRangeクラスに用意されています。

Class Range  |  Apps Script  |  Google for Developers

主なメンバーはこちらです。(他にも数多くのメンバーが用意されています)

メンバー説明引数
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でやっていた葛飾北斎の特集から着想を得ました。

北斎の名作への8ステップ! GIFアニメで見る「神奈川沖浪裏」のつくり方|【北斎今昔】もっと知りたい、浮世絵の「今」と「むかし」
江戸時代後期の浮世絵師・葛飾北斎の代表作「富嶽三十六景」の一図「神奈川沖浪裏」。「The Great Wave」の名で世界的に知られる名画ですが、この作品が木版画であることは意外と認識されていません。この作品は、当時人気を博して、何千枚と制作され、販売されたと考えられています。では、北斎が木を彫ったり、和紙に何千枚も摺...
タイトルとURLをコピーしました