LoginSignup
1

More than 3 years have passed since last update.

エクセルの名前・セル範囲を Python VBAで読み込む

Last updated at Posted at 2020-05-19

エクセルの名前で定義されたセル範囲を読みこむ Python VBA

作業イメージ

1,エクセルにの名前で定義されたセル範囲に 開始日付・終了日付、プルダウンでの選択項目などの情報がある
2,エクセルの名前で定義された範囲は2.3行程度
3,店舗ごとの繰り返し処理など多量のデータはシートから読み込む 以前のメモ
4,pythonはOpenPyxLモジュール を使っている
5,スクレイピングに必要なデータはエクセルから読みこむとする

python でエクセルの名前で定義されたセル範囲を読み込む

エクセルの名前は「テスト用名前範囲 」
エクセルファイル名は 「テスト.xlsx」 とする
ブックレベルの名前を使うものとする(シートレベルで同じ名前のないように)

エクセルの名前のセル範囲を取得する
import openpyxl
wb=openpyxl.load_workbook('テスト.xlsx')
my_range = wb.defined_names['テスト用名前範囲']
dests = my_range.destinations
cells = [] 
for title, coord in dests:  #titleにはシート名 がとれています。
    ws = wb[title]
    cells.append(ws[coord]) 
 C=[]
 for row in cells:
     for aa in row:
         C.append([col.value for col in aa])

C はリストのリストになっているのでエクセル名前範囲の一番左上のセルは
C[0][0] で使えます。
名前範囲が小さいときはこれで結構使えます。

エクセルVBAで名前で定義されたセル範囲を読み込む

Variant型変数にセル範囲を入れるとC(1,1) のように使えます。
pythonと違い 1から始まります。
エクセルは同時にたくさんのファイルを開いたり、運用がぐちゃぐちゃのことが多いので
ブック→シート→名前で指定した方が安心です。

エクセルの名前の定義を取得

Dim C As Variant
'メニューシートにテスト用名前範囲がある
C = ThisWorkbook.Sheets("メニュー").Range("テスト用名前範囲")

C(1, 1)で一番左上セルの値を取得できます。

エクセルの名前をこまごまと読み込めたらスクレイピングの運用が楽になります。

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
1