スプレッドシートにて、睡眠記録表を作ろうと思いました。
D列からCU列までが時間(1セル15分)で、睡眠時間をオレンジ色で塗りつぶしていきます。
そして、その日の睡眠時間の合計を算出するために、
オレンジ色で塗られたセルの個数を数えてくれるスクリプトを書きました。
というか、ネットからお借りしたものをいじりました。
それがこちら。
javaScript
1function zenbu() { 2 countCellsWithBackgroundColor(); 3 getBackgroundColor(); 4} 5 6// 指定セルの背景色を取得します。 7function getBackgroundColor(rangeSpecification) { 8 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 9 return sheet.getRange(rangeSpecification).getBackgroundColor(); 10} 11 12// 指定範囲のセル背景色に合致するセルの合計数を返します 13// color: 背景色 rangeSpecification: 範囲指定文字列 14function countCellsWithBackgroundColor(color, rangeSpecification) { 15 16 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 17 var range = sheet.getRange(rangeSpecification); 18 19 var x = 0; 20 var i = 0; 21 var j = 0; 22 var cell; 23 for (i = 1; i <= range.getNumRows(); i++) { 24 for (j = 1; j <= range.getNumColumns(); j++) { 25 26 cell = range.getCell(i, j); 27 28 if(cell.getBackgroundColor() == color) 29 x++; 30 } 31 } 32 33 return x; 34}
これをスクリプトエディタに仕込んでおいて、
その日の睡眠時間を書き込むセルCV5に、
「=countCellsWithBackgroundColor(getBackgroundColor("A36"), "D5:CU5")*15/60」
と入力することによって、
範囲内のオレンジ色のセルの個数を数えて、
その個数に15分をかけて60分で割って時間表記にするところまではできました。
あとはオートフィルだ、と思って、下方向にオートフィルしたところ、
ただのコピーになってしまいました。
これは、「"D5:CU5"」の部分がダブルクォーテーションで囲われているからいけないんだと思い、
ダブルクォーテーションを外してオートフィルしたところ、
たしかに希望通りのセル番号が入力されたのですが、計算結果的にはエラー表示になります。
なので、オートフィルのあと、セル番号をダブルクォーテーションで再び囲うように
置換してみようとしましたが、うまくいきません。
やったこととしては、まずは前のダブルクォーテーションを付けてみようと思い、
「検索と置換」で、検索に「D*」、置換後の文字列に「”D*」と書いて、
条件は「正規表現を使用した検索」「数式内も検索」にチェックして、置換してみました。
しかし、「一致するものはありません」という結果になりました。
いろいろと書きましたが、
「=countCellsWithBackgroundColor(getBackgroundColor("A36"), "D5:CU5")*15/60」
という式を簡単にオートフィルする方法はありませんでしょうか、ということです。
よろしくお願いします。
###追記(2018/03/25 6:29)
方針を変えたので、こちらの質問については回答はいらないかな、という状況です。
とりあえず、置き手紙的な感じで書いておきます。
そういうときは「解決済」にしておいたほうがよいのでしょうか…。
解決済みにしました。(2018/04/05 10:56)
上の追記部分にある理由で、解決済みに変更しました。
なんか、質問一覧のページに回答受付中のものがずっとあるのが気になりました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。