質問編集履歴
4
記載しているコードを追記しました。
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
①~⑥の部分に追記しました
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
質問があった点を追記で記入しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,8 +6,9 @@
|
|
6
6
|
その月のカレンダーになるようになっていて、
|
7
7
|
Googleカレンダーより祝日のデータを取得し、
|
8
8
|
祝日も判別され色が赤くなるようになっています。
|
9
|
+
こちらはGASを利用しています。
|
9
10
|
|
10
|
-
カレンダー自体はA
|
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
タイトルを詳しく記入
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
【Googleスプレッドシート】
|
1
|
+
【Googleスプレッドシート】カレンダーから、希望する日の数を数える
|
test
CHANGED
File without changes
|