回答編集履歴

4

変数名の変更

2018/12/21 04:40

投稿

macaron_xxx
macaron_xxx

スコア3191

test CHANGED
@@ -78,11 +78,11 @@
78
78
 
79
79
  ```js
80
80
 
81
- function SumColor(range, color){
81
+ function SumColor(strRange, color){
82
82
 
83
83
  var sheet = SpreadsheetApp.getActiveSheet();
84
84
 
85
- var range = sheet.getRange(range);
85
+ var range = sheet.getRange(strRange);
86
86
 
87
87
  var getcolors = range.getBackgrounds();
88
88
 
@@ -116,11 +116,11 @@
116
116
 
117
117
  //m
118
118
 
119
- function getColor(range){
119
+ function getColor(strRange){
120
120
 
121
121
  var sheet = SpreadsheetApp.getActiveSheet();
122
122
 
123
- var range = sheet.getRange(range);
123
+ var range = sheet.getRange(strRange);
124
124
 
125
125
  var xcolor = range.getBackground();
126
126
 

3

追記

2018/12/21 04:40

投稿

macaron_xxx
macaron_xxx

スコア3191

test CHANGED
@@ -71,3 +71,71 @@
71
71
  ```
72
72
 
73
73
  たぶん色々考慮漏れてる気はしますが…。
74
+
75
+
76
+
77
+ ## 追記
78
+
79
+ ```js
80
+
81
+ function SumColor(range, color){
82
+
83
+ var sheet = SpreadsheetApp.getActiveSheet();
84
+
85
+ var range = sheet.getRange(range);
86
+
87
+ var getcolors = range.getBackgrounds();
88
+
89
+ var values = range.getValues();
90
+
91
+ var lastRow = sheet.getLastRow();
92
+
93
+ var sumfirst = 0;
94
+
95
+ var sum = parseInt(sumfirst);
96
+
97
+ for(var n = 0; n <= lastRow;n++){
98
+
99
+ var value = parseInt(values[n]);
100
+
101
+ var getcolor = getcolors[n];
102
+
103
+ if(color == getcolor){
104
+
105
+ sum = sum + value
106
+
107
+ }
108
+
109
+ }
110
+
111
+ return sum;
112
+
113
+ }
114
+
115
+
116
+
117
+ //m
118
+
119
+ function getColor(range){
120
+
121
+ var sheet = SpreadsheetApp.getActiveSheet();
122
+
123
+ var range = sheet.getRange(range);
124
+
125
+ var xcolor = range.getBackground();
126
+
127
+ return xcolor;
128
+
129
+ }
130
+
131
+ ```
132
+
133
+
134
+
135
+ カスタム関数で、
136
+
137
+ `=SumColor("A1:A5",getColor("D6"))`
138
+
139
+
140
+
141
+ こうですね。

2

実践の追記

2018/12/21 04:38

投稿

macaron_xxx
macaron_xxx

スコア3191

test CHANGED
@@ -29,3 +29,45 @@
29
29
  }
30
30
 
31
31
  ```
32
+
33
+
34
+
35
+ 実践的にいえば
36
+
37
+ セルの入力:`=yellowSum("A1:A5")`
38
+
39
+ ```JS
40
+
41
+ function yellowSum(range) {
42
+
43
+ var targetRange = SpreadsheetApp.getActiveSheet().getRange(range)
44
+
45
+ var values = targetRange.getValues();
46
+
47
+ var bgColors = targetRange.getBackgrounds();
48
+
49
+
50
+
51
+ var summary = 0;
52
+
53
+ bgColors.forEach(function(row, iRow) {
54
+
55
+ row.forEach(function(bgColor, iCol) {
56
+
57
+ if(bgColor === "#ffff00") {
58
+
59
+ summary += values[iRow][iCol];
60
+
61
+ }
62
+
63
+ });
64
+
65
+ });
66
+
67
+ return summary;
68
+
69
+ }
70
+
71
+ ```
72
+
73
+ たぶん色々考慮漏れてる気はしますが…。

1

追記

2018/12/21 04:30

投稿

macaron_xxx
macaron_xxx

スコア3191

test CHANGED
@@ -1,4 +1,22 @@
1
+ `=test(A1:A5)`のようにセルを指定する場合には、できません。
2
+
3
+ > Arguments
4
+
5
+ > Like a built-in function, a custom function can take arguments as input values
6
+
7
+ [https://developers.google.com/apps-script/guides/sheets/functions](https://developers.google.com/apps-script/guides/sheets/functions)
8
+
9
+
10
+
11
+ とあるように、引数は入力値として受け取ります。そのRangeを受け取ることはできません。
12
+
13
+
14
+
1
- セル自身を返たいということ…?
15
+ セル選択ではなく文字列と
16
+
17
+ `=test("A1:A5")`
18
+
19
+ と入力した場合には、下記のようにそのRangeを返すことができます。
2
20
 
3
21
 
4
22