質問編集履歴

2

修正後コードを追加掲載

2022/03/26 06:21

投稿

donguriko
donguriko

スコア30

test CHANGED
File without changes
test CHANGED
@@ -134,7 +134,67 @@
134
134
  ブロック②、③、、、とブロック間で連続して処理が走るように
135
135
  拡張させていきたいと思っています。
136
136
 
137
-
137
+ ### (参考) 回答を受けて修正したコード(追記)
138
-
138
+ 回答を受け、コードを以下のとおり修正しましたので参考掲載します。
139
-
139
+ 無事処理が走りました。
140
-
140
+ アドバイスありがとうございました。大変助かりました。
141
+
142
+ ```GAS
143
+ function copyToMerge1() {
144
+ const ss = SpreadsheetApp.getActiveSpreadsheet();
145
+ const mySheet1 = ss.getSheetByName("キイロ入力シート");
146
+ const mySheet2 = ss.getSheetByName("【●●】マージ");
147
+ const mySheet3 = ss.getSheetByName("【■■】マージ");
148
+
149
+ //★ブロック間のループ
150
+ //「部署」~「所要時間」までの6列×転記処理対象最終行(MaxRows)分
151
+ //で1ブロックとする。
152
+ //ブロックの開始col(blockCol)はC列(3col)とし、6colとばしで7ブロック目(39col目)まで
153
+ for (blockCol = 3; blockCol <= 6*6 +3; blockCol +=6) {
154
+
155
+ //★ブロック内のデータ取得
156
+ //件数データありの最終行(InMaxRow)、転記処理対象最終行(MaxRows)の取得
157
+ const InMaxRow = mySheet1.getRange(18, blockCol+1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
158
+ const MaxRows = InMaxRow - 7;
159
+ console.log("MaxRows " + MaxRows); //5の想定
160
+
161
+ //「部署」~「所要時間」までの5列分×MaxRows行分をgetRange(行、列、▲行分、■列分) で
162
+ // 二次元配列(Values)として1回でまとめて取得
163
+ const myDetaRange = mySheet1.getRange(8, blockCol, MaxRows, 5);
164
+ console.log("myDetaRange " + myDetaRange.getA1Notation());
165
+ const values = myDetaRange.getValues();
166
+ console.log("values " + values);
167
+
168
+ //★マージシートへの転記処理
169
+ //▼「×××マージ」シート(mySheet2)の件数(E列)にデータありの最終行(OutMaxRow1)の取得
170
+ const OutMaxRow1 = mySheet2.getRange(mySheet2.getMaxRows(), 5).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
171
+ console.log("OutMaxRow1 " + OutMaxRow1); //10が出る想定
172
+
173
+ //▼作業日(入力シートセルE3)の内容を「マージシート(mySheet2)」のB列に転記
174
+ const myDate = mySheet1.getRange("E2").getValue();
175
+ console.log("myDate " + myDate);
176
+ mySheet2.getRange(OutMaxRow1+1, 2, MaxRows, 1).setValue(myDate); 1
177
+
178
+ //▼二次元配列(Values)の内容(5項目)を「マージシート(mySheet2)」のD列~G列に転記
179
+ //getRange(行、列、▲行分、■列分)
180
+ mySheet2.getRange(OutMaxRow1 +1, 4, MaxRows, 5).setValues(values);
181
+
182
+ //▼マージシートへの転記結果を「入力シート(mySheet1)」の「転記処理」欄に追記する
183
+ //getRange(行、列、▲行分、■列分)
184
+ mySheet1.getRange(8, blockCol+5, MaxRows, 1).setValue("転記済");
185
+ }
186
+
187
+ //▼ダイアログMsgの表示
188
+ Browser.msgBox("「●●マージシート」への転記処理が完了しました。\\n入力シートの「転記処理」列に「転記済」表示があれば問題なく転記処理がされています。", Browser.Buttons.OK);
189
+ }
190
+
191
+
192
+
193
+
194
+ ```
195
+
196
+
197
+
198
+
199
+
200
+

1

補足情報の記載修正

2022/03/20 05:30

投稿

donguriko
donguriko

スコア30

test CHANGED
File without changes
test CHANGED
@@ -128,8 +128,8 @@
128
128
  前回回答内容をもとにコードの自力修正を試みましたが、私の知識が
129
129
  足りず自力解決できませんでした。
130
130
 
131
- そのため、コードを分解し、まずはブロック内で処理が走るよう
131
+ そのため、コードを分解し、まずはブロック内で正しく処理が走るよう
132
- 修正を試みました
132
+ 1つずつ修正を試みようと思っている次第です
133
133
  今回の問題が解決できたら、次ステップとして、
134
134
  ブロック②、③、、、とブロック間で連続して処理が走るように
135
135
  拡張させていきたいと思っています。