質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

329閲覧

年間の日にちをA列に表示

dell_0

総合スコア25

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/01/21 07:20

現在はA1に2021/01/01と入力し、セルをクリックして下に引っ張る手作業で作成しているのですが、GASを使い自動で年間の日にちを表示することは可能でしょうか?

カレンダーというテンプレートのスプレッドシートを作り、それを参照し、各個人のカレンダー表に反映させたいと思っております。

宜しくお願い致します。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroshi0240

2021/01/21 09:00

できるかどうかだけを知りたいのですか?(であれば出来ますで回答は終了です。) やり方を知りたいのであれば、貴殿のコード理解レベルによってどこまで回答するのか変わりますので、ご自身で書けるレベルのコーディングで、何がわかってなくて聞きたいことは何なのかを書いてください。
dell_0

2021/01/21 09:57

ご回答、ありがとうございます。 コードを知りたく、質問いたしました。説明不足で大変申し訳ございません。 GASの勉強をしているのですが、お恥ずかしいのですが、全くのゼロから構築することができておりません。 皆様のご回答いただいたコードを読み、理解する程度のレベルです。 祝日を取得するようなコードはネットにあり、自分でも動かし、少し手直しはできるのですが、縦一列に日にちを1年分自動記入となると、自分ではわかり得なかったため、質問させていただきました。 今後は、質問内容を明確に記載するように致します。 ご指摘、ありがとうございました。
sawa

2021/01/21 12:42

自動で年間の日にちを表示したいだけなら、それこそ関数で出来ますし回答いれますけど、GASの勉強として実現したいってことなら、出来る範囲でコードを書いてみたほうがいいです。 まずは A1セルに 指定した年の 1月1日を 入れるコードだけでも質問文に載せてみてはいかがでしょうか。
dell_0

2021/01/22 01:18

ご回答、ありがとうございます。 関数でも可能との事、ありがとうございます。 一度調べ直し、コードを記載してから、再度質問させていただきます。 ありがとうございました。
dell_0

2021/01/22 03:50

sawa様 ARRAYFORMULA関数で簡単に表示することができました。 GASでの方法を考えていて、そこばかりを調べていたので、関数という方法が頭にありませんでした。 助言いただき、誠にありがとうございました。
sawa

2021/01/22 11:49

解決したようでなにより。時間がある時に、是非GASでの記述もチャレンジしてみてください。
guest

回答2

0

以前、ネット上の記事に紹介されていたものにほんの少しだけ手を加えたものです。
本当はその記事を紹介すべきでしょうが、出典を忘れてしまいました。
(日本語プログラミング言語「なでしこ」で高名な、
くじら飛行机さんの連載だった気がします。)

Google

1 2// 年間カレンダーを作成する 祝日も自動的に取得する 3 4function makeYearCalendar() { 5 6 var T_YEAR = 2021; // 年度を指定 7 var T_MONTH = 4; // 4月はじまりのカレンダーにする 8 9 10 // 曜日と色を指定 11 var WEEK_NAMES = ["日","月","火","水","木","金","土"]; 12 var WEEK_BACKCOLORS = ["#ffc0c0","","","","","","#bbfaff"];//曜日ごとの背景色の指定 日曜日をピンク 土曜日を水色に、それ以外は無色 13 14 //下線を何列引くか指定 15 var cols=10 16 17 18 var sheet = SpreadsheetApp.getActiveSheet(); //グーグルSpreadsheetアプリの現在アクティブなシートに作る 19 20 // いつからいつまでのカレンダーを作るか 21 var d_start = new Date(T_YEAR, T_MONTH - 1, 1); 22 var d_end = new Date(T_YEAR + 1, T_MONTH - 2, 31, 23, 59, 59);//1年後の1日前の日付になるようにしている 23 24 // 日本の祝日カレンダーから祝日を取得 25 var holidays = {};//取得した祝日の一覧を収納するための配列を準備 26 var cal = CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com"); 27 var events = cal.getEvents(d_start, d_end);//カレンダー作成期間中の祝日などを取得 28 for (var i in events) { 29 var e_title = events[i].getTitle(); 30 var e_start = events[i].getStartTime(); 31 var e_m = e_start.getMonth() + 1; 32 var e_d = e_start.getDate(); 33 holidays[e_m + "/" + e_d] = e_title;//何月何日が何という祝日かという配列の形で保存 34 } 35 36 // 一覧表を配列として作る 37 var result = [], colors = [];//処理の結果を格納する2つの配列を準備する 38 var row = 2;//下線を引くために、行を示す変数を指定、1行目はタイトル行なので初期値は2 39 var t = new Date(d_start.getTime());//開始日から始まる日付変数 以下でwhile式を使って終了日まで繰り返す 40 41 while (t.getTime() < d_end.getTime()) {//指定した最終日になるまで処理を繰り返す 42 var y = t.getFullYear();//作成後にフィルター機能を使いやすいよう、以下で年月日を分けることにする。この行は年を取得 43 var m = t.getMonth() + 1; 44 var d = t.getDate(); 45 var w = t.getDay();//曜日を示す0~6までの数値を取得(0が日曜日・1が月曜日……6が土曜日) 46 var wn = WEEK_NAMES[w];//曜日を示す0~6までの数字を配列WEEK_NAMESで指定した日~土の一文字の漢字に変換する 47 var c = WEEK_BACKCOLORS[w]; // 背景色の指定 曜日を示す0~6までの数字を配列WEEK_BACKCOLORSで指定した曜日ごとの色にする この時点ではどの色か決めているだけ 48 // var wnum = Math.ceil((((t-d_start)/86400000))/7);//第何週か 49 50 // 月曜日なら罫線を引く 51 if (w == 1) { 52 sheet.getRange(row, 1, 1, cols).setBorder(true, null, null, null, null, null); 53 } 54 55 //祝日判定 取得した祝日の一覧にその日がないなら空欄にし、その日が祝日なら黄色に指定 56 var ev = holidays[m + "/" + d]; 57 if (typeof(ev) == "undefined") { 58 ev = ""; 59 } else { 60 c = "yellow"; 61 } 62    63 // カレンダー本体の情報(年月日、曜日、祝日)を格納する 64 result.push([y,m,d,wn,"","","","","",ev]);//""の部分は午前・午後・晩などの部分 65 66 // 色の配列に曜日指定、祝日判定で指定でした色を格納する resultに合わせて 列分を指定する 67 colors.push([c,c,c,c,c,c,c,c,c,c]); 68 69 // 一日進める 70 t.setTime(t.getTime() + 1000 * 60 * 60 * 24); 71 row++; 72 } 73 74 // 表に設定する 75 sheet.getRange(1,1,1,cols).setValues([["年","月","日","曜","AM","AM","PM","PM","晩","祝日"]]);//タイトル行 76 sheet.getRange(1,1,1,cols).setBorder(true, null, true, null, null, null);//タイトル行の上と下に罫線を引く 77 sheet.getRange(2, 1, result.length, cols).setValues(result);//カレンダー本体の情報を設定 78 sheet.getRange(2,1, colors.length,cols).setBackgrounds(colors);// 色の配列に従って背景色を指定 79}

投稿2021/01/27 06:46

SnowMonkey

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

ARRAYFORMULAで解決いたしました。

ご回答いただいた皆様、誠にありがとうございました。

投稿2021/01/22 03:51

dell_0

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問