[Python] openpyxlで列を指定してセルを取得する方法

Pythonのopenpyxlライブラリを使用して、特定の列のセルを取得するには、Worksheetオブジェクトのiter_cols()メソッド[]を使います。

iter_cols()は列ごとにセルを反復処理でき、min_colmax_colで列を指定可能です。

また、ws['A']のように列名を指定して直接取得することもできます。

例えば、ws['A']はA列全体を取得します。

この記事でわかること
  • openpyxlを使ったExcel操作の基本
  • 列を指定してセルを取得する方法
  • データのフィルタリングやソートの手法
  • 複数列のデータを一度に扱う方法
  • Excelファイルへのデータ書き込みの手順

目次から探す

openpyxlとは

openpyxlは、PythonでExcelファイル(.xlsx形式)を操作するためのライブラリです。

このライブラリを使用することで、Excelシートの作成、読み込み、編集、保存が簡単に行えます。

特に、データ分析や自動化のタスクにおいて、Excelファイルをプログラムから直接操作できるため、非常に便利です。

openpyxlは、セルの値の取得や書き込み、書式設定、グラフの作成など、多くの機能を提供しており、データ処理の効率を大幅に向上させることができます。

列を指定してセルを取得する基本的な方法

iter_cols()メソッドを使った列の取得

iter_cols()メソッドは、指定した列を反復処理するためのメソッドです。

このメソッドを使用することで、特定の列のセルを簡単に取得できます。

以下は、iter_cols()を使って列を取得するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 1列目を取得
for cell in sheet.iter_cols(min_col=1, max_col=1):
    for c in cell:
        print(c.value)  # セルの値を表示

このコードを実行すると、1列目のすべてのセルの値が表示されます。

[]を使った列の取得

[]を使うことで、列名や列番号を指定してセルを取得することもできます。

以下は、列名を使ってセルを取得するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 列名を使って取得
column_data = sheet['A']  # A列を取得
for cell in column_data:
    print(cell.value)  # セルの値を表示

このコードでは、A列のすべてのセルの値が表示されます。

iter_cols()と[]の違い

iter_cols()[]の主な違いは、取得方法と柔軟性です。

iter_cols()は、範囲を指定して複数の列を一度に取得できるのに対し、[]は特定の列名や列番号を指定して単一の列を取得します。

以下の表に、両者の違いをまとめました。

スクロールできます
メソッド特徴使用例
iter_cols()複数列を一度に取得可能sheet.iter_cols(min_col=1, max_col=3)
[]特定の列を取得sheet['A']

列番号と列名の対応関係

Excelでは、列はアルファベットで表されますが、プログラム内では列番号(1から始まる整数)で指定することが一般的です。

以下の表に、列番号と列名の対応関係を示します。

スクロールできます
列番号列名
1A
2B
3C
4D
5E

この対応関係を理解することで、列を指定してセルを取得する際に、より柔軟に操作できるようになります。

iter_cols()メソッドの詳細

iter_cols()の基本的な使い方

iter_cols()メソッドは、指定した範囲の列を反復処理するためのメソッドです。

基本的な使い方は、min_colmax_colを指定して、特定の列を取得することです。

以下は、iter_cols()の基本的な使い方を示すサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 1列目を取得
for column in sheet.iter_cols(min_col=1, max_col=1):
    for cell in column:
        print(cell.value)  # セルの値を表示

このコードを実行すると、1列目のすべてのセルの値が表示されます。

min_colとmax_colで範囲を指定する

iter_cols()メソッドでは、min_colmax_colを使って取得する列の範囲を指定できます。

これにより、特定の範囲内の列を効率的に取得できます。

以下は、2列目から3列目までを取得するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 2列目から3列目を取得
for column in sheet.iter_cols(min_col=2, max_col=3):
    for cell in column:
        print(cell.value)  # セルの値を表示

このコードを実行すると、2列目と3列目のすべてのセルの値が表示されます。

iter_cols()で複数列を取得する方法

iter_cols()を使用すると、複数の列を一度に取得することができます。

min_colmax_colを指定することで、範囲を設定できます。

以下は、1列目から3列目までを取得するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 1列目から3列目を取得
for column in sheet.iter_cols(min_col=1, max_col=3):
    for cell in column:
        print(cell.value)  # セルの値を表示

このコードを実行すると、1列目から3列目のすべてのセルの値が表示されます。

iter_cols()で値を取得する方法

iter_cols()を使用して取得したセルの値は、各セルオブジェクトのvalue属性を使ってアクセスできます。

以下は、特定の列の値を取得し、リストに格納するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 1列目の値をリストに格納
column_values = []
for cell in sheet.iter_cols(min_col=1, max_col=1):
    for c in cell:
        column_values.append(c.value)  # セルの値をリストに追加
print(column_values)  # リストの内容を表示

このコードを実行すると、1列目のすべてのセルの値がリストとして表示されます。

これにより、取得したデータを後で利用することができます。

[]を使った列の取得方法

列名を使ったセルの取得

[]を使うことで、列名を指定してセルを取得することができます。

Excelでは、列名はアルファベットで表されます。

以下は、列名を使って特定の列のセルを取得するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 列名を使ってA列を取得
column_data = sheet['A']  # A列を取得
for cell in column_data:
    print(cell.value)  # セルの値を表示

このコードを実行すると、A列のすべてのセルの値が表示されます。

列番号を使ったセルの取得

列番号を使ってセルを取得する場合、[]を使うことができます。

列番号は1から始まる整数で、Excelの列名に対応しています。

以下は、列番号を使ってB列を取得するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 列番号を使ってB列を取得
column_data = sheet['B']  # B列を取得
for cell in column_data:
    print(cell.value)  # セルの値を表示

このコードを実行すると、B列のすべてのセルの値が表示されます。

取得したセルの値を操作する方法

取得したセルの値は、通常のPythonのデータ型として扱うことができます。

これにより、値の操作や計算が可能です。

以下は、取得したセルの値を操作するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# A列の値を取得し、合計を計算する
total = 0
for cell in sheet['A']:
    if isinstance(cell.value, (int, float)):  # 数値の場合のみ
        total += cell.value
print(f'A列の合計: {total}')  # 合計を表示

このコードを実行すると、A列の数値の合計が表示されます。

取得したセルの書式やスタイルを変更する方法

取得したセルの書式やスタイルを変更することも可能です。

以下は、特定のセルのフォントスタイルを変更するサンプルコードです。

from openpyxl import load_workbook
from openpyxl.styles import Font
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# A1セルのフォントを太字に変更
cell = sheet['A1']
cell.font = Font(bold=True)  # 太字に設定
# 変更を保存
workbook.save('sample_modified.xlsx')

このコードを実行すると、A1セルのフォントが太字に変更され、変更が新しいファイルに保存されます。

これにより、Excelファイルの見た目をカスタマイズすることができます。

列の範囲を指定してセルを取得する方法

min_colとmax_colを使った範囲指定

min_colmax_colを使用することで、特定の範囲の列を指定してセルを取得することができます。

これにより、必要なデータだけを効率的に取得できます。

以下は、min_colmax_colを使って列の範囲を指定するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 1列目から3列目までを取得
for column in sheet.iter_cols(min_col=1, max_col=3):
    for cell in column:
        print(cell.value)  # セルの値を表示

このコードを実行すると、1列目から3列目までのすべてのセルの値が表示されます。

iter_cols()で特定の範囲を取得する

iter_cols()メソッドを使用すると、特定の範囲の列を簡単に取得できます。

min_colmax_colを指定することで、必要な列だけを取得することが可能です。

以下は、2列目から4列目までを取得するサンプルコードです。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 2列目から4列目までを取得
for column in sheet.iter_cols(min_col=2, max_col=4):
    for cell in column:
        print(cell.value)  # セルの値を表示

このコードを実行すると、2列目から4列目までのすべてのセルの値が表示されます。

[]で範囲を指定して取得する方法

[]を使って範囲を指定することも可能ですが、Excelの列名を使って指定する必要があります。

例えば、A列からC列までを取得する場合、以下のように記述します。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# A列からC列までを取得
for column in sheet['A:C']:
    for cell in column:
        print(cell.value)  # セルの値を表示

このコードを実行すると、A列からC列までのすべてのセルの値が表示されます。

[]を使った範囲指定は、列名を直接指定するため、視覚的にわかりやすい方法です。

応用例

複数の列を一度に取得して操作する

複数の列を一度に取得し、データを操作することができます。

以下のサンプルコードでは、1列目と2列目のデータを取得し、合計を計算します。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 1列目と2列目の合計を計算
total_col1 = 0
total_col2 = 0
for column in sheet.iter_cols(min_col=1, max_col=2):
    for cell in column:
        if cell.column == 1 and isinstance(cell.value, (int, float)):
            total_col1 += cell.value
        elif cell.column == 2 and isinstance(cell.value, (int, float)):
            total_col2 += cell.value
print(f'1列目の合計: {total_col1}, 2列目の合計: {total_col2}')

このコードを実行すると、1列目と2列目の合計が表示されます。

列のデータをフィルタリングして取得する

特定の条件に基づいて列のデータをフィルタリングすることも可能です。

以下のサンプルコードでは、A列の値が50以上のセルを取得します。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# A列の値が50以上のセルを取得
filtered_values = []
for cell in sheet['A']:
    if isinstance(cell.value, (int, float)) and cell.value >= 50:
        filtered_values.append(cell.value)
print('フィルタリングされた値:', filtered_values)

このコードを実行すると、A列の値が50以上のセルの値が表示されます。

列のデータを別のExcelファイルに書き込む

取得した列のデータを別のExcelファイルに書き込むこともできます。

以下のサンプルコードでは、A列のデータを新しいExcelファイルに書き込みます。

from openpyxl import load_workbook, Workbook
# 元のExcelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 新しいExcelファイルを作成
new_workbook = Workbook()
new_sheet = new_workbook.active
# A列のデータを新しいファイルに書き込む
for row in range(1, sheet.max_row + 1):
    new_sheet[f'A{row}'] = sheet[f'A{row}'].value
# 新しいファイルを保存
new_workbook.save('new_sample.xlsx')

このコードを実行すると、A列のデータが新しいExcelファイルに書き込まれます。

列のデータをグラフに変換する

Excelのグラフ機能を使用して、列のデータを視覚化することもできます。

以下のサンプルコードでは、A列とB列のデータを使ってグラフを作成します。

from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# グラフを作成
chart = BarChart()
data = Reference(sheet, min_col=1, min_row=1, max_col=2, max_row=sheet.max_row)
chart.add_data(data, titles_from_data=True)
# グラフをシートに追加
sheet.add_chart(chart, "E5")  # E5セルにグラフを配置
# 変更を保存
workbook.save('sample_with_chart.xlsx')

このコードを実行すると、A列とB列のデータを基にした棒グラフが新しいExcelファイルに追加されます。

列のデータをソートして取得する

列のデータをソートして取得することも可能です。

以下のサンプルコードでは、A列のデータを昇順にソートして表示します。

from openpyxl import load_workbook
# Excelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# A列のデータをリストに格納
column_values = [cell.value for cell in sheet['A'] if isinstance(cell.value, (int, float))]
# ソート
column_values.sort()
print('ソートされたA列の値:', column_values)

このコードを実行すると、A列の数値が昇順にソートされて表示されます。

これにより、データの分析や可視化が容易になります。

よくある質問

iter_cols()とiter_rows()の違いは何ですか?

iter_cols()iter_rows()は、どちらもExcelシートのデータを反復処理するためのメソッドですが、取得する方向が異なります。

iter_cols()は指定した列を反復処理し、列ごとにセルを取得します。

一方、iter_rows()は指定した行を反復処理し、行ごとにセルを取得します。

具体的には、以下のように使い分けます。

  • iter_cols(min_col=1, max_col=3):1列目から3列目までのセルを列ごとに取得
  • iter_rows(min_row=1, max_row=3):1行目から3行目までのセルを行ごとに取得

このため、データの取得方法や処理の仕方が異なるため、目的に応じて使い分けることが重要です。

列のデータを取得する際にエラーが出るのはなぜですか?

列のデータを取得する際にエラーが出る原因はいくつかあります。

主な原因は以下の通りです。

  • セルが空である:空のセルを参照しようとすると、NoneTypeエラーが発生することがあります。
  • データ型の不一致:数値を期待しているセルに文字列が含まれている場合、計算や操作を行うとエラーが発生します。
  • 範囲外の参照:指定した列や行がシートの範囲外である場合、IndexErrorが発生します。

これらのエラーを回避するためには、セルの値を取得する前に、空でないか、データ型が適切かを確認することが重要です。

列のデータを取得した後に書き込む方法は?

列のデータを取得した後に、別のセルや別のExcelファイルに書き込むことができます。

以下の手順で書き込むことができます。

  1. データを取得iter_cols()[]を使って必要なデータを取得します。
  2. 新しいExcelファイルを作成Workbook()を使って新しいExcelファイルを作成します。
  3. データを書き込む:取得したデータを新しいシートの指定したセルに書き込みます。
  4. ファイルを保存save()メソッドを使って新しいファイルを保存します。

以下は、A列のデータを新しいExcelファイルに書き込むサンプルコードです。

from openpyxl import load_workbook, Workbook
# 元のExcelファイルを読み込む
workbook = load_workbook('sample.xlsx')
sheet = workbook.active
# 新しいExcelファイルを作成
new_workbook = Workbook()
new_sheet = new_workbook.active
# A列のデータを新しいファイルに書き込む
for row in range(1, sheet.max_row + 1):
    new_sheet[f'A{row}'] = sheet[f'A{row}'].value
# 新しいファイルを保存
new_workbook.save('new_sample.xlsx')

このコードを実行すると、A列のデータが新しいExcelファイルに書き込まれます。

まとめ

この記事では、Pythonのopenpyxlライブラリを使用してExcelファイルから列を指定してセルを取得する方法について詳しく解説しました。

具体的には、iter_cols()メソッド[]を使った列の取得方法、さらに列の範囲を指定してデータを取得する方法についても触れました。

これらの知識を活用して、Excelデータの操作や分析を効率的に行うことができるでしょう。

ぜひ、実際のプロジェクトやデータ処理において、これらのテクニックを試してみてください。

  • URLをコピーしました!
目次から探す