GASを使ってスプレッドシートの特定の色の文字をカウントする方法

スプレッドシートでセル内の文字数をカウントする方法として、LEN関数を使えば特定のセルや範囲内の文字数を取得できます。
ですが、LEN関数ではセル全体の文字数しか取得できず、特定の色がついた文字だけのカウントはできません。
たとえば、「セル内の赤い文字だけをカウントしたい」といった場合、関数では対応できず手作業となります。
そこで便利なのが Google Apps Script(GAS) です。
GASを使えばセル内の特定の色の文字を判別し、その文字数を自動でカウントできます。
本記事では、GASを活用してスプレッドシートのセル内にある特定の色の文字をカウントする方法をご紹介します。

完成イメージ

- セル内の特定の色の文字だけをカウント(赤色)
- カウントした文字の色と同じ色で右隣のセルに結果を表示
GASの実行手順

カウントしたいデータのあるスプレッドシートを開きます。
今回のスクリプトでは、以下条件で色の付いた文字数をカウントします。
- 対象範囲:選択した範囲
- 文字の色:赤
- 結果の出力先:右隣のセル

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
赤色の文字をカウントするスクリプト
function countColoredText() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveRange(); // ユーザーが選択した範囲を取得
var values = range.getRichTextValues();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 0; i < numRows; i++) {
for (var j = 0; j < numCols; j++) {
var richText = values[i][j];
var text = richText.getText();
var count = 0;
var color = null;
for (var k = 0; k < text.length; k++) {
var charColor = richText.getTextStyle(k, k + 1).getForegroundColor();
if (charColor == "#ff0000") { // 赤色の文字をカウント
count++;
color = charColor; // 赤色を保存(最後に適用)
}
}
var targetCell = range.offset(i, j + 1); // 右隣のセルを取得
targetCell.setValue(count); // カウント結果を出力
if (color) {
targetCell.setFontColor(color); // カウント結果の色を適用
}
}
}
}
スクリプトの説明
このスクリプトは、選択した範囲のセルから特定の色の文字(赤色)だけをカウントし、そのカウント結果を右隣のセルに出力します。
また、カウント結果の数値の色も、カウント対象の文字と同じ色に設定します。
- アクティブなシートを取得
-
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
getActiveSpreadsheet()
で現在のスプレッドシートを取得します。getActiveSheet()
で現在開いているシートを取得します。
- 選択されたセル範囲を取得
-
var range = sheet.getActiveRange(); // ユーザーが選択した範囲を取得
getActiveRange()
を使用し、ユーザーが選択した範囲のみを処理対象にします。
- 選択範囲内のテキスト情報を取得
-
var values = range.getRichTextValues(); var numRows = range.getNumRows(); var numCols = range.getNumColumns();
getRichTextValues()
を使って、各セル内のリッチテキスト情報を取得します。(フォント色・スタイルなどの情報を含む)getNumRows()
とgetNumColumns()
で、選択された範囲の行数・列数を取得します。
- 各セルの文字を解析し、赤色の文字をカウント
-
for (var i = 0; i < numRows; i++) { for (var j = 0; j < numCols; j++) { var richText = values[i][j]; var text = richText.getText(); var count = 0; var color = null;
richText.getText()
でセルのテキストを取得します。count
は赤文字のカウント用変数color
は最後に見つかった赤色の文字のカラーコードを保存します。
- セル内の文字を1文字ずつチェックし、赤文字をカウント
-
for (var k = 0; k < text.length; k++) { var charColor = richText.getTextStyle(k, k + 1).getForegroundColor(); if (charColor == "#ff0000") { // 赤色の文字をカウント count++; color = charColor; // 赤色を保存(最後に適用) } }
getTextStyle(k, k + 1).getForegroundColor()
で文字ごとのフォントカラーを取得します。- 赤色(
#ff0000
)の文字をカウントし、その数をcount
に格納最後に見つかった赤色をcolor
に保存します。(カウント結果のセルの色に使用)
- カウント結果を右隣のセルに出力し、色を適用
-
var targetCell = range.offset(i, j + 1); // 右隣のセルを取得 targetCell.setValue(count); // カウント結果を出力 if (color) { targetCell.setFontColor(color); // カウント結果の色を適用 }
range.offset(i, j + 1)
で右隣のセルの位置を取得します。setValue(count)
でカウント結果をセットします。-
setFontColor(color)
で、カウントされた文字の色と同じ色で結果を表示します。
特定の色を変更する場合
スクリプト内の17行目の部分を変更することで、カウント対象の色を変えられます。
変更する場所:
if (charColor == "#ff0000") { // 赤色の文字をカウント
青色(#0000ff)をカウントする場合:
if (charColor == "#0000ff") { // 青色の文字をカウント
複数の色をカウントしたい場合は、条件を ||
(OR条件)で追加
if (charColor == "#ff0000" || charColor == "#0000ff") { // 赤色 or 青色をカウント
上記のように変更すれば、好きな色の文字数をカウントすることが可能です。

スクリプトを書いたら、好きな名前を付けて保存します。
(例:「色付き文字_カウント」)

選択した範囲の右隣セルにカウント数が表示されます。
Googleスプレッドシートのテキストカラーの主なコード

Googleスプレッドシートで使用される主なテキストカラーのRGBコードは以下の通りです。
これらのコードを使って、GASでカウントする文字の色をカスタマイズできます。
色 | RGBコード |
---|---|
レッドベリー | #980000 |
赤 | #ff0000 |
オレンジ | #ff9900 |
黄(黄色) | #ffff00 |
緑 | #00ff00 |
シアン(水色) | #00ffff |
コーンフラワーブルー | #4a86e8 |
青 | #0000ff |
紫 | #9900ff |
マゼンタ(赤紫) | #ff00ff |
まとめ
関数ではできない「特定の色の文字数カウント」がGASでは可能となります。
今回のスクリプトでは範囲選択したセルが対象となり、複数のセルもまとめて適用できます。
スクリプトを一部変更すれば赤色以外の文字のカウントもできるため、お使いのカラーに合わせてご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント