質問編集履歴

9

文章

2021/10/09 13:59

投稿

0000a
0000a

スコア18

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

コードのアップデート

2021/10/09 13:59

投稿

0000a
0000a

スコア18

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

内容

2021/10/09 13:54

投稿

0000a
0000a

スコア18

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

内容の修正

2021/10/09 08:57

投稿

0000a
0000a

スコア18

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, 10).setValue(`=M${i+1} + L${i+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('A:A');
25
+ var range = sheet.getRange('P:P');
42
26
 
43
- var target = sheet.getRange('A:A');
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
- が複数セル分、計算されてシート9のA列目に展開されていくもの作りたいです。
39
+ 質問改めます。
64
40
 
65
41
 
66
42
 
67
- 二点ございます。
68
-
69
- ①現状以下数式によってアクブセルのrowとcolumnT/BのLとM列に展開されていますが、これ表示いでコード読み取ってsetvalue発動するどうする必要ありますか?
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
- setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますので、iごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
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

内容の修正

2021/10/09 08:31

投稿

0000a
0000a

スコア18

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関数を使おうと思っています例えば上記のように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
77
+ ②setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますので、iごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
78
78
 
79
79
 
80
80
 

4

コード

2021/10/09 07:48

投稿

0000a
0000a

スコア18

test CHANGED
File without changes
test CHANGED
@@ -2,19 +2,47 @@
2
2
 
3
3
 
4
4
 
5
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9'); // アクティブな範囲の配列を取得 var rangeList = sheet.getActiveRangeList().getRanges();
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
- // 取得したアクティブな範囲をループで回す 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());
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
- sheet2.getRange(i+1, 1).setValue(=M${i+1} + L${i+1}); sheet2.getRange(i+2, 1).setValue(=M${i+2} + L${i+2});}
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
- SpreadsheetApp.flush() var range = sheet2.getRange('A:A'); var target = sheet2.getRange('A:A'); range.copyTo(target, {contentsOnly:true});
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

タイトル

2021/10/09 07:33

投稿

0000a
0000a

スコア18

test CHANGED
@@ -1 +1 @@
1
- 複数アクティブセルについて数式展開する方法について
1
+ 複数アクティブセル指定した時、これらのセルの値を取得して数式に代入して展開する方法について
test CHANGED
File without changes

2

コードの修正

2021/10/09 06:51

投稿

0000a
0000a

スコア18

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(`=M${i+2} + L${i+2}`);}
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

内容の修正

2021/10/09 06:49

投稿

0000a
0000a

スコア18

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関数を使おうと思っていで、一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
71
+ ②実際はQUERY関数を使おうと思っていますが、例えば上記ように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
70
72
 
71
73
 
72
74