質問編集履歴

4

記載しているコードを追記しました。

2022/06/22 07:52

投稿

hachi.
hachi.

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,3 @@
1
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-06-17/2fd5a08d-1d8f-4c3d-85e9-a841f3695dfc.png)
2
-
3
1
  Googleスプレッドシートにて
4
2
  このようなカレンダーを製作しました。
5
3
  左上のプルダウン部分(年・月)を変更すると
@@ -24,3 +22,82 @@
24
22
  なるかとおもうのですが、
25
23
  以上の数を出す関数を作ることは可能でしょうか?
26
24
  合計を出し、新しく合計を集計する欄を作りたいです。
25
+
26
+ 現在GASに記載しているコードは以下になります。
27
+
28
+ ```
29
+ function holiday_Function() {
30
+ //年のセルの位置
31
+ const cell_year_row_No = 1;
32
+ const cell_year_column_No = 1;
33
+ //月のセルの位置
34
+ const cell_maonth_row_No = 1;
35
+ const cell_maonth_column_No = 3;
36
+ //アクティブなシートを取得
37
+ let active_sheet = SpreadsheetApp.getActiveSheet();
38
+ //アクティブなセルを取得
39
+ const activecell = active_sheet.getActiveCell();
40
+ //年もしくは月のセルが更新されたのを確認
41
+ let active_value = true;
42
+ if(activecell.getColumn() == cell_year_column_No && activecell.getRow() == cell_year_row_No){
43
+ active_value = true;
44
+ }else if(activecell.getColumn() == cell_maonth_column_No && activecell.getRow() == cell_maonth_row_No){
45
+ active_value = true;
46
+ }else{
47
+ active_value = false;
48
+ }
49
+  //年もしくは月のセルが更新されていたら実行
50
+ if(active_value == true){
51
+ //Googleカレンダーの祝日情報のID
52
+ const calendar_jpn_holiday_Id = "ja.japanese#holiday@group.v.calendar.google.com";
53
+ //Googleカレンダーの祝日情報を取得
54
+ const calendar_jpn_holiday_Data = CalendarApp.getCalendarById(calendar_jpn_holiday_Id);
55
+ //月の値(何月)を取得
56
+ let cellValue_manth = active_sheet.getRange(1, 3).getValue();
57
+ //祝日情報を格納する連想配列(日付:何の祝日)
58
+ let holiday_dic = {};
59
+ //カレンダーの範囲の値(日付)を配列で取得
60
+ let cellValues_calendar_data = active_sheet.getRange(3,1,6,7).getValues();
61
+ for(let row_i = 0 ; row_i < 6 ; row_i++){
62
+ for(let col_i = 0; col_i < 7; col_i++){
63
+ //指定した日付の祝日情報を取得
64
+ let calendarEvent_arry = calendar_jpn_holiday_Data.getEventsForDay(cellValues_calendar_data[row_i][col_i]);
65
+ let cell_range = active_sheet.getRange(row_i + 3, col_i + 1)
66
+ //指定した日付に祝日情報があるのかを確認
67
+ if(calendarEvent_arry[0] == "CalendarEvent"){
68
+ //指定した日付に祝日情報が有り、尚且つ当月であることを確認
69
+ if(parseInt(cellValues_calendar_data[row_i][col_i].getMonth() , 10) + 1 == parseInt(cellValue_manth, 10)){
70
+ //セルの背景を赤く塗りつぶす
71
+ cell_range.setBackground("#F15B5B");
72
+
73
+ //祝日情報の連想配列に(日付:何の祝日)を追加
74
+ holiday_dic[cellValues_calendar_data[row_i][col_i].toLocaleString("ja")] = calendarEvent_arry[0].getTitle();
75
+ }
76
+ }
77
+ else{
78
+ //指定した日付に祝日情報が無ければセルの背景をグレーで塗りつぶす
79
+ cell_range.setBackground("#f3f3f3");
80
+ }
81
+ }
82
+ }
83
+ //祝日情報の入力を開始するセルの行番号
84
+ const holiday_str_row = 11;
85
+ //セルを空白にする
86
+ for(let range_i = 0 ; range_i <= 5; range_i++){
87
+ active_sheet.getRange(holiday_str_row + range_i , 1).setValue("");
88
+ active_sheet.getRange(holiday_str_row + range_i , 2).setValue("");
89
+ }
90
+ //祝日情報の連想配列からキーを取得
91
+ let key = Object.keys(holiday_dic);
92
+ for( let key_i = 0 ; key_i < Object.keys(holiday_dic).length ; key_i++){
93
+ //祝日の日付をセルに入力
94
+ active_sheet.getRange(holiday_str_row + key_i , 1).setValue(key[key_i]);
95
+ //日付の書式を[月/日]に変換
96
+ active_sheet.getRange(holiday_str_row + key_i , 1).setNumberFormat('M/d');
97
+ //祝日情報をセルに入力
98
+ active_sheet.getRange(holiday_str_row + key_i , 2).setValue(holiday_dic[key[key_i]]);
99
+ }
100
+ }
101
+ }
102
+
103
+ ```

3

①~⑥の部分に追記しました

2022/06/17 23:02

投稿

hachi.
hachi.

スコア0

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
  ①月曜または祝日明け
17
17
  ②金曜または金曜が祝日の場合その前日
18
18
  ③土曜・祝日前
19
- ④日曜日または祝日
19
+ ④日曜日または祝日(月曜日が祝日の場合は、その前日の日曜日は除く)
20
20
  ⑤それ以外
21
21
  ⑥以上の合計
22
22
 

2

質問があった点を追記で記入しました

2022/06/17 22:47

投稿

hachi.
hachi.

スコア0

test CHANGED
File without changes
test CHANGED
@@ -6,8 +6,9 @@
6
6
  その月のカレンダーになるようになっていて、
7
7
  Googleカレンダーより祝日のデータを取得し、
8
8
  祝日も判別され色が赤くなるようになっています。
9
+ こちらはGASを利用しています。
9
10
 
10
- カレンダー自体はA4セルに
11
+ カレンダー自体はA3セルに
11
12
  =SEQUENCE(6,7,DATE(A1,C1,1)-(WEEKDAY(DATE(A1,C1,1),1) - 1) )という
12
13
  関数が入っており、表示されています。
13
14
 
@@ -22,3 +23,4 @@
22
23
  ⑥は月の日数(2022年1月なら31日)に
23
24
  なるかとおもうのですが、
24
25
  以上の数を出す関数を作ることは可能でしょうか?
26
+ 合計を出し、新しく合計を集計する欄を作りたいです。

1

タイトルを詳しく記入

2022/06/17 10:08

投稿

hachi.
hachi.

スコア0

test CHANGED
@@ -1 +1 @@
1
- 【Googleスプレッドシート】
1
+ 【Googleスプレッドシート】カレンダーから、希望する日の数を数える
test CHANGED
File without changes