🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
openpyxl

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

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

Q&A

解決済

3回答

5991閲覧

Python openpyxlで別ブックから別ブックへのコピーペースト方法を教えてください。

yoshim62

総合スコア1

openpyxl

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

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

0グッド

0クリップ

投稿2021/02/24 01:46

編集2021/02/24 03:23

前提・実現したいこと

python初学者です。
openpyxlを使って集計表.xlsxのセル B23 〜 AE23までの値を
予約管理表.xlsmのセルD5 〜 D34 に値をコピーしたいです。

##ここに質問の内容を詳しく書いてください。

for文を使ってB23の値はD5、B24の値はD6に入力されるようにしたいのですが、
どうすれば良いでしょうか。

該当のソースコード

exl_1 = px.load_workbook('集計表.xlsx') exl_1ws = exl_1.worksheets[0] wb = px.load_workbook('予約管理表.xlsm',keep_vba=True) ws = wb.worksheets[0] for i in range(5,34): for j in range(2,28): copy = exl_1ws.cell(row=23, column=j).value ws.cell(row=i,column=4,value=copy)
ソースコード python3.9.0

試したこと

ネットで3時間ほど色々調べまして試行錯誤しましたが答えに辿りつかず・・・
縦列に同じ値しか入力されませんでした。

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

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

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

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

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

Daregada

2021/02/24 03:18

コピー元のB23~AE23には合計30セルあり、コピー先のD5~D32には合計28セルしかないのですが、どちらかの範囲が間違っていませんか?
yoshim62

2021/02/24 03:22

大変失礼しました。D32ではなく34でした。修正いたします。
guest

回答3

0

ベストアンサー

2重に繰り返し処理していることが原因です。
プログラムを書く前に、頭の中で(あるいは紙にメモを書いて)整理しましょう。

行のデータを列のデータにコピーするとはいえ、1次元のデータなのですから、繰り返しは1重でいい。

30個のセルをコピーするので、ひとつの変数iをrange(30)で0~29まで変化させます。
コピー元とコピー先のセルの位置は、それぞれのcellの引数の中で計算します。

Python

1import openpyxl as px 2 3exl_1 = px.load_workbook('集計表.xlsx') 4exl_1ws = exl_1.worksheets[0] 5 6 7wb = px.load_workbook('予約管理表.xlsm', keep_vba=True) 8ws = wb.worksheets[0] 9 10for i in range(30): 11 cell_value = exl_1ws.cell(row=23, column=2 + i).value 12 ws.cell(row=5 + i, column=4, value=cell_value) 13 14wb.save('予約管理表.xlsm')

投稿2021/02/24 03:32

Daregada

総合スコア11990

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

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

yoshim62

2021/02/24 03:38

試して見たら出来ました。ありがとうございます。 たしかに少し考えてみたらわかることでした。次から何かしらの物に書いて頭の中を整理する癖をつけます。アドバイスありがとうございました。
guest

0

以下に修正してください。

python

1for i in range(5,34): 2 copy = exl_1ws.cell(row=23, column=i-3).value 3 ws.cell(row=i,column=4,value=copy) 4

投稿2021/02/24 03:32

ppaul

総合スコア24670

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

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

0

こういうことですか?

Python

1for j in range(2,28): 2 i = j + 3 3 copy = exl_1ws.cell(row=23, column=j).value 4 ws.cell(row=i,column=4,value=copy)

投稿2021/02/24 03:32

jinoji

総合スコア4592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問