当日の日付が記載されてある列の背景色を変更したい

1,556 views
Skip to first unread message

suisuisui

unread,
Mar 26, 2013, 4:32:38 AM3/26/13
to google-app...@googlegroups.com
Spreadsheetで書式設定で出来ないようなのでGoogle Apps Scriptでどのようにすればいいのか教えて頂けませんか?
A列に日付が並んでいます。
OnOpenになるかと思うのですが、開いたときに、当日の日付が入っている行全ての背景色を指定の色(黄色など)に変えたいと思っています。
参考になるページなどでもあれば教えて頂けませんでしょうか?

Ohashi, Keisuke

unread,
Mar 26, 2013, 4:45:14 AM3/26/13
to google-app...@googlegroups.com

大橋です。

GASなしの条件付き書式でできますよ。

A列で右クリックして、
条件付き書式を選択、
一番左を日付にしてその右を本日にすればできた記憶です。

あとは一番右の背景を好きなものにすればできるはずです。

ただし、A列に入っているものが日付型である必要があります。

やりたい事と違ってたらすいません。

Ohashi, Keisuke

unread,
Mar 26, 2013, 4:49:57 AM3/26/13
to google-app...@googlegroups.com

大橋です。
すいません、、、
行全てですね、、、

間違えました、、

行全てだとGAS必要ですね

ちょい考えます。

Takashi Yokoyama

unread,
Mar 26, 2013, 5:13:53 AM3/26/13
to google-app...@googlegroups.com
横山@GDG中国です。

せっかくなので作ってみました。
(アルゴリズムは「力づく」系なので、件数が多いと速度は遅くなるかもしれないです)

以下のような感じでいかがでしょうか。
(もう少し良いのがあったら補足をお願いします)

function onOpen() {
var START_ROW = 2;
var DATE_FORMAT = 'yyyy/MM/dd';
var timezone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var range = sheet.getRange(2, 1, sheet.getLastRow());

var check = range.getValues();
var today = new Date();
for(var i = 0 ; i < check.length; i++) {
Logger.log(check[i][0]);
var todayString = Utilities.formatDate(today, timezone, DATE_FORMAT);
var checkString = Utilities.formatDate(new Date(check[i][0]),
timezone, DATE_FORMAT);

if(todayString == checkString) {
// 色の指定は'#0000FF'みたいなものもOK
sheet.getRange(START_ROW + i, 1, 1,
sheet.getLastColumn()).setBackgroundColor('blue');
}
}
}


2013年3月26日 17:49 Ohashi, Keisuke <k-oh...@bfts.co.jp>:
> --
> このメールは Google グループのグループ「Google Apps API Japan」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、google-apps-api-...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、google-app...@googlegroups.com にメールを送信してください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
>



--
Takashi Yokoyama
GDG Chugoku Manager

tksyo...@gmail.com
http://sites.google.com/site/gdgchugokuofficial/
G+: http://goo.gl/VV3eJ
twitter: @GDGChugoku

soundTricker

unread,
Mar 26, 2013, 5:14:30 AM3/26/13
to google-app...@googlegroups.com
以下のコードでどうでしょうか?

function onOpen() {
 
 
//値の開始行
 
var valueStartRow = 0;
 
 
//日付が入っているカラムのRange
 
var dateColumnR1C1 = "A:A";
 
 
//つける色
 
var color = "yellow"
 
 
//対象のシート名
 
var targetSheetName = "Sheet1";
 
 
//行の色を初期化(他に背景色がある場合は変更したほうがいいかもしれません。)
 
SpreadsheetApp.getActive().getSheetByName(targetSheetName).getDataRange().setBackground(null);
 
 
var timezone = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
 
var sheet = SpreadsheetApp.getActive().getSheetByName(targetSheetName);
 
var dateValues = sheet.getRange(dateColumnR1C1).getValues();
 
 
var today = Utilities.formatDate(new Date(), timezone, "yyyyMMdd");
 
 
//一行づつ見ていって色付け ただしあまりにもデータ数が多いと遅くなるので、考えたほうがいいかも。
 
for(var row = valueStartRow;row < dateValues.length;row++) {
   
var date = dateValues[row][0];
   
   
if(!date){
     
continue;
   
}
   
   
if(Utilities.formatDate(date, timezone, "yyyyMMdd") == today) {
      sheet
.getRange(row + 1 , 1 , 1 , sheet.getLastColumn()).setBackgroundColor(color);
   
}
 
}
}



 

黒田栄一

unread,
Mar 26, 2013, 8:53:36 AM3/26/13
to google-app...@googlegroups.com
とりあえず表示されました。
ありがとうございます。
とりあえずというのは失礼なんですが、よくよく考えると土曜日は薄い青色、日曜日は薄いピンクにしています。
この場合、土曜日に開いて色が変わって日曜日再度開き直すと、当然昨日の土曜日は薄い青色ではなくなってしまいますか?



2013年3月26日 18:14 soundTricker <k-oh...@bfts.co.jp>:


 

--
このメールは Google グループのグループ「Google Apps API Japan」の登録者に送られています。
このトピックの登録を解除するには、https://groups.google.com/d/topic/google-apps-api-japan/qqgm9K0GRaU/unsubscribe?hl=ja にアクセスします。このグループから退会し、グループのすべてのトピックの登録を解除するには、google-apps-api-...@googlegroups.com にメールを送信します。

Ohashi, Keisuke

unread,
Mar 26, 2013, 9:31:01 AM3/26/13
to google-app...@googlegroups.com

今の奴だと多分そうですね。
※試して無いので、確実じゃないです。

その場合はそのロジックも追加する必要があります。

2013/03/26 21:53 "黒田栄一" <surf.dri...@gmail.com>:
このグループから退会し、メールの受信を停止するには、google-apps-api-...@googlegroups.com にメールを送信します。

Ohashi, Keisuke

unread,
Mar 26, 2013, 9:35:01 AM3/26/13
to google-app...@googlegroups.com

P.S.
あとは、罫線で色つけるとかも当日を目立たせるという意味ではありかもですね

黒田栄一

unread,
Mar 27, 2013, 4:58:03 AM3/27/13
to google-app...@googlegroups.com
罫線での色つけが一番よさそうです。
やってみます。

Masayo Nakajima

unread,
Apr 2, 2013, 11:25:00 PM4/2/13
to google-app...@googlegroups.com
こんにちは
nakajima masayoと言います
黒田栄一さんの
>土曜日は薄い青色、日曜日は薄いピンクにしています。
というのを読んで、「日付と曜日は一ヶ月分(一年分?)入っていてその中のどこが今日なのか分かりやすくしたいということかな~」と思いました。
もしそうならOnOpenではなくTime-Driven Triggerを使って夜の12時を回った時に一回実行すれば開いた時に待たされることはないのでは?
勘違いだったらすみません。



2013年3月27日 17:58 黒田栄一 <surf.dri...@gmail.com>:
罫線での色つけが一番よさそうです。
やってみます。

--
このメールは Google グループのグループ「Google Apps API Japan」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、google-apps-api-...@googlegroups.com にメールを送信します。
Message has been deleted

Masayo Nakajima

unread,
Feb 11, 2014, 8:05:12 AM2/11/14
to google-app...@googlegroups.com
こんにちは
var nextString = Utilities.formatDate(nexttoday, timezone, DATE_FORMAT); ← ここでエラーになりました。
これは
var nexttoday = new Date()+1;
var nexttoday = new Date();
nexttoday.setDate(nexttoday.getDate() + 1);
にすればいいのではと思います。
通して実行していないので違っていたらすみません。





2014-02-10 17:00 GMT+09:00 きんきゅうそくはい <yam...@hakobu.com>:
とても便利です!やりたかったので助かります。

これに翌日も色をつける、マネして作ってみようとすると エラーになりました。

function setTodayColor() {
 var START_ROW = 2; 
  var DATE_FORMAT = 'yyyy/MM/dd';
  var timezone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(); 
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 

  var range = sheet.getRange(2, 2, sheet.getLastRow()); 

  var check = range.getValues(); 
  var today = new Date(); 
  var nexttoday = new Date()+1;
  for(var i = 0 ; i < check.length; i++) { 
    Logger.log(check[i][0]); 
    var todayString = Utilities.formatDate(today, timezone, DATE_FORMAT); 
    var nextString = Utilities.formatDate(nexttoday, timezone, DATE_FORMAT); ← ここでエラーになりました。 
    var checkString = Utilities.formatDate(new Date(check[i][0]), 
timezone, DATE_FORMAT); 

    if(todayString == checkString) { 
      // 色の指定は'#0000FF'みたいなものもOK 
      sheet.getRange(START_ROW + i, 1, 1, 
                     sheet.getLastColumn()).setBackgroundColor('#FFFF99'); }
      if(nextString == checkString) { 
      // 色の指定は'#0000FF'みたいなものもOK 
      sheet.getRange(START_ROW + i, 1, 1, 
sheet.getLastColumn()).setBackgroundColor('#99FFCC'); 
    } 
  } 


教えていただけるとありがたいです。 でも、とりあえず今日移行は色で対応しています。
Reply all
Reply to author
Forward
0 new messages