質問編集履歴
9
文章
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
元データがありピボットデーブルを作成したのち、テーブルの一つのセルをダブルクリックすれば元データの該当部分が展開されますが、テーブルの複数セルを選択して同時に展開するものを作りたいです。上記コードは途上のものですが、まずは、アクティブで複数選択したセルのテーブルの行と列の内容を取得することを考えています。(今はテーブルがc列と1行に枠として展開されています。)
|
37
|
+
元データがありピボットデーブルを作成したのち、テーブルの一つのセルをダブルクリックすれば元データの該当部分が展開されますが、テーブルの複数セルを選択して同時に展開するものをシート9に作りたいです。上記コードは途上のものですが、まずは、アクティブで複数選択したセルのテーブルの行と列の内容を取得することを考えています。(今はテーブルがc列と1行に枠として展開されています。)
|
38
38
|
|
39
39
|
|
40
40
|
|
8
コードのアップデート
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,35 +6,29 @@
|
|
6
6
|
|
7
7
|
var rangeList = sheet.getActiveRangeList().getRanges();
|
8
8
|
|
9
|
-
|
10
|
-
|
11
9
|
for(var i = 0; i < rangeList.length ; i++){
|
12
10
|
|
13
11
|
|
14
12
|
|
15
|
-
sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
|
16
13
|
|
17
|
-
sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
|
18
14
|
|
19
|
-
|
15
|
+
sheet.getRange(i+150, 1).setValue(`=
|
16
|
+
|
17
|
+
query('シート9'!A2:U,"where (D='"&indirect(address(${rangeList[i].getRow()-1+1},3))&"'or L='"&indirect(address(${rangeList[i].getRow()-1+1},3))&"')
|
18
|
+
|
19
|
+
and year(A)="&text(substitute(substitute(indirect(address(1,${rangeList[i].getColumn()-1})),"-",""),",","-"),"YYYY")&" and month(A)+1="&text(substitute(substitute(indirect(address(1,${rangeList[i].getColumn()-1})),"-",""),",","-"),"MM")&""))
|
20
|
+
|
21
|
+
)`);
|
20
22
|
|
21
23
|
|
22
24
|
|
23
|
-
SpreadsheetApp.flush()
|
24
|
-
|
25
|
-
var range = sheet.getRange('P:P');
|
26
|
-
|
27
|
-
var target = sheet.getRange('P:P');
|
28
|
-
|
29
|
-
range.copyTo(target, {contentsOnly:true});
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
}
|
25
|
+
}}
|
34
26
|
|
35
27
|
コード
|
36
28
|
|
37
29
|
```
|
30
|
+
|
31
|
+
|
38
32
|
|
39
33
|
質問を改めます。
|
40
34
|
|
7
内容
test
CHANGED
File without changes
|
test
CHANGED
@@ -48,7 +48,7 @@
|
|
48
48
|
|
49
49
|
sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
|
50
50
|
|
51
|
-
の部分でiが回っていないのですが、これをiで読み取れるようにするにはどうすればよろしいでしょうか?
|
51
|
+
の部分でiが回っていないのですが、setformulaがA1形式のみ対応らしいのですが、これをiで読み取れるようにするにはどうすればよろしいでしょうか?
|
52
52
|
|
53
53
|
|
54
54
|
|
6
内容の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,36 +1,20 @@
|
|
1
1
|
```function myFunctionXY() {
|
2
|
-
|
3
|
-
|
4
2
|
|
5
3
|
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
|
6
4
|
|
7
5
|
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
|
8
6
|
|
9
|
-
// アクティブな範囲の配列を取得
|
10
|
-
|
11
7
|
var rangeList = sheet.getActiveRangeList().getRanges();
|
12
8
|
|
13
9
|
|
14
10
|
|
15
|
-
// 取得したアクティブな範囲をループで回す
|
16
|
-
|
17
11
|
for(var i = 0; i < rangeList.length ; i++){
|
18
|
-
|
19
|
-
// 範囲の開始行
|
20
|
-
|
21
|
-
Logger.log(rangeList[i].getRow());
|
22
|
-
|
23
|
-
Logger.log(rangeList[i].getColumn());
|
24
|
-
|
25
|
-
var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
|
26
|
-
|
27
|
-
var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
|
28
12
|
|
29
13
|
|
30
14
|
|
31
|
-
sheet.getRange(i+1, 1
|
15
|
+
sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
|
32
16
|
|
33
|
-
|
17
|
+
sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
|
34
18
|
|
35
19
|
}
|
36
20
|
|
@@ -38,9 +22,9 @@
|
|
38
22
|
|
39
23
|
SpreadsheetApp.flush()
|
40
24
|
|
41
|
-
var range = sheet.getRange('
|
25
|
+
var range = sheet.getRange('P:P');
|
42
26
|
|
43
|
-
var target = sheet.getRange('
|
27
|
+
var target = sheet.getRange('P:P');
|
44
28
|
|
45
29
|
range.copyTo(target, {contentsOnly:true});
|
46
30
|
|
@@ -52,29 +36,23 @@
|
|
52
36
|
|
53
37
|
```
|
54
38
|
|
55
|
-
|
56
|
-
|
57
|
-
アクティブシートの複数セルを選択(+commandで)した上で、GASを回すと、
|
58
|
-
|
59
|
-
sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
|
60
|
-
|
61
|
-
sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
|
62
|
-
|
63
|
-
|
39
|
+
質問を改めます。
|
64
40
|
|
65
41
|
|
66
42
|
|
67
|
-
二点ございます。
|
68
|
-
|
69
|
-
|
43
|
+
元データがありピボットデーブルを作成したのち、テーブルの一つのセルをダブルクリックすれば元データの該当部分が展開されますが、テーブルの複数セルを選択して同時に展開するものを作りたいです。上記コードは途上のものですが、まずは、アクティブで複数選択したセルのテーブルの行と列の内容を取得することを考えています。(今はテーブルがc列と1行に枠として展開されています。)
|
70
|
-
|
71
|
-
var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
|
72
|
-
|
73
|
-
var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
|
74
44
|
|
75
45
|
|
76
46
|
|
77
|
-
|
47
|
+
sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
|
48
|
+
|
49
|
+
sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
|
50
|
+
|
51
|
+
の部分でiが回っていないのですが、これをiで読み取れるようにするにはどうすればよろしいでしょうか?
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
78
56
|
|
79
57
|
|
80
58
|
|
5
内容の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
-
②setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っています
|
77
|
+
②setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますので、iごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
|
78
78
|
|
79
79
|
|
80
80
|
|
4
コード
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,19 +2,47 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
|
5
|
+
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
|
6
|
+
|
7
|
+
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
|
8
|
+
|
9
|
+
// アクティブな範囲の配列を取得
|
10
|
+
|
11
|
+
var rangeList = sheet.getActiveRangeList().getRanges();
|
6
12
|
|
7
13
|
|
8
14
|
|
9
|
-
// 取得したアクティブな範囲をループで回す
|
15
|
+
// 取得したアクティブな範囲をループで回す
|
16
|
+
|
17
|
+
for(var i = 0; i < rangeList.length ; i++){
|
18
|
+
|
19
|
+
// 範囲の開始行
|
20
|
+
|
21
|
+
Logger.log(rangeList[i].getRow());
|
22
|
+
|
23
|
+
Logger.log(rangeList[i].getColumn());
|
24
|
+
|
25
|
+
var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
|
26
|
+
|
27
|
+
var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
|
10
28
|
|
11
29
|
|
12
30
|
|
13
|
-
sheet
|
31
|
+
sheet.getRange(i+1, 10).setValue(`=M${i+1} + L${i+1}`);
|
14
32
|
|
15
33
|
|
16
34
|
|
35
|
+
}
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
SpreadsheetApp.flush()
|
40
|
+
|
41
|
+
var range = sheet.getRange('A:A');
|
42
|
+
|
17
|
-
|
43
|
+
var target = sheet.getRange('A:A');
|
44
|
+
|
45
|
+
range.copyTo(target, {contentsOnly:true});
|
18
46
|
|
19
47
|
|
20
48
|
|
@@ -26,7 +54,7 @@
|
|
26
54
|
|
27
55
|
|
28
56
|
|
29
|
-
アクティブシートの複数セルを選択した上で、GASを回すと、
|
57
|
+
アクティブシートの複数セルを選択(+commandで)した上で、GASを回すと、
|
30
58
|
|
31
59
|
sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
|
32
60
|
|
@@ -38,7 +66,7 @@
|
|
38
66
|
|
39
67
|
二点ございます。
|
40
68
|
|
41
|
-
①現状以下の数式によってアクティブセルのrowとcolumnがT/BのLとM列に展開されていますが、これを表示しないでコード内で読み取って、setvalueを発動するにはどうす
|
69
|
+
①現状以下の数式によってアクティブセルのrowとcolumnがT/BのLとM列に展開されていますが、これを表示しないでコード内で読み取って、setvalueを発動するにはどうする必要がありますか?
|
42
70
|
|
43
71
|
var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
|
44
72
|
|
@@ -46,7 +74,7 @@
|
|
46
74
|
|
47
75
|
|
48
76
|
|
49
|
-
②実際はQUERY関数を使おうと思っていますが、例えば上記のように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
|
77
|
+
②setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますが、例えば上記のように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
|
50
78
|
|
51
79
|
|
52
80
|
|
3
タイトル
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
複数アクティブセルに
|
1
|
+
複数アクティブセル指定した時に、これらのセルの値を取得して数式に代入して展開する方法について
|
test
CHANGED
File without changes
|
2
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,49 +2,27 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
|
6
|
-
|
7
|
-
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
|
8
|
-
|
9
|
-
// アクティブな範囲の配列を取得
|
10
|
-
|
11
|
-
var rangeList = sheet.getActiveRangeList().getRanges();
|
5
|
+
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9'); // アクティブな範囲の配列を取得 var rangeList = sheet.getActiveRangeList().getRanges();
|
12
6
|
|
13
7
|
|
14
8
|
|
15
|
-
// 取得したアクティブな範囲をループで回す
|
16
|
-
|
17
|
-
for(var i = 0; i < rangeList.length ; i++){
|
18
|
-
|
19
|
-
// 範囲の開始行
|
20
|
-
|
21
|
-
Logger.log(rangeList[i].getRow());
|
22
|
-
|
23
|
-
Logger.log(rangeList[i].getColumn());
|
24
|
-
|
25
|
-
var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
|
26
|
-
|
27
|
-
var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
|
9
|
+
// 取得したアクティブな範囲をループで回す for(var i = 0; i < rangeList.length ; i++){ // 範囲の開始行 Logger.log(rangeList[i].getRow()); Logger.log(rangeList[i].getColumn()); var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow()); var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
|
28
10
|
|
29
11
|
|
30
12
|
|
31
|
-
sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
|
32
|
-
|
33
|
-
sheet2.getRange(i+2, 1).setValue(
|
13
|
+
sheet2.getRange(i+1, 1).setValue(=M${i+1} + L${i+1}); sheet2.getRange(i+2, 1).setValue(=M${i+2} + L${i+2});}
|
34
14
|
|
35
15
|
|
36
16
|
|
37
|
-
SpreadsheetApp.flush()
|
38
|
-
|
39
|
-
var range = sheet2.getRange('A:A');
|
40
|
-
|
41
|
-
var target = sheet2.getRange('A:A');
|
17
|
+
SpreadsheetApp.flush() var range = sheet2.getRange('A:A'); var target = sheet2.getRange('A:A'); range.copyTo(target, {contentsOnly:true});
|
42
|
-
|
43
|
-
range.copyTo(target, {contentsOnly:true});
|
44
18
|
|
45
19
|
|
46
20
|
|
21
|
+
}
|
22
|
+
|
23
|
+
コード
|
24
|
+
|
47
|
-
|
25
|
+
```
|
48
26
|
|
49
27
|
|
50
28
|
|
1
内容の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,17 +6,17 @@
|
|
6
6
|
|
7
7
|
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
|
8
8
|
|
9
|
-
|
9
|
+
// アクティブな範囲の配列を取得
|
10
10
|
|
11
11
|
var rangeList = sheet.getActiveRangeList().getRanges();
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
|
15
|
+
// 取得したアクティブな範囲をループで回す
|
16
16
|
|
17
17
|
for(var i = 0; i < rangeList.length ; i++){
|
18
18
|
|
19
|
-
|
19
|
+
// 範囲の開始行
|
20
20
|
|
21
21
|
Logger.log(rangeList[i].getRow());
|
22
22
|
|
@@ -28,7 +28,9 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
|
31
|
+
sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
|
32
|
+
|
33
|
+
sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
|
32
34
|
|
33
35
|
|
34
36
|
|
@@ -46,11 +48,11 @@
|
|
46
48
|
|
47
49
|
|
48
50
|
|
49
|
-
|
50
|
-
|
51
51
|
アクティブシートの複数セルを選択した上で、GASを回すと、
|
52
52
|
|
53
|
-
setValue(`=M${i+1} + L${i+1}`);
|
53
|
+
sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
|
54
|
+
|
55
|
+
sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
|
54
56
|
|
55
57
|
が複数セル分、計算されてシート9のA列目に展開されていくものを作りたいです。
|
56
58
|
|
@@ -66,7 +68,7 @@
|
|
66
68
|
|
67
69
|
|
68
70
|
|
69
|
-
②実際はQUERY関数を使おうと思ってい
|
71
|
+
②実際はQUERY関数を使おうと思っていますが、例えば上記のように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
|
70
72
|
|
71
73
|
|
72
74
|
|