この記事でわかること
- セルへの書き込み方法がわかる!
- 範囲に一撃で値を入れる方法がわかる!
- コピペの方法がわかる!
- 数式の書き込み方法がわかる!

ゆーや
openpyxlというモジュールを使っていくよ!
Excelへの値の書き込み
セルをアルファベット+数字で指定して書き込み(例:A1)
from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
# デフォルトのシートを取得
ws = wb.active
# データを書き込む
ws["A1"] = "A1に値を入れる"
# Excelファイルを保存
wb.save("sample.xlsx")


ゆーや
Excelのセル指定といえばアルファベット+数字だよね!
ws[“B3”]のような指定ができるよ!
セルを数字で指定(行,列)
from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
# デフォルトのシートを取得
ws = wb.active
# データを書き込む
ws.cell(row=1, column=1, value="(1, 1)")
# Excelファイルを保存
wb.save("sample.xlsx")


ゆーや
rowで何行目か、columnで何列目かを指定できるよ!
値はvalueで好きな値を設定してみよう!
範囲を指定して、文字を書き込む
from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
ws = wb.active
# 範囲を指定して文字を書き込む
start_row = 1 # 開始行
end_row = 3 # 終了行
start_col = 1 # 開始列
end_col = 3 # 終了列
value = "Hello"
for row in range(start_row, end_row + 1):
for col in range(start_col, end_col + 1):
ws.cell(row=row, column=col, value=value)
# Excelファイルを保存
wb.save("sample.xlsx")


ゆーや
セルを数値で指定できることを利用すれば、
for文で、ある範囲に値を書き込むことは簡単だね!
範囲を指定して、文字を書き込む(iter_rows文)
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# iter_rowsを使用して値を書き込む
for row in ws.iter_rows(min_row=3, max_row=10, min_col=2, max_col=5):
for cell in row:
cell.value = 'iter_rows'
wb.save('sample.xlsx')


ゆーや
iter_rowsでは、min_row(最小行数),max_row(最大行数),min_col(最小列数),max_col(最大列数)をしてすることで、範囲を指定できるよ!
リストを使って値を書き込む
from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
ws = wb.active
# 行にデータを追加
ws.append(["Name", "Age", "City"])
ws.append(["Alice", 30, "New York"])
ws.append(["Bob", 25, "Los Angeles"])
# Excelファイルを保存
wb.save("sample.xlsx")


ゆーや
Worksheetオブジェクトのappendメソッドを使えば、
リストを上から順番に書き込むことができるよ!
Excelの関数を書き込む
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# 数式を書き込む
ws['A1'] = 10
ws['A2'] = 20
ws['A3'] = 30
ws['A4'] = '=SUM(A1:A3)'
wb.save('sample.xlsx')


ゆーや
A4の値が「=SUM(A1:A3)」となっているし、Excelの表示上は
「60」となっていて、計算が出来てる!
数式は特に意識せず、書き込めばいいんだね!
コピペで書き込む
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# 値を書き込む
ws['A1'] = 'Original'
# コピー&ペースト
ws['B1'] = ws['A1'].value
wb.save('sample.xlsx')


ゆーや
セル.valueで値が取得できるので、あとはその値を他のセルに書き込むだけ!
条件付きで値を書き込む
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# データを書き込む
for row in range(1, 6):
for col in range(1, 6):
if row % 2 == 0:
ws.cell(row=row, column=col, value='Even Row')
wb.save('sample.xlsx')

ゆーや
for文とif文をうまく組み合わせれば、自由にセルに値を詰めていくことができるよ!
複雑な要件はこれらを組み合わせよう!
コメント