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

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

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

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

1回答

1525閲覧

リストを上から順に120個ずつExcelシートに転記したい

so_men

総合スコア4

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

0グッド

0クリップ

投稿2021/05/26 09:14

編集2021/05/26 13:20

リストを上から120個ずつ1シートずつ反映していく動作を1280回繰り返し行うことを実現させたいです。

現状Excelの1シート目にリストを全て反映させることができるのですが、1シート目は1~120番まで、2シート目は121~240番までというように「120個反映させたら次のシートに反映する」ことができない状態です。

■2021_data.xlsx
![イメージ説明]

■反映イメージ
イメージ説明

#データ格納先のエクセルワークブックを読み込む wb1 = openpyxl.load_workbook("1280シート.xlsx") ws = wb1.active #格納する元のデータのエクセルを読み込む wb2 = openpyxl.load_workbook("2021_data.xlsx") sheet = wb2["1;q1_1_1~q2_120_1"] t=2 for row in sheet.iter_rows(min_row=2): # 行からセルを1個ずつ取得し、処理をする for cell in row: #リストを文字型に変換して分割 if ',' in str(cell.value) : l = str(cell.value) op = l.split(',') for k in range(2): ws = wb1.worksheets[k] s1 = 'B' B =s1 + str(t) s2 = 'C' C = s2 + str(t) s3 = 'D' D = s3 + str(t) s4 = 'E' E = s4 + str(t) s5 = 'F' F = s5 + str(t) ws[B]= op[0] ws[C]= op[1] ws[D]= op[2] ws[E]= op[3] ws[F]= op[4] t=t+1

すみませんが、よろしくお願いいたします。

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

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

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

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

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

meg_

2021/05/26 11:07

> 現状Excelの1シート目にリストを全て反映させることができるのですが 質問のコードが実際のコードでしょうか? (Excelファイルを読み込む部分等がなく動作がよく分かりませんでした)
so_men

2021/05/26 13:25

コメントありがとうございます!情報追加させていただきました。カンマ区切りのデータを分割してリスト化したものをexcelに反映したい流れになっております、。よろしくお願いいたします。
so_men

2021/05/27 02:10

>質問のコードが実際のコードでしょうか? 実際のコードになります!
guest

回答1

0

list[0], list[1], list[2] ... をイテレーターにすると
ページを跨いで次の番号から取り出せます。

python

1it = iter(range(30)) # 30件のデータ 2 3for page_idx in range(3): # ページ 4 print(f"index {page_idx}:") 5 for idx, v in zip(range(12), it): # 12件ずつ 6 print(f" {v}")

range() の部分は、件数分の対応するセルのアドレスにすると、
コードがより簡潔になって良いかもしれません。

python

1# 変数t の扱いが解らないので推測しての例ですが 2# B2,C2,D2,E2,F2, B3,C3,D3,E3,F3, ... 3 4def gen_addr(): 5 for row in range(2, 4+1): # [2, 3, 4] 6 for column in ["B", "C", "D", "E", "F"]: 7 yield f"{column}{row}" 8 9 10it = iter(range(30)) 11for addr, value in zip(gen_addr(), it): 12 print(f" {addr}: {value}") 13

他の方法: 一定件数ずつ分割するのは、
イテレーターとzip()関数を使ったイデオムがあります。

python

1def chunk(iterable, length): 2 """ 3 >>> list(chunk(range(10), length=3))) 4 [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, None, None]] 5 6 """ 7 from itertools import zip_longest 8 return zip_longest(*[iter(iterable)]*length) 9 10 11for i, rows in enumerate(chunk(range(30), length=12)): 12 print(f"index {i}:") 13 for value in rows: 14 if value is None: 15 break 16 print(f" {value}")

txt

1 2index 0: 3 0 4 1 5 2 6 3 7 4 8 5 9 6 10 7 11 8 12 9 13 10 14 11 15index 1: 16 12 17 13 18 14 19 15 20 16 21 17 22 18 23 19 24 20 25 21 26 22 27 23 28index 2: 29 24 30 25 31 26 32 27 33 28 34 29 35

投稿2021/05/26 11:01

teamikl

総合スコア8664

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

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

so_men

2021/05/26 13:29

コメントありがとうございます!詳しく内容確認させていただき試してみます!ご丁寧にありがとうございました。非常に助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問