3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでExcel操作:特定文字の行数・列数取得

Last updated at Posted at 2021-11-13

Excelシート内の特定文字の行数・列数を取得しよう

  • 業務上、Excelシート内の行数や列数が追加・削除されることが割と頻繁にある。
  • PythonでExcelを読み込む際にその都度、行数や列数を指定し直さないといけない。

方針

特定の文字を検索取得して、その文字のセル番地、つまり行数・列数を取得する。
・・・もちろん、その特定の文字がシートから抹消されることがあればこれも意味なくなるので、重要な文字をターゲットにしてくださいね!!!

開発環境

 Jupyter lab
 Python3.9.6
 Windows

実施内容

題材として「経産省の統計資料」を抜粋し、Excelに一部を転記。
今回は事例として国内用という文字の行数と列数を取得する例を紹介する。
「国内用」のセル番地:(M10), (10行,13列) を取得してくる。
以下、黄色塗りつぶし箇所。

以下イメージ写真
image.png

特定文字の行数・列数取得
#必要ライブラリのインポート
import openpyxl 
# openpyxlを使ってエクセルファイルを開く
workbook = openpyxl.load_workbook("~~ファイルを指定してください~~")
# シートを取得,シート名はSheet1
ws = workbook["Sheet1"]
# target_valueが一致するセルの座標を検索
# 100行100列の中に探したい文字列があるとして設定
for r in ws.iter_rows(max_row=100, max_col=100):
# 列を一つずつ探索
    for c in r:
    # もしc.valueがtarget_valueと一致したらその行番号を返す
        if c.value == "国内用":
             #セル番地を指定する:M10
            cell_nloc=c.coordinate
             #行数のみcell_nloc[1]を取得に格納
            cell_row_n=openpyxl.utils.cell.coordinate_from_string(cell_nloc)[1]
       #列数のみをcell_nloc[0]取得し、アルファベットから数字にする
            cell_col_m=openpyxl.utils.column_index_from_string(cell_nloc[0])
            
print("セル番地:"+ cell_nloc)
print("セル行番号:"+ str(cell_row_n))
print("セル列番号:"+ str(cell_col_m))

---output---
セル番地:M10
セル行番号:10
セル列番号:13

解説

  1. cordinateで特定文字のセル番地をM10のようにアルファベット+数値で取ってくる。
  2. openpyxl.utils.cell.coordinate_from_stringでM10をタプル形式で("M", 10)として列と行を別々に取り出せるようにする。
  3. openpyxl.utils.column_index_from_stringで列名アルファベット:Mを列番号:13に変換する。
3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?