回答編集履歴

2

追記

2023/07/19 06:44

投稿

YAmaGNZ
YAmaGNZ

スコア10542

test CHANGED
@@ -79,3 +79,35 @@
79
79
  シートが2000行の場合は
80
80
  `var targetRange = targetSheet.getRange("G12:G");`
81
81
  このデータ取得に時間がかかるみたいでpasteDataToMatchingDateHelperの単体での実行時間は2500msくらいになりました。
82
+
83
+ ---
84
+ ### 追記
85
+ G12:Gに関しては一定でコード内でも変化しないみたいですし、下記のように開始時に1回取得して関数に引数としてデータを渡すようにしてはどうでしょうか?
86
+ ```JaveScript
87
+ function pasteDataToMatchingDate55() {
88
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
89
+ var targetSheet = ss.getActiveSheet();
90
+ var targetRange = targetSheet.getRange("G12:G");
91
+ var targetValues = targetRange.getValues();
92
+ var targetDates = targetValues.flat();
93
+
94
+ pasteDataToMatchingDateHelper("シート1", "W5", 9, 7, 9, targetSheet, targetDates);
95
+ pasteDataToMatchingDateHelper("シート1", "AL5", 24, 7, 24, targetSheet, targetDates);
96
+ pasteDataToMatchingDateHelper("シート1", "BP5", 54, 7, 54, targetSheet, targetDates);
97
+ pasteDataToMatchingDateHelper("シート1", "CE5", 69, 7, 69, targetSheet, targetDates);
98
+ pasteDataToMatchingDateHelper("シート1", "DI5", 99, 7, 99, targetSheet, targetDates);
99
+
100
+ }
101
+
102
+ function pasteDataToMatchingDateHelper(sheetName, dateCellRef, startCol, startRow, targetCol, targetSheet, targetDates) {
103
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
104
+ var sourceSheet = ss.getSheetByName(sheetName);
105
+ var sourceRange = sourceSheet.getRange(startRow, startCol, 1, 15);
106
+ var dateCell = sourceSheet.getRange(dateCellRef);
107
+ var dateValue = dateCell.getValue();
108
+
109
+ var matchingIndex = targetDates.findIndex(function(date) {
110
+ return date instanceof Date && date.getTime() == dateValue.getTime();
111
+ });
112
+
113
+ ```

1

追記

2023/07/19 00:34

投稿

YAmaGNZ
YAmaGNZ

スコア10542

test CHANGED
@@ -42,3 +42,40 @@
42
42
  }
43
43
  ```
44
44
  こちらを実行したらどのようなログが出力されますか?
45
+
46
+ ---
47
+ 当方で適当にシート(行は1001行、列はDIまで、1001行目は12行目~1000行目の合計行)を作成し、上記のコードを動作させたところ
48
+ > お知らせ 実行開始
49
+ > 情報 データ領域 = A1:DI1001
50
+ > 情報 sourceRange = I7:W7 : dateCell = W5 : targetDates = 990
51
+ > デバッグ 日付検索時間: 3ms
52
+ > デバッグ データコピー時間: 118ms
53
+ > デバッグ 単体実行時間: 1104ms
54
+ > 情報 データ領域 = A1:DI1001
55
+ > 情報 sourceRange = X7:AL7 : dateCell = AL5 : targetDates = 990
56
+ > デバッグ 日付検索時間: 2ms
57
+ > デバッグ データコピー時間: 139ms
58
+ > デバッグ 単体実行時間: 1110ms
59
+ > 情報 データ領域 = A1:DI1001
60
+ > 情報 sourceRange = BB7:BP7 : dateCell = BP5 : targetDates = 990
61
+ > デバッグ 日付検索時間: 1ms
62
+ > デバッグ データコピー時間: 100ms
63
+ > デバッグ 単体実行時間: 1299ms
64
+ > 情報 データ領域 = A1:DI1001
65
+ > 情報 sourceRange = BQ7:CE7 : dateCell = CE5 : targetDates = 990
66
+ > デバッグ 日付検索時間: 2ms
67
+ > デバッグ データコピー時間: 102ms
68
+ > デバッグ 単体実行時間: 970ms
69
+ > 情報 データ領域 = A1:DI1001
70
+ > 情報 sourceRange = CU7:DI7 : dateCell = DI5 : targetDates = 990
71
+ > デバッグ 日付検索時間: 1ms
72
+ > デバッグ データコピー時間: 64ms
73
+ > デバッグ 単体実行時間: 839ms
74
+ > デバッグ 全体実行時間: 5335ms
75
+ > お知らせ 実行完了
76
+
77
+ といった感じで
78
+ pasteDataToMatchingDateHelperの単体での実行時間は大体800ms~1300ms、処理全体で約5500msといった感じになっています。
79
+ シートが2000行の場合は
80
+ `var targetRange = targetSheet.getRange("G12:G");`
81
+ このデータ取得に時間がかかるみたいでpasteDataToMatchingDateHelperの単体での実行時間は2500msくらいになりました。