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

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

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

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

Q&A

解決済

1回答

3636閲覧

Pythonによるエクセル操作(数値の変換)

Mixertruck

総合スコア5

Python

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

0グッド

1クリップ

投稿2019/11/09 16:26

前提・実現したいこと

エクセルの表に記載されている数字を任意の数字に変換したいと考えています。
エクセル上で計算しても良いのですが、変換するべきファイルがいくつかあるので、Pythonでプログラムを組むのが効率的かと思い、質問させて頂きました。

発生している問題・エラーメッセージ

数字を変換する所まではできたのですが、それをエクセル上に出力することができません。
言語はPythonです。

該当のソースコード

html

1import openpyxl 2import pprint 3 4wb =openpyxl.load_workbook('file.xlsx') 5sheetnames=wb.sheetnames 6sheet = wb.active 7 8for columns in sheet["D2":"D57"]: 9 for cell in columns: 10 cell = cell.value / 109.25 11 12 13for columns_2 in sheet["E2":"E57"]: 14 for cell_a in columns_2: 15 cell_a = cell_a.value / 109.25 16 17wb.save('file.xlsx')

試したこと

html

1for columns in sheet["D2":"D57"]: 2 for cell in columns: 3 cell = cell.value / 109.25 4 columns.value = cell

columnsに計算後の数字を入れようとしてもエラーがでます('tuple' object has no attribute 'value')。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

試していませんが
cell.valueを処理した値をcellに代入しているために値が変わらないのではないでしょうか?

# cell = cell.value / 109.25 cell.value = cell.value / 109.25

これでどうでしょう?

投稿2019/11/10 02:02

編集2019/11/10 02:04
Kapustin

総合スコア1186

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

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

Mixertruck

2019/11/10 02:38

ご回答ありがとうございます。教えて頂いたコードを入力し実行しましたが、 TypeError: unsupported operand type(s) for /: 'NoneType' and 'float' とのエラーが出てしまいました。このエラーを回避すべく調べてみましたが有効策が見つかりません。 値を変更しようとするのは難しいでしょうか…。
Kapustin

2019/11/10 02:42

なるほど、値は文字列で入れる必要があるかもしれません。 cell.value = str(float(cell.value) / 109.25) という形で、数値を文字列に変換して入れたらどうでしょう?(念の為、計算前にcell.valueも数値に変換しています)
Mixertruck

2019/11/10 03:00

解決しました!本当にありがとうございます!
Kapustin

2019/11/10 03:05 編集

今試しにやってみましたが、strでなくても大丈夫ですね。。 cell.value = float(cell.value) / 109.25 だけでも大丈夫そうです。 ちなみに、対象のセルは全て数値であることは保証されていますか??
Kapustin

2019/11/10 03:05

解決したのですね!よかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問