質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

550閲覧

Pythonを用いてExcelの列の特定の数字が2回以下続いた場合、空欄にするプログラムを作成したい

Malbatross

総合スコア6

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/07 08:08

前提・実現したいこと

作成してあるExcelファイルのD列を取得して特定の値(今回は60.6)が2回以下続いた場合は空欄にするプログラムを作成したいです。
そして空欄にした値をF列に書き込みたいです。

例:
D列  F列
5.4  5.4
50.5  50.5 
12.5 12.5
60.6 60.6
60.6 60.6
60.6 60.6
60.6 60.6
48.5 48.5
60.6
60.6
41.2 41.2
60.6
45.9 45.9

例のようにD列から右のようなF列にしたい。
プログラミング初心者なため助言をいただけると嬉しいです。

該当のソースコード

Python

1from openpyxl import load_workbook 2 3# Excelファイルのロード 4excel_path = 'test.xlsx' 5workbook1 = load_workbook(filename=excel_path, data_only=True) 6ws = workbook1.active 7 8# シートを取得 9sheet1 = workbook1['sheet1'] 10 11lastrow = sheet1.max_row 12 13r = 0 14 15for j in range(2, lastrow + 1): 16 #  D列のセル取得 17 h = sheet1['D' + str(j)].value 18 if h == 60.6: 19 r += 1 20 if r >= 3: 21 sheet1['F' + str(j)].value = h 22 print(h) 23 elif r <= 2: 24 pass 25 else: 26 r = 0 27 sheet1['F' + str(j)].value = h 28 29 30# 作成したExcelファイルを保存する 31workbook1.save('test.xlsx') 32 33# ロードしたExcelファイルを閉じる 34workbook1.close()

試したこと

If文を用いて条件分岐を試してみたが上手くいかないです。
現状上記のプログラムを実行するとD列の値をF列にコピペするのみとなっており、
希望通りの動き方をしていません。
助言をお願い致します。

補足情報(FW/ツールのバージョンなど)

python 3.8.10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2021/09/07 08:51

r += 1 print(r) r = 0 print(r) print(h) のようにデバッグのためのprintを追加してみて、実際にはどのような挙動になっているのか確認してみてください。
ikapy

2021/09/07 09:10

matherさんの通りですが、質問者さんの立ち位置により異なるとは思いますが、学生さん・総務課などの一過性の人々でなく、pythonに相当程度付き合わなければならないのであれば、pycharm(僕のお気に入り)などのIDEを入れてデバグ術の習得し、IDEでデバグすることをお勧めします。
Malbatross

2021/09/07 09:38

matherさん助言ありがとうございます。さっそく確認してみまして、実際に出てきた数値がExcelの数値と異なっていることに気が付きました。自己解決できそうです。ありがとうございました。
Malbatross

2021/09/07 09:39

ikapyさん助言ありがとうございます。学生の身ですがPythonで自動化することにはまっているため、早速インストールしました。pycharm使い込んで慣れていきたいと思います。ありがとうございました。
guest

回答1

0

自己解決

from openpyxl import load_workbook

Excelファイルのロード

excel_path = 'test.xlsx'
workbook1 = load_workbook(filename=excel_path, data_only=True)
ws = workbook1.active

シートを取得

sheet1 = workbook1['sheet1']

lastrow = sheet1.max_row

r = 0

for j in range(2, lastrow + 1):
#  D列のセル取得
h = sheet1['D' + str(j)].value
if h == 60.59999999999999:
r += 1
if r >= 3:
sheet1['F' + str(j)].value = h
print(h)
elif r <= 2:
pass
else:
r = 0
sheet1['F' + str(j)].value = h

作成したExcelファイルを保存する

workbook1.save('test.xlsx')

ロードしたExcelファイルを閉じる

workbook1.close()

投稿2021/09/07 09:41

Malbatross

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問