質問するログイン新規登録

質問編集履歴

9

文章

2021/10/09 13:59

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  質問を改めます。
18
18
 
19
- 元データがありピボットデーブルを作成したのち、テーブルの一つのセルをダブルクリックすれば元データの該当部分が展開されますが、テーブルの複数セルを選択して同時に展開するものを作りたいです。上記コードは途上のものですが、まずは、アクティブで複数選択したセルのテーブルの行と列の内容を取得することを考えています。(今はテーブルがc列と1行に枠として展開されています。)
19
+ 元データがありピボットデーブルを作成したのち、テーブルの一つのセルをダブルクリックすれば元データの該当部分が展開されますが、テーブルの複数セルを選択して同時に展開するものをシート9に作りたいです。上記コードは途上のものですが、まずは、アクティブで複数選択したセルのテーブルの行と列の内容を取得することを考えています。(今はテーブルがc列と1行に枠として展開されています。)
20
20
 
21
21
  sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
22
22
  sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);

8

コードのアップデート

2021/10/09 13:59

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -2,21 +2,18 @@
2
2
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
3
3
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
4
4
  var rangeList = sheet.getActiveRangeList().getRanges();
5
-
6
5
  for(var i = 0; i < rangeList.length ; i++){
7
6
 
8
- sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
9
- sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
10
- }
11
7
 
12
- SpreadsheetApp.flush()
13
- var range = sheet.getRange('P:P');
14
- var target = sheet.getRange('P:P');
15
- range.copyTo(target, {contentsOnly:true});
8
+ sheet.getRange(i+150, 1).setValue(`=
9
+ query('シート9'!A2:U,"where (D='"&indirect(address(${rangeList[i].getRow()-1+1},3))&"'or L='"&indirect(address(${rangeList[i].getRow()-1+1},3))&"')
10
+ 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")&""))
11
+ )`);
16
12
 
17
- }
13
+ }}
18
14
  コード
19
15
  ```
16
+
20
17
  質問を改めます。
21
18
 
22
19
  元データがありピボットデーブルを作成したのち、テーブルの一つのセルをダブルクリックすれば元データの該当部分が展開されますが、テーブルの複数セルを選択して同時に展開するものを作りたいです。上記コードは途上のものですが、まずは、アクティブで複数選択したセルのテーブルの行と列の内容を取得することを考えています。(今はテーブルがc列と1行に枠として展開されています。)

7

内容

2021/10/09 13:54

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
25
25
  sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
26
- の部分でiが回っていないのですが、これをiで読み取れるようにするにはどうすればよろしいでしょうか?
26
+ の部分でiが回っていないのですが、setformulaがA1形式のみ対応らしいのですが、これをiで読み取れるようにするにはどうすればよろしいでしょうか?
27
27
 
28
28
 
29
29
 

6

内容の修正

2021/10/09 08:57

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -1,41 +1,30 @@
1
1
  ```function myFunctionXY() {
2
-
3
2
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
4
3
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
5
- // アクティブな範囲の配列を取得
6
4
  var rangeList = sheet.getActiveRangeList().getRanges();
7
5
 
8
- // 取得したアクティブな範囲をループで回す
9
6
  for(var i = 0; i < rangeList.length ; i++){
10
- // 範囲の開始行
11
- Logger.log(rangeList[i].getRow());
12
- Logger.log(rangeList[i].getColumn());
13
- var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
14
- var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
15
7
 
8
+ sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
16
- sheet.getRange(i+1, 10).setValue(`=M${i+1} + L${i+1}`);
9
+ sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
17
-
18
10
  }
19
11
 
20
12
  SpreadsheetApp.flush()
21
- var range = sheet.getRange('A:A');
13
+ var range = sheet.getRange('P:P');
22
- var target = sheet.getRange('A:A');
14
+ var target = sheet.getRange('P:P');
23
15
  range.copyTo(target, {contentsOnly:true});
24
16
 
25
17
  }
26
18
  コード
27
19
  ```
20
+ 質問を改めます。
28
21
 
29
- アクティブシートの複数セルを選択(+commandで)した上で、GASを回すと、
30
- sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
31
- sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
32
- 複数セ計算さてシト9A列目に展開されていくものを作りたいです。
22
+ 元データありピボットデーブを作成したのちテーブルの一つのセルをダブルクリックすば元デ該当部分が展開されますが、テーブルの複数セルを選択し同時に展開するものを作りたいです。上記コードは途上のものですが、まずは、アクティブで複数選択したセルのテーブルの行と列の内容を取得することを考えています。(今はテーブルがc列と1行に枠として展開されています。)
33
23
 
34
- 二点ございます。
35
- ①現状以下の数式によってアクティブセルのrowとcolumnがT/BのLとM列に展開されていますが、これを表示しないでコード内で読み取って、setvalueを発動するにはどうする必要がありますか?
36
- var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
24
+ sheet.getRange(i+1, 1).setFormula(`=indirect(address(rangeList[i].getRow()-1+1,3))`);
37
- var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
25
+ sheet.getRange(i+1, 2).setValue(`=indirect(address(1,rangeList[i].getColumn()-1))`);
26
+ の部分でiが回っていないのですが、これをiで読み取れるようにするにはどうすればよろしいでしょうか?
38
27
 
39
- ②setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますので、iごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
40
28
 
29
+
41
30
  どうぞよろしくお願いいたします。

5

内容の修正

2021/10/09 08:31

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -36,6 +36,6 @@
36
36
  var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
37
37
  var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
38
38
 
39
- ②setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますが、例えば上記ように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
39
+ ②setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますので、iごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
40
40
 
41
41
  どうぞよろしくお願いいたします。

4

コード

2021/10/09 07:48

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -1,27 +1,41 @@
1
1
  ```function myFunctionXY() {
2
2
 
3
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9'); // アクティブな範囲の配列を取得 var rangeList = sheet.getActiveRangeList().getRanges();
3
+ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
4
+ var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
5
+ // アクティブな範囲の配列を取得
6
+ var rangeList = sheet.getActiveRangeList().getRanges();
4
7
 
5
- // 取得したアクティブな範囲をループで回す 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());
8
+ // 取得したアクティブな範囲をループで回す
9
+ for(var i = 0; i < rangeList.length ; i++){
10
+ // 範囲の開始行
11
+ Logger.log(rangeList[i].getRow());
12
+ Logger.log(rangeList[i].getColumn());
13
+ var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
14
+ var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
6
15
 
7
- sheet2.getRange(i+1, 1).setValue(=M${i+1} + L${i+1}); sheet2.getRange(i+2, 1).setValue(=M${i+2} + L${i+2});}
16
+ sheet.getRange(i+1, 10).setValue(`=M${i+1} + L${i+1}`);
8
17
 
9
- SpreadsheetApp.flush() var range = sheet2.getRange('A:A'); var target = sheet2.getRange('A:A'); range.copyTo(target, {contentsOnly:true});
18
+ }
10
19
 
20
+ SpreadsheetApp.flush()
21
+ var range = sheet.getRange('A:A');
22
+ var target = sheet.getRange('A:A');
23
+ range.copyTo(target, {contentsOnly:true});
24
+
11
25
  }
12
26
  コード
13
27
  ```
14
28
 
15
- アクティブシートの複数セルを選択した上で、GASを回すと、
29
+ アクティブシートの複数セルを選択(+commandで)した上で、GASを回すと、
16
30
  sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
17
31
  sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
18
32
  が複数セル分、計算されてシート9のA列目に展開されていくものを作りたいです。
19
33
 
20
34
  二点ございます。
21
- ①現状以下の数式によってアクティブセルのrowとcolumnがT/BのLとM列に展開されていますが、これを表示しないでコード内で読み取って、setvalueを発動するにはどうすればよろしいでしょうか?
35
+ ①現状以下の数式によってアクティブセルのrowとcolumnがT/BのLとM列に展開されていますが、これを表示しないでコード内で読み取って、setvalueを発動するにはどうする必要がありますか?
22
36
  var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
23
37
  var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
24
38
 
25
- ②実際はQUERY関数を使おうと思っていますが、例えば上記のように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
39
+ setValue(`=M${i+1} + L${i+1}`)の部分は実際はQUERY関数を使おうと思っていますが、例えば上記のように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
26
40
 
27
41
  どうぞよろしくお願いいたします。

3

タイトル

2021/10/09 07:33

投稿

0000a
0000a

スコア18

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

2

コードの修正

2021/10/09 06:51

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -1,27 +1,16 @@
1
1
  ```function myFunctionXY() {
2
2
 
3
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
4
- var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
5
- // アクティブな範囲の配列を取得
6
- var rangeList = sheet.getActiveRangeList().getRanges();
3
+ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9'); // アクティブな範囲の配列を取得 var rangeList = sheet.getActiveRangeList().getRanges();
7
4
 
8
- // 取得したアクティブな範囲をループで回す
9
- for(var i = 0; i < rangeList.length ; i++){
10
- // 範囲の開始行
11
- Logger.log(rangeList[i].getRow());
12
- Logger.log(rangeList[i].getColumn());
13
- var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
14
- var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
5
+ // 取得したアクティブな範囲をループで回す 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
6
 
16
- sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
17
- sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
7
+ sheet2.getRange(i+1, 1).setValue(=M${i+1} + L${i+1}); sheet2.getRange(i+2, 1).setValue(=M${i+2} + L${i+2});}
18
8
 
19
- SpreadsheetApp.flush()
20
- var range = sheet2.getRange('A:A');
21
- var target = sheet2.getRange('A:A');
9
+ SpreadsheetApp.flush() var range = sheet2.getRange('A:A'); var target = sheet2.getRange('A:A'); range.copyTo(target, {contentsOnly:true});
22
- range.copyTo(target, {contentsOnly:true});
23
10
 
11
+ }
12
+ コード
24
- }```
13
+ ```
25
14
 
26
15
  アクティブシートの複数セルを選択した上で、GASを回すと、
27
16
  sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);

1

内容の修正

2021/10/09 06:49

投稿

0000a
0000a

スコア18

title CHANGED
File without changes
body CHANGED
@@ -2,18 +2,19 @@
2
2
 
3
3
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
4
4
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート9');
5
-
5
+ // アクティブな範囲の配列を取得
6
6
  var rangeList = sheet.getActiveRangeList().getRanges();
7
7
 
8
-
8
+ // 取得したアクティブな範囲をループで回す
9
9
  for(var i = 0; i < rangeList.length ; i++){
10
-
10
+ // 範囲の開始行
11
11
  Logger.log(rangeList[i].getRow());
12
12
  Logger.log(rangeList[i].getColumn());
13
13
  var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
14
14
  var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
15
15
 
16
- sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);}
16
+ sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
17
+ sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
17
18
 
18
19
  SpreadsheetApp.flush()
19
20
  var range = sheet2.getRange('A:A');
@@ -22,9 +23,9 @@
22
23
 
23
24
  }```
24
25
 
25
-
26
26
  アクティブシートの複数セルを選択した上で、GASを回すと、
27
- setValue(`=M${i+1} + L${i+1}`);
27
+ sheet2.getRange(i+1, 1).setValue(`=M${i+1} + L${i+1}`);
28
+ sheet2.getRange(i+2, 1).setValue(`=M${i+2} + L${i+2}`);}
28
29
  が複数セル分、計算されてシート9のA列目に展開されていくものを作りたいです。
29
30
 
30
31
  二点ございます。
@@ -32,6 +33,6 @@
32
33
  var aa= sheet.getRange(i+1, 12).setValue(rangeList[i].getRow());
33
34
  var bb= sheet.getRange(i+1, 13).setValue(rangeList[i].getColumn());
34
35
 
35
- ②実際はQUERY関数を使おうと思っているので、一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
36
+ ②実際はQUERY関数を使おうと思っていますが例えば上記のように一回のiごとに複数行展開されるため、展開が終わったら一行開けて次のi+1を展開したいのですが、その場合のコードをお教えいただけますでしょうか?
36
37
 
37
38
  どうぞよろしくお願いいたします。