回答編集履歴

9

 

2023/01/29 10:18

投稿

退会済みユーザー
test CHANGED
@@ -26,8 +26,9 @@
26
26
  ```
27
27
 
28
28
  + slice(-1)[0] としている理由:
29
+ ピボットテーブルの条件には、同じ軸の条件であっても、複数のフィルタを重ねて設定することが可能です。
29
- ピボッテーブルの条件は複数のフィルタを設定することが可能です。表示されているのは最新の(=一番最後に設定した)フィルタである、という前提で、
30
+ この場合シートに表示されるのは最新の(=一番最後に設定した)フィルタになります。
30
- slice(-1)[0] により、PivotFilter の配列の最後の要素を取得しています。
31
+ 複数のフィルタが重ねて設定されてしまっている可能性があることを考慮して、slice(-1)[0] により、PivotFilter の配列の最後の要素を取得しています。
31
32
 
32
33
  ---
33
34
 

8

 

2023/01/29 09:49

投稿

退会済みユーザー
test CHANGED
@@ -32,7 +32,7 @@
32
32
  ---
33
33
 
34
34
  また、上記のコードでarray を [] にすると、要素が空の条件が設定されることになりますので、文字通りすべてのデータが非表示となります。
35
- これが不都合ならば(すなわち 「array [] にしたときは全部のデータを表示したい」等の要件ならば)下記のようなコードになります。
35
+ これが不都合ならば(すなわち 「array [] ときは全部のデータを表示したい」等の要件ならば)下記のようなコードになります。
36
36
 
37
37
  ```js
38
38
  function editPivot() {

7

 

2023/01/29 08:40

投稿

退会済みユーザー
test CHANGED
@@ -42,8 +42,8 @@
42
42
  const pivotTables = sheet.getPivotTables();
43
43
  const pivotTable = pivotTables[0];
44
44
 
45
- // 条件の内容となる配列
45
+ // 条件の内容となる配列(空の場合)
46
- let array = [];
46
+ let array = []; // [ '2023/1/23', '2023/1/25', '2023/1/26', '2023/1/27' ];
47
47
 
48
48
  if (array.length === 0) {
49
49
  // array が空の場合は、フィルタをすべて削除する

6

 

2023/01/29 08:39

投稿

退会済みユーザー
test CHANGED
@@ -26,8 +26,8 @@
26
26
  ```
27
27
 
28
28
  + slice(-1)[0] としている理由:
29
- ピボットテーブルの条件には複数のフィルタを設定することが可能です。表示されているのは最後に設定したフィルタである、という前提で、
29
+ ピボットテーブルの条件には複数のフィルタを設定することが可能です。表示されているのは最新の(=一番最後に設定したフィルタである、という前提で、
30
- slice(-1)[0] により、PivotFilter の配列の最の要素を取得しています。
30
+ slice(-1)[0] により、PivotFilter の配列の最の要素を取得しています。
31
31
 
32
32
  ---
33
33
 

5

 

2023/01/29 08:38

投稿

退会済みユーザー
test CHANGED
@@ -61,7 +61,7 @@
61
61
  pivotTable.addFilter(2, criteria);
62
62
  } else {
63
63
  // 条件が設定されている場合は、表示されている条件の内容を上書き
64
- pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria)
64
+ pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria);
65
65
  }
66
66
  }
67
67
  ```

4

 

2023/01/29 08:37

投稿

退会済みユーザー
test CHANGED
@@ -15,11 +15,11 @@
15
15
  .setVisibleValues(array)
16
16
  .build();
17
17
 
18
- //条件が設定されていない場合は新規設定
18
+ // フィルタが設定されていない場合は新規設定
19
19
  if (pivotTable.getFilters().length === 0) {
20
20
  pivotTable.addFilter(2, criteria);
21
21
  } else {
22
- // 条件が設定されている場合は、表示されている条件の内容を上書き
22
+ // フィルタが設定されている場合は、表示されているフィルタの内容を上書き
23
23
  pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria);
24
24
  }
25
25
  }
@@ -28,3 +28,40 @@
28
28
  + slice(-1)[0] としている理由:
29
29
  ピボットテーブルの条件には複数のフィルタを設定することが可能です。表示されているのは最後に設定したフィルタである、という前提で、
30
30
  slice(-1)[0] により、PivotFilter の配列の最期の要素を取得しています。
31
+
32
+ ---
33
+
34
+ また、上記のコードでarray を [] にすると、要素が空の条件が設定されることになりますので、文字通りすべてのデータが非表示となります。
35
+ これが不都合ならば(すなわち 「array を [] にしたときは全部のデータを表示にしたい」等の要件ならば)下記のようなコードになります。
36
+
37
+ ```js
38
+ function editPivot() {
39
+ const ss = SpreadsheetApp.getActiveSpreadsheet();
40
+ const sheet = ss.getSheetByName('Table');
41
+
42
+ const pivotTables = sheet.getPivotTables();
43
+ const pivotTable = pivotTables[0];
44
+
45
+ // 条件の内容となる配列
46
+ let array = [];
47
+
48
+ if (array.length === 0) {
49
+ // array が空の場合は、フィルタをすべて削除する
50
+ pivotTable.getFilters().forEach(filter => filter.remove());
51
+ return;
52
+ }
53
+
54
+ // 条件の作成
55
+ const criteria = SpreadsheetApp.newFilterCriteria()
56
+ .setVisibleValues(array)
57
+ .build();
58
+
59
+ if (pivotTable.getFilters().length === 0) {
60
+ //条件が設定されていない場合は新規設定
61
+ pivotTable.addFilter(2, criteria);
62
+ } else {
63
+ // 条件が設定されている場合は、表示されている条件の内容を上書き
64
+ pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria)
65
+ }
66
+ }
67
+ ```

3

 

2023/01/29 08:28

投稿

退会済みユーザー
test CHANGED
@@ -26,5 +26,5 @@
26
26
  ```
27
27
 
28
28
  + slice(-1)[0] としている理由:
29
- ピボットには複数のフィルタを設定可能です。表示されているのは最後に設定したフィルタである、という前提で、
29
+ ピボットテーブルの条件には複数のフィルタを設定することが可能です。表示されているのは最後に設定したフィルタである、という前提で、
30
30
  slice(-1)[0] により、PivotFilter の配列の最期の要素を取得しています。

2

 

2023/01/29 08:28

投稿

退会済みユーザー
test CHANGED
@@ -20,7 +20,11 @@
20
20
  pivotTable.addFilter(2, criteria);
21
21
  } else {
22
22
  // 条件が設定されている場合は、表示されている条件の内容を上書き
23
- pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria)
23
+ pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria);
24
24
  }
25
25
  }
26
26
  ```
27
+
28
+ + slice(-1)[0] としている理由:
29
+ ピボットには複数のフィルタを設定可能です。表示されているのは最後に設定したフィルタである、という前提で、
30
+ slice(-1)[0] により、PivotFilter の配列の最期の要素を取得しています。

1

 

2023/01/29 08:26

投稿

退会済みユーザー
test CHANGED
@@ -11,7 +11,7 @@
11
11
  let array = [ '2023/1/23', '2023/1/25', '2023/1/26', '2023/1/27' ];
12
12
 
13
13
  // 条件の作成
14
- var criteria = SpreadsheetApp.newFilterCriteria()
14
+ const criteria = SpreadsheetApp.newFilterCriteria()
15
15
  .setVisibleValues(array)
16
16
  .build();
17
17