質問編集履歴

6

説明文追加

2021/10/09 06:55

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Python for文について
1
+ Python for文について if文について
test CHANGED
@@ -1,71 +1,53 @@
1
- 下記プログラム内容ですが、for文1⃣で個別表2フォルダ1,2て、for文2⃣でコピファイルから一行ずつ抽出、for文3⃣でセルへ追加、コピーをしているつもりです。
1
+ 下記内容で、for b in rrr 処理一つたらfor文を抜けるように、if b == bb: という処理を付けましたがうまくいきません。特にエラは出ないですが、for b in rrr の処理一周してします。
2
2
 
3
- 2⃣で一行取得し、3⃣でコピー先へ代入、上書き保存をし、一行のデータのみそれぞれのファイルに転記、追加、したいのですが、2⃣で一周した値が各ファイルに代入されてしまいます。
3
+ for bb in range(6,Sheet_Max2,1)= [5]
4
4
 
5
- これを解消する方法があれば教えてください。
5
+ for b in rrr = [6]値
6
6
 
7
- 【key = フォルダ↓↓】
7
+ if b == bb: = [5] == [6]・・・初期地
8
8
 
9
- ![イメージ説明](9237facf47fe5830b9db5a2a24ff8add.jpeg)
9
+        = [6] == [6]・・・二週目にてbreak
10
10
 
11
- 【value = ファル↓↓】
11
+ というメージなのですが、うまくいきません。
12
12
 
13
- ![イメージ説明](8375ebc8aa857101d905f8b2e4614aa2.jpeg)
13
+ どのようにしたらよろしいでしょうか。
14
14
 
15
- 【1-1 加茂 プログラム実行後】
16
15
 
17
- ![イメージ説明](c1bc6bf6cd4a6adf307c0d342bddc1e3.jpeg)
18
16
 
19
- 【1-2 寺内 プログラム実行後】
17
+ お手数おかけしますがご教授お願いいたします。
20
-
21
- ![イメージ説明](0120833259ee0dc5de4f0462197bbf68.jpeg)
22
-
23
- 「コピー元シート↓↓ 」
24
-
25
- ![イメージ説明](f96b9d2bdde69ebcf74a2d0bdc89bcee.jpeg)
26
-
27
- 【私が欲しい内容↓↓】
28
-
29
- ![![イメージ説明](2cb9653a381ecf0de6759b9f58a2f7d0.jpeg)](3d126a580a1ba0d0948cd225e8d11573.jpeg)
30
18
 
31
19
 
32
20
 
33
21
  ```Python
34
22
 
35
- #key=フォルダ value=ファイル名
23
+ Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
36
24
 
37
- 1⃣for key, value in so_dict2.items():#コピー先ファイル取得
25
+ rrr = list(range(5,Sheet_Max2,1))
38
26
 
39
-  for v in value:
40
27
 
41
-  wb = openpyxl.load_workbook(f'C:\Users\個別表2\{key}\{v}.xlsx')
42
28
 
43
-  ws = wb[sheet_name]#コピー先シート取得
29
+ for bb in range(6,Sheet_Max2,1):
44
30
 
45
-  Sheet_Max2 = ws1.max_row#シートの最終行を取得する コピー元シート
31
+ for b in rrr:
46
32
 
47
- #コピー元ファイルを取得する
33
+ if b == bb:#の行に移行したら処理終了させたい
48
34
 
49
- 2⃣for b in range(4,Sheet_Max2,1):#最初のから順番に一行ずつ確認する
35
+ Sheet_Max1 = ws.max_row#シートを取得 コピー先シート
50
36
 
51
-  if ws1.cell(row=b, column=3).value is None:#空白セルなったら飛ば
37
+ for a in range(Sheet_Max1, 0, -1):#最終行から順番一行ずつ確認
52
38
 
53
-  continue
39
+ if ws.cell(row=a, column=2).value is not None:#rowに最終行からのセル情報が順次代入される、値の入ったセルがあれば、次の処理
54
40
 
55
-  Sheet_Max1 = ws.max_row#シート最終行を取得 コピー先シート
41
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
56
42
 
57
- 3⃣for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
43
+ kensin = ws1.cell(row=b,column=3).value#セルコピー
58
44
 
59
-  if ws.cell(row=a, column=2).value is not None:
45
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
60
46
 
61
-  ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
47
+ break
62
48
 
63
-  kensin = ws1.cell(row=b,column=3).value#セルコピー
49
+ break
64
50
 
65
-  ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
66
-
67
-  break
68
-
69
-  wb.save(f'C:\Users\個別表2\{key}\{v}.xlsx')
51
+ wb.save('C:\Users\**\OneDrive\デスクトップ\1-1 可茂.xlsx')
70
52
 
71
53
  ```

5

追加説明

2021/10/09 06:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 下記プログラム内容ですが、1⃣で個別表2のフォルダ1,2を回して、2⃣でコピー元のファイルから一行ずつ抽出、3⃣でセルへ追加、コピーをしているつもりです。
1
+ 下記プログラム内容ですが、for文1⃣で個別表2のフォルダ1,2を回して、for文2⃣でコピー元のファイルから一行ずつ抽出、for文3⃣でセルへ追加、コピーをしているつもりです。
2
2
 
3
3
  2⃣で一行取得し、3⃣でコピー先へ代入、上書き保存をし、一行のデータのみそれぞれのファイルに転記、値追加、したいのですが、2⃣で一周した値が各ファイルに代入されてしまいます。
4
4
 

4

コードの挿入やり直し

2021/10/09 01:24

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
   ws = wb[sheet_name]#コピー先シート取得
44
44
 
45
-  Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
45
+  Sheet_Max2 = ws1.max_row#シートの最終行を取得する コピー元シート
46
46
 
47
47
  #コピー元ファイルの列行を取得する
48
48
 
@@ -52,7 +52,7 @@
52
52
 
53
53
   continue
54
54
 
55
-  Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
55
+  Sheet_Max1 = ws.max_row#シート最終行を取得 コピー先シート
56
56
 
57
57
  3⃣for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
58
58
 

3

追加説明

2021/10/09 01:22

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Python for文にて値を取得できない
1
+ Python for文につい
test CHANGED
@@ -1,55 +1,71 @@
1
- 下記内容で、1⃣for文一つとっきてから、2for文が一周すると思っていが、実際出力された内容を確認すると、指定した開始行の文字(可)と最終行の文字(土屋)
1
+ 下記プログラム内容ですが、1⃣で個別表2のフォルダ1,2回し、2⃣でコピー元のファイルから一行ずつ抽出3でセルへ追加、コピーをしているつもりで
2
2
 
3
- )だけが出力されており文字が抜けております。なぜこような結果になるかがわかりません。どように記したらすべて値を出力きるでしょうか
3
+ 2⃣で一行取得し3⃣でコピー先へ代入、上書き保存をし、一行データみそれぞれファイル、値追加、したのですが、2⃣一周た値が各ファイルに代入されてしまいます
4
4
 
5
- お手数おかけしますが授お願いたします
5
+ これを解消る方法あればえてください。
6
6
 
7
+ 【key = フォルダ↓↓】
8
+
7
- ※実際は、コピ先シートは複数あり、それぞれ最終行がことなるため、最終行の値を拾って最終行にコピーするような内容になっています。ですので、コピー元の値をまとめてコピー貼り付けでなくfor文で一行ずつ取得したいです。
9
+ ![イメジ説明](9237facf47fe5830b9db5a2a24ff8add.jpeg)
10
+
11
+ 【value = ファイル↓↓】
12
+
13
+ ![イメージ説明](8375ebc8aa857101d905f8b2e4614aa2.jpeg)
14
+
15
+ 【1-1 加茂 プログラム実行後】
16
+
17
+ ![イメージ説明](c1bc6bf6cd4a6adf307c0d342bddc1e3.jpeg)
18
+
19
+ 【1-2 寺内 プログラム実行後】
20
+
21
+ ![イメージ説明](0120833259ee0dc5de4f0462197bbf68.jpeg)
8
22
 
9
23
  「コピー元シート↓↓ 」
10
24
 
11
- ![コピ元シート](096100d3ee2b041cb38a5a19b6dca842.jpeg)
25
+ ![イメジ説明](f96b9d2bdde69ebcf74a2d0bdc89bcee.jpeg)
12
26
 
13
- 「コピー先シート↓↓
27
+ 【私が欲しい内容↓↓
14
28
 
15
- ![イメージ説明](0ad31e1d89838a97ac52fc31c21222a3.jpeg)
29
+ ![![イメージ説明](2cb9653a381ecf0de6759b9f58a2f7d0.jpeg)](3d126a580a1ba0d0948cd225e8d11573.jpeg)
16
30
 
17
31
 
18
32
 
19
33
  ```Python
20
34
 
21
- wb1 = openpyxl.load_workbook('C:\Users\本番1.xlsm',data_only=True)
35
+ #key=フォルダ value=ファイル名
22
36
 
23
- ws1 = wb1['検針表 (2)']#コピー元シート読込
37
+ 1⃣for key, value in so_dict2.items():#コピー先ファイル取得
24
38
 
25
- wb = openpyxl.load_workbook('C:\book1.xlsx')
39
+  for v in value:
26
40
 
27
- ws = wb['29期']#コピー先シート取得
41
+  wb = openpyxl.load_workbook(f'C:\Users\個別表2\{key}\{v}.xlsx')
28
42
 
29
- Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
43
+  ws = wb[sheet_name]#コピー先シート取得
30
44
 
31
- Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
45
+  Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
32
46
 
47
+ #コピー元ファイルの列行を取得する
33
48
 
49
+ 2⃣for b in range(4,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
34
50
 
35
- 1⃣for b in range(5,Sheet_Max2,1):#最初の行か順番に一行ずつ確認
51
+  if ws1.cell(row=b, column=3).value is None:#空白セルになった飛ば
36
52
 
37
- if ws1.cell(row=b, column=3).value is not None:#空白セルになったら終了する
53
+  continue
38
54
 
39
- break
55
+  Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
40
56
 
41
- 2⃣for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
57
+ 3⃣for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
42
58
 
43
- if ws.cell(row=a, column=2).value is not None:
59
+  if ws.cell(row=a, column=2).value is not None:
44
60
 
45
- ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
61
+  ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
46
62
 
47
- kensin = ws1.cell(row=b,column=2).value#セルコピー
63
+  kensin = ws1.cell(row=b,column=3).value#セルコピー
48
64
 
49
- ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
65
+  ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
50
66
 
51
- break
67
+  break
52
68
 
53
- wb.save('C:\book1.xlsx')
69
+  wb.save(f'C:\Users\個別表2\{key}\{v}.xlsx')
54
70
 
55
71
  ```

2

説明文追加

2021/10/09 01:19

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,107 +1,55 @@
1
- プログラム少し長くなりますが、よろくお願いいします。
1
+ 下記内容で、1⃣for文で値を一つとってきてから、2⃣for文一周すると思っていますが、実際出力された内容を確認すると、指定した開始行の文字(可)と最終行の文字(土屋)
2
2
 
3
- 下記内容で、プログラム中に印をした1⃣、2⃣、3⃣の部分を除いた状態で実行すると、各フォルダ(1,2)の中にあるエクセルファイルへ4⃣の値('料金')を指定セルへ代入することができています。1⃣、2⃣、3⃣は別シートの値をコピーし、その値を代入するために記述した内容となります。
4
-
5
- 下記内容のプログラムを実行すると、添付画像の(row=8,column=2('田'))の文字がコピー先の全ファイルにコピーされてしまいます。1⃣で(5,Sheet_Max2,1)とrowの値を指示しているのになぜそうなるのかがわかりません。
6
-
7
-
8
-
9
- 1⃣、2⃣、3⃣で何をしたいかというと、コピー元シートws1の値(行番号)を1⃣で順番に取得し、2⃣のrowの値に代入し、3⃣で別シートへ貼付けしたいという内容になります。
10
-
11
- 下記エクセルシート画像がコピー元のシートの一部となります。5行目から5.6.7行と回して2⃣で指定した値を順次取得したいです。添付画像の氏名がフォルダ名となっているため、⑤でファイルを開くたびに一行ずつ取得しコピー先のファイルに上書き保存したいという内容です。
12
-
13
- ※ファイル名は、1-1 可.1-2 寺内.1-3 土屋.1-4 田、としており、添付画像のセル順と同じ並びになるよう保存しております。また、コピー元のデータ数と、エクセルファイル数も同じ数です。コピー先ファイルを順次開いて、コピー元シートにあるエクセルの行データを上から一行ずつ順番に回してあげることで、保存先のエクセルファイルと、コピー元の氏名を結び付けたいと考えています。
14
-
15
- 添付画像row=5,column=2 値をrow=5,6,7・・・と回しいき、各ファイルを開いたときセルを代入すにはどのように記述したらよろしいでしょうか。
3
+ )だけが出力されており、間文字が抜けおります。なぜこのような結果かがわかりません。どのように記述したらすべての値を出力きるでしょうか。
16
-
17
- ⑤のfor文を一回まわすのに対して、二つのfor文をその処理の中で回したいのですがどのように記述したらよろしいでしょうか。そもそもやろうとしていることが可能なのかもよくわかっておりません。
18
4
 
19
5
  お手数おかけしますがご教授お願いいたします。
20
6
 
7
+ ※実際は、コピー先シートは複数あり、それぞれ最終行がことなるため、最終行の値を拾って最終行にコピーするような内容になっています。ですので、コピー元の値をまとめてコピー貼り付けでなくfor文で一行ずつ取得したいです。
8
+
21
- コピー元シート↓↓ 
9
+ コピー元シート↓↓ 
22
10
 
23
11
  ![コピー元シート](096100d3ee2b041cb38a5a19b6dca842.jpeg)
24
12
 
13
+ 「コピー先シート↓↓」
25
14
 
15
+ ![イメージ説明](0ad31e1d89838a97ac52fc31c21222a3.jpeg)
26
16
 
27
17
 
28
18
 
29
19
  ```Python
30
20
 
31
- #テスト用に1,2フォルダのみ抜粋
21
+ wb1 = openpyxl.load_workbook('C:\Users\本番1.xlsm',data_only=True)
32
22
 
33
- all_list2 = []#空リス作成
23
+ ws1 = wb1['検針表 (2)']#コピー元シー読込
34
24
 
35
- lists2 = [df1[0],df2[0]]#ファイル名の入ったデータフレームを代入
25
+ wb = openpyxl.load_workbook('C:\book1.xlsx')
36
26
 
37
- for i in lists2:
27
+ ws = wb['29期']#コピー先シート取得
38
28
 
39
- all_list2.append(list(i))#空リスへ代入
29
+ Sheet_Max1 = ws.max_row + 1#シー最終行を取得 コピー先シート
40
30
 
41
- folder_list2 = list(range(1,3)) #rangeにてフォルダ名を取得(1~2)
31
+ Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
42
-
43
- so_dict2 = dict(zip(folder_list2,all_list2))#keyをフォルダ名(folder_list2)、valueをファイル名(all_list2)
44
32
 
45
33
 
46
34
 
47
- #ここから作成するプログラム
35
+ 1⃣for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する
48
36
 
49
- hh = datetime.date.today().year#シート名取得のめの記述
37
+ if ws1.cell(row=b, column=3).value is not None:#空白セルになっら終了する
50
38
 
51
- sheet_name = (str(hh - 1992) + '期')#コピー先シート名取得
39
+ break
52
40
 
53
- wb1 = openpyxl.load_workbook('C:\テスト用\本番1.xlsm',data_only=True)#コピー元ブック読込,data_onlyて数式でなく、値を取得する
41
+ 2⃣for a in range(Sheet_Max1, 0, -1):#最終行から順番一行ずつ確認する
54
42
 
55
- ws1 = wb1['検針表 (2)']#コピー元シート読込
43
+ if ws.cell(row=a, column=2).value is not None:
56
44
 
45
+ ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
57
46
 
47
+ kensin = ws1.cell(row=b,column=2).value#セルコピー
58
48
 
59
- #コピー元シートの空白行を削除する記述内容
49
+ ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
60
50
 
61
- Sheet_Max = ws1.max_row + 1#シート最終行を取得
51
+ break
62
52
 
63
- for i in reversed(range(1,Sheet_Max)):#最終行から逆ループ
64
-
65
- if ws1.cell(row=i, column=3).value == None:#C列がNoneだったら
66
-
67
- ws1.delete_rows(i)#行削除
68
-
69
-
70
-
71
- #コピー先ファイル取得。コピー元からセルコピー後、貼付け
72
-
73
- ⑤for key, value in so_dict2.items():#コピー先ファイル取得
74
-
75
- for v in value:
76
-
77
- wb = openpyxl.load_workbook(f'C:\テスト用\個別表2\{key}\{v}.xlsx')
78
-
79
- ws = wb[sheet_name]#コピー先シート取得
80
-
81
- Sheet_Max1 = ws.max_row + 1#シート最終行を取得 コピー先シート
82
-
83
- #コピー元ファイルの列行を取得する
84
-
85
- Sheet_Max2 = ws1.max_row + 1#シートの最終行を取得する コピー元シート
86
-
87
- 1⃣for b in range(5,Sheet_Max2,1):#最初の行から順番に一行ずつ確認する・・・この値をrowへ代入したい
88
-
89
- if ws1.cell(row=b, column=3).value is not None:#空白セルになったら終了する
90
-
91
- break
92
-
93
- for a in range(Sheet_Max1, 0, -1):#最終行から順番に一行ずつ確認する
94
-
95
- if ws.cell(row=a, column=2).value is not None:#rowに最終行からのセル情報が順次代入される、値の入ったセルがあれば、次の処理
96
-
97
- 4⃣ws.cell(row=a+1,column=2).value = ('料金')#品名のセルに品名追加
98
-
99
- 2⃣kensin = ws1.cell(row=b,column=2).value#セルコピー
100
-
101
- 3⃣ws.cell(row=a+1,column=3,value=kensin)#セル貼付け
102
-
103
- break
104
-
105
- wb.save(f'C:\テスト用\個別表2\{key}\{v}.xlsx')
53
+ wb.save('C:\book1.xlsx')
106
54
 
107
55
  ```

1

内容が伝わりずらいため

2021/10/08 18:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,15 +8,17 @@
8
8
 
9
9
  1⃣、2⃣、3⃣で何をしたいかというと、コピー元シートws1の値(行番号)を1⃣で順番に取得し、2⃣のrowの値に代入し、3⃣で別シートへ貼付けしたいという内容になります。
10
10
 
11
- 下記エクセルシート画像がコピー元のシートの一部となります。5行目から5.6.7行と回して2⃣で指定した値を順次取得したいです。添付画像の氏名がフォルダ名となっているため、5⃣でファイルを開くたびに一行ずつ取得し上書き保存したいという内容です。
11
+ 下記エクセルシート画像がコピー元のシートの一部となります。5行目から5.6.7行と回して2⃣で指定した値を順次取得したいです。添付画像の氏名がフォルダ名となっているため、でファイルを開くたびに一行ずつ取得しコピー先のファイルに上書き保存したいという内容です。
12
12
 
13
- ※フ名は、1-1 可.1-2 寺内.1-3 土屋.1-4 田、としており、添付画像のセル順ぶようになるよう保存しておりますの、フ1-1から順番に開い上書き保存することで、添付画像資料の氏名と、保存するエクセルファイルを結び付けています。
13
+ ※ファイル名は、1-1 可.1-2 寺内.1-3 土屋.1-4 田、としており、添付画像のセル順と同じになるよう保存しております。また、コピー元データ数とエクセルァイ数も同じ数です。コピー先ファイル順次開いて、コピー元シートにあるエクセルの行データを上から一行ずつ順番に回しあげることで、保存先のエクセルファイルと、コピー元の氏名を結び付けたいと考えています。
14
14
 
15
15
  添付画像row=5,column=2 の値をrow=5,6,7・・・と回していき、各ファイルを開いたときにセルを代入するにはどのように記述したらよろしいでしょうか。
16
16
 
17
-
17
+ ⑤のfor文を一回まわすのに対して、二つのfor文をその処理の中で回したいのですがどのように記述したらよろしいでしょうか。そもそもやろうとしていることが可能なのかもよくわかっておりません。
18
18
 
19
19
  お手数おかけしますがご教授お願いいたします。
20
+
21
+ コピー元シート↓↓ 
20
22
 
21
23
  ![コピー元シート](096100d3ee2b041cb38a5a19b6dca842.jpeg)
22
24
 
@@ -68,7 +70,7 @@
68
70
 
69
71
  #コピー先ファイル取得。コピー元からセルコピー後、貼付け
70
72
 
71
- 5⃣for key, value in so_dict2.items():#コピー先ファイル取得
73
+ for key, value in so_dict2.items():#コピー先ファイル取得
72
74
 
73
75
  for v in value:
74
76