はじめに
この記事はOfficeスクリプト(Office Scripts)について解説しています。Officeスクリプトの実行環境をまだお持ちでない方は下記の記事で、無料のテスト環境を用意する方法を紹介していますので参考になさってください。企業担当者の方、個人の方でも利用可能です。
Office Scriptsの基本操作は下記の記事で解説しています。
Officeスクリプト(Office Scripts)でExcelのセル色を取得してみた。
officeスクリプトでは、下記のようにセル色を取得できます。
//セル色を取得する。 Sheetオブジェクト.Rangeオブジェクト.getFormat().getFill().getColor();
Officeスクリプト(Office Scripts) でセル色を判別するサンプルコード
下図のシートA1セルとA2セルのそれぞれのセル色をコンソールに出力してみます。
//例 A1セルのセル色を出力する。 function main(workbook: ExcelScript.Workbook) { let st = workbook.getActiveWorksheet(); console.log(st.getRange("a1").getFormat().getFill().getColor()); console.log(st.getRange("a2").getFormat().getFill().getColor()); }
上記のスクリプトを実行すると、
コードエディタ下部の「出力」タブにセル色が出力できました(‘ω’)
セル色はHTML16進数カラーコードで表示される。
出力結果を見るとわかるようにWebで良く見るHTMLカラーコードの文字列として取得します。この例ですと、A2セルは何もセル色が設定されていないためデフォルトのセル色である白のカラーコードである「#FFFFFF」と表示されています。
また、セル色をスクリプトから設定する場合は、名前付きHTML色名(”red”など)も使用可能です。
officeスクリプト(Office Scripts)でセル色を判別サンプルコード2
もう少し汎用性のあるケースを想定して、下図のような表を用意しました。
B列に、何やらセル色で区別してる表です。B列に色がついていたら、その隣のC列に判定結果を出力するスクリプトを作成しました。※人名はテストデータです。実在しません。
function main(workbook: ExcelScript.Workbook) { let st = workbook.getActiveWorksheet(); let lastRowNum = st.getUsedRange().getLastRow().getRowIndex(); let baseColor = "#FFFFFF"; //比較する色コード(白) let color: string ; //各セルの色コード一時保管用 //B列を上から下にループする。 for (let i = 0; i <= lastRowNum; i++) { //現在のセルのセル色を一時的に変数に入れる。 color = st.getCell(i, 1).getFormat().getFill().getColor(); //セル色が白かどうか比較する。 if ( color != baseColor) { st.getCell(i, 2).setValue(color); } } }
officeスクリプト(Office Scripts)でセル色を設定する方法
officeスクリプトでは、下記のようにセル色を設定・変更できます。
//セル色を取得する Sheetオブジェクト.Rangeオブジェクト.getFormat().getFill().setColor("red");
テーブル化している場合はセル色を正しく取得できない。
セル色を判別する場合、テーブル化している場合には注意が必要です。テーブルに含まれるセルはただしくセル色を取得できないからです。ためしに先程の表をテーブル化してみます。
▲テーブル化しました。テーブルスタイルはデフォルトの青系のデザインです。
▲この表で先程のスクリプトを実行してみます。
図ではわかりにくいですが、テーブルスタイルで水色になっているセルが色なし(白)と判定されています。テーブルスタイルで色はセル色として判定されません。このためセル色を判別するようなスクリプトを使う場合にはテーブルスタイルはセル色なしのものを使ったほうがいいかもしれませんね。
まとめ
- セル色は.getColor();で取得する。
- セル色は.setColor(“color”);で設定する。
- セル色はHTML16進数カラーコードかHTMLカラー名で文字列で取得する。
- テーブルスタイルで設定されたセル色は正しく取得できない。
以上、Officeスクリプトを使ってセル色を判別するプログラムを作成してみた、でした。
OfficeスクリプトはPower Automateから呼び出して真の実力を発揮するにゃ。Power Automateと連携を解説した下記の記事もよければよんでにゃー。
Office Scriptsを学ぶ方法
Office ScriptによるExcel on the web 開発入門
Office Scriptを体系的に学ぶにはこちらの書籍の購入をおススメします。現時点ではAmazonで購入できる唯一の日本語で書かれたOfficeスクリプト(Office Script)の書籍です。(2021年11月05日時点)そもそもOffice Scriptを解説している日本語のWebサイトやYouTubeは多くありませんので貴重な解説書です。
Office Scriptのベース言語であるTypeScriptの解説から始まるのでプログラム経験のない方でもこの1冊でOffice Scriptを始めることができるかと思います。セルやシートの操作方法はもちろん、Office Scriptの一番のメリットであるPower Automateとの連携の方法(変数の受け渡し等)も解説されていて一通り網羅されているかと思います。Kindleで読んでも文字サイズやレイアウトがキレイで読みやすいのもありがたかったです。
Office scriptsを習得すればExcelデータが多い会社や組織では自動化の可能性が広がります。Excel VBAではできなかったクラウド連携やトリガー起動による自動化をぜひ体感してください。