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

回答編集履歴

2

コメントの質問に対する回答の追記

2025/06/07 08:14

投稿

hiroki-o
hiroki-o

スコア1440

answer CHANGED
@@ -66,4 +66,24 @@
66
66
  print(f"エラー: シート '{e}' が存在しません。")
67
67
  except Exception as e:
68
68
  print(f"予期せぬエラー: {e}")
69
- ```
69
+ ```
70
+ (コメントの質問に対する追記)
71
+ ```
72
+ if (row[3].value == 1 and
73
+ (row[6].value == 10 or
74
+ row[6].value == 11 or
75
+ row[6].value == 12) and
76
+ 20000 <= row[7].value and
77
+ row[7].value <= 20100 and
78
+ row[8].value == 1):
79
+ ```
80
+
81
+ ```
82
+ if (row[3].value == 1 and
83
+ 10 <= row[6].value and
84
+ row[6].value <= 12 and
85
+ 20000 <= row[7].value and
86
+ row[7].value <= 20100 and
87
+ row[8].value == 1):
88
+ ```
89
+ で。質問の意味が違っていたら、コメントしてください。

1

回答の追記

2025/06/04 17:47

投稿

hiroki-o
hiroki-o

スコア1440

answer CHANGED
@@ -3,4 +3,67 @@
3
3
  - target_sheet.max_rowは1開始なので、26行目以降のif文が実行されていません。
4
4
  - そのif文の中で、row、data8_value、values、row_numが未定義(値が無い)です。
5
5
 
6
- 上記を見直してみてください。
6
+ 上記を見直してみてください。
7
+ (追記)
8
+ 作ってみました。
9
+ ```
10
+ import openpyxl
11
+ import os
12
+
13
+ # Excelファイルのパス
14
+ file_path = r"C:\Users\ozawa\Documents\python練習コード.xlsx"
15
+
16
+ # ファイルの存在を確認
17
+ if not os.path.exists(file_path):
18
+ print(f"エラー: ファイル '{file_path}' が存在しません。")
19
+ exit()
20
+
21
+ try:
22
+ # 読み込み
23
+ workbook = openpyxl.load_workbook(file_path)
24
+
25
+ # コピー元シートの取得
26
+ source_sheet = workbook["データ一覧"] # シート名は必要に応じて変更
27
+
28
+ # コピー先シートの作成
29
+ if "抽出結果" not in workbook.sheetnames:
30
+ target_sheet = workbook.create_sheet("抽出結果")
31
+ header = [cell.value for cell in source_sheet[1]] # ヘッダー行をコピー
32
+ target_sheet.append(header)
33
+
34
+ # 変更ここから
35
+ target_sheet = workbook["抽出結果"]
36
+
37
+ # コピー元シートの読み取り
38
+ it = source_sheet.iter_rows(min_row = 2, min_col = 2)
39
+
40
+ # 条件に合う行をコピー先シートにコピー
41
+ for row in it:
42
+ # データ4→1
43
+ # データ7→10
44
+ # データ8→20000~20100
45
+ # データ9→1
46
+ if (row[3].value == 1 and
47
+ row[6].value == 10 and
48
+ 20000 <= row[7].value and
49
+ row[7].value <= 20100 and
50
+ row[8].value == 1):
51
+
52
+ # コピー先の行インデックス
53
+ i = target_sheet.max_row + 1
54
+
55
+ # コピー
56
+ for cell in row:
57
+ target_sheet.cell(row = i, column = cell.col_idx).value = cell.value
58
+ # 変更ここまで
59
+
60
+ # 保存
61
+ workbook.save(file_path)
62
+
63
+ print("抽出とコピーが完了しました。")
64
+
65
+ except KeyError as e:
66
+ print(f"エラー: シート '{e}' が存在しません。")
67
+ except Exception as e:
68
+ print(f"予期せぬエラー: {e}")
69
+ ```