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

回答編集履歴

1

コード例追加

2021/10/19 10:49

投稿

itagagaki
itagagaki

スコア8402

answer CHANGED
@@ -13,4 +13,32 @@
13
13
 
14
14
  で、`Range.getValues()`が返すのは二次元配列です。
15
15
  その二次元配列の要素を、行と列の二重ループで参照して、値の置換を行い、
16
- それを`Range.setValues()`でシートに書き戻せばよいでしょう。
16
+ それを`Range.setValues()`でシートに書き戻せばよいでしょう。
17
+
18
+ ---
19
+
20
+ 追記
21
+
22
+ 要望があったのでコード例を示します
23
+
24
+ ```GAS
25
+ const ss = SpreadsheetApp.getActiveSpreadsheet();
26
+ const sheet = ss.getSheetByName("シート1");
27
+
28
+ const lastRow = sheet.getRange(sheet.getMaxRows(), 2).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); //B列基準で最終行番号取得
29
+ const numRows = lastRow; // 1行目からlastRow行目までなので行数はlastRowになる
30
+ const range = sheet.getRange(1, 4, numRows, 4); // D1:G最終行
31
+ let arr = range.getValues(); // arrはnumRows行×4列の2次元配列
32
+
33
+ for (let row = 0; row < numRows; row++) {
34
+ for (let col = 0; col < 4; col++) { // 配列へのインデックスrowとcolは0から
35
+ if (arr[row][col] == "") {
36
+ arr[row][col] = "0";
37
+ }
38
+ }
39
+ }
40
+
41
+ range.setValues(arr);
42
+ ```
43
+
44
+ mapとか使うとより洗練されたコードになりますけど、わかりやすいコードにしました。