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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

openpyxl

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

3998閲覧

python openpyxlで複数行 n行単位で繰り返しはできますか?

dub

総合スコア23

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

openpyxl

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/07/25 23:17

excel のシートで 複数行にわたって 取得項目があり、それを1行毎にではなくて、n行毎に繰り返して取得したいのですが、いくら探しても 「複数行毎に繰り返し」する関数や記事が見当たりませんでした。

openpyxl では出来ないのでしょうか?  元データのセルの連結・結合が多くてpandasのdataframeを使うのは難しいと感じたのでopenpyxlで処理したいと思いました

例 下記のように 3行ずつ 同じ項目が繰り返されています。
(実際のデータは セルの連結が多く、1行ずつチェックしてプログラムで判断するのが難しい)
なお、位置も実際はもう少し複雑です

A行B行C行
A1(商品名)B1C1
A2B2(コード)C2
A3B3C3(価格)
A4(商品名)B4C4
A5B5(コード)C2
A6B6C6(価格)

複数行ごとにcsvで出力したい

商品名商品コード価格
A1(商品名)B2(コード)C3(価格)
A4(商品名)B5(コード)C6(価格)

python

1from openpyxl import Workbook 2from openpyxl import load_workbook 3wb='./****.xlsx' 4 5 6wb = load_workbook(item) 7ws1 = wb['Sheet1'] 8alchohol=ws1['B3'].value 9 10#最初の1単位(3行ずつの最初) 11item_name=ws1['a1'].value 12item_code=ws1['b2'].value 13item_price=ws1['c3'].value

わからないこと。任意の複数行毎にfor文を回せるのでしょうか?

自分で考えたこと
item_name は n行単位が3行毎だとすると A1 A4 A7 A10 を順次取得したいので
3ずつ 数字を足して for文で回せればいいでは?と思ったのですが、その方法論が全く浮かびません

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

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

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

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

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

guest

回答1

0

ベストアンサー

単純にはrange関数の第3引数で増分を指定するでしょう。

python

1for i in range(1, 11, 3): 2 print(i)
1 4 7 10

知らなくても、調べる知識がなくても、

python

1for i in range(4): 2 print(i*3+1)

で同じ結果は得られます。

投稿2021/07/25 23:57

quickquip

総合スコア11038

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

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

dub

2021/07/26 03:26

ありがとうございます!excelでn行毎に繰り返す関数を見つけた後だったので、openpyxlでも同じような関数ばかりを探してしまって解決できませんでした。 それと、セルの指定も ws['A1']とセル名の指定でしていたので、セルの位置指定で、位置の値をfor文で回すことに頭がいきませんでした。 下記のように解決しました for i in range(1,12,3): item_name=ws1.cell(i,1).value item_code=ws1.cell(i+1,2).value item_price=ws1.cell(i+2,3).value print(item_name) print(item_code) print(item_price)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問