回答編集履歴

1

回答を追記

2021/10/09 00:33

投稿

etherbeg
etherbeg

スコア1195

test CHANGED
@@ -113,3 +113,251 @@
113
113
 
114
114
 
115
115
  本番環境で実際に運用するのはまだまだ先でしょうから、今のうちにもっとコードを整理して、処理の対象や目的ごとにコードをまとめたり、変数にもっと分かりやすい名前をつけたりした方がいいと思いますよ。
116
+
117
+
118
+
119
+ ---
120
+
121
+
122
+
123
+ `Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート`
124
+
125
+ はループの中、
126
+
127
+ `for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する`
128
+
129
+ の直前に入れてください。
130
+
131
+
132
+
133
+ 修正前:
134
+
135
+ ```python
136
+
137
+ Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
138
+
139
+ Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
140
+
141
+
142
+
143
+ 1⃣for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
144
+
145
+ if ws1.cell(row=b, column=3).value is not None:#空白セルになったら終了する
146
+
147
+ break
148
+
149
+ 2⃣for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
150
+
151
+ if ws.cell(row=a, column=2).value is not None:
152
+
153
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
154
+
155
+ kensin = ws1.cell(row=b,column=2).value#セルコピー
156
+
157
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
158
+
159
+ break
160
+
161
+ wb.save('C:\book1.xlsx')
162
+
163
+ ```
164
+
165
+
166
+
167
+ 修正後:
168
+
169
+ ```python
170
+
171
+ Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
172
+
173
+
174
+
175
+ for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
176
+
177
+ if ws1.cell(row=b, column=3).value is not None:#空白セルになったら終了する
178
+
179
+ break
180
+
181
+ Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
182
+
183
+ for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
184
+
185
+ if ws.cell(row=a, column=2).value is not None:
186
+
187
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
188
+
189
+ kensin = ws1.cell(row=b,column=2).value#セルコピー
190
+
191
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
192
+
193
+ break
194
+
195
+ wb.save('C:\book1.xlsx')
196
+
197
+ ```
198
+
199
+
200
+
201
+ `if ws1.cell(row=b, column=3).value is not None:#空白セルになったら終了する`
202
+
203
+
204
+
205
+ `if ws1.cell(row=b, column=3).value is None:`
206
+
207
+ もしくは
208
+
209
+ `if ws1.cell(row=b, column=3).value == None:`
210
+
211
+ に修正してください。これはすでに指摘済みです。
212
+
213
+
214
+
215
+ 修正前:
216
+
217
+ ```python
218
+
219
+ Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
220
+
221
+
222
+
223
+ for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
224
+
225
+ if ws1.cell(row=b, column=3).value is not None:#空白セルになったら終了する
226
+
227
+ break
228
+
229
+ Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
230
+
231
+ for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
232
+
233
+ if ws.cell(row=a, column=2).value is not None:
234
+
235
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
236
+
237
+ kensin = ws1.cell(row=b,column=2).value#セルコピー
238
+
239
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
240
+
241
+ break
242
+
243
+ wb.save('C:\book1.xlsx')
244
+
245
+ ```
246
+
247
+
248
+
249
+ 修正後:
250
+
251
+ ```python
252
+
253
+ Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
254
+
255
+
256
+
257
+ for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
258
+
259
+ if ws1.cell(row=b, column=3).value is None:#空白セルになったら終了する
260
+
261
+ break
262
+
263
+ Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
264
+
265
+ for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
266
+
267
+ if ws.cell(row=a, column=2).value is not None:
268
+
269
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
270
+
271
+ kensin = ws1.cell(row=b,column=2).value#セルコピー
272
+
273
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
274
+
275
+ break
276
+
277
+ wb.save('C:\book1.xlsx')
278
+
279
+ ```
280
+
281
+
282
+
283
+ `Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート`
284
+
285
+ 及び
286
+
287
+ `Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート`
288
+
289
+ から
290
+
291
+ `+ 1`
292
+
293
+ を削除してください。
294
+
295
+ 最終行は`ws.max_row`で取得できており、`+ 1`をつける理由がありません。この事例の場合は害にはなりませんが、無駄です。
296
+
297
+
298
+
299
+ 修正前:
300
+
301
+ ```python
302
+
303
+ Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
304
+
305
+
306
+
307
+ for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
308
+
309
+ if ws1.cell(row=b, column=3).value is None:#空白セルになったら終了する
310
+
311
+ break
312
+
313
+ Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
314
+
315
+ for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
316
+
317
+ if ws.cell(row=a, column=2).value is not None:
318
+
319
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
320
+
321
+ kensin = ws1.cell(row=b,column=2).value#セルコピー
322
+
323
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
324
+
325
+ break
326
+
327
+ wb.save('C:\book1.xlsx')
328
+
329
+ ```
330
+
331
+
332
+
333
+ 修正後:
334
+
335
+ ```python
336
+
337
+ Sheet_Max2 = ws1.max_row #シートの最終行を取得する コピー元シート
338
+
339
+
340
+
341
+ for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
342
+
343
+ if ws1.cell(row=b, column=3).value is None:#空白セルになったら終了する
344
+
345
+ break
346
+
347
+ Sheet_Max1 = ws.max_row #シート最終行を取得 コピー先シート
348
+
349
+ for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
350
+
351
+ if ws.cell(row=a, column=2).value is not None:
352
+
353
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
354
+
355
+ kensin = ws1.cell(row=b,column=2).value#セルコピー
356
+
357
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
358
+
359
+ break
360
+
361
+ wb.save('C:\book1.xlsx')
362
+
363
+ ```