openpyxlで編集した資料を提出したら、
「アクティブセルはA1にしておいてくれ。編集している途中に思えてしまうから」
って怒られた…。
openpyxlを使って、編集のついでにA1セルをアクティブにする方法は無いの?
あります!
簡単にできる方法を紹介いたします!
openpyxlを使ってアクティブセルを変更する方法を
Python歴3年の私が、できるだけわかりやすく解説し、解決に導きます。
openpyxlを使ってアクティブセルを変更するには
以下3つの指定が必要です。
- アクティブセルIDを指定する
- 選択セルを指定する
- アクティブセルを指定する
まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws.sheet_view.selection[0].activeCellId = None
ws.sheet_view.selection[0].sqref = 'A1'
#ws.sheet_view.selection[0].activeCell = 'A1'
wb.save('input.xlsx')
ws.sheet_view.selection[0].activeCellId = None
ws.sheet_view.selection[0].sqref = 'A1'
#ws.sheet_view.selection[0].activeCell = 'A1'
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
解説
アクティブセルを変更する
冒頭でも触れましたが、アクティブセルを変更するには、以下3つの指定が必要です。
- アクティブセルIDを指定する
- 選択セルを指定する
- アクティブセルを指定する
1つずつ見ていきましょう。
アクティブセルIDを指定する
まずはアクティブセルIDを指定します。
「ID」とか書かれていますが、あまり深く考えなくて大丈夫です。
見本では下記のように記述しました。
>>6.ws.sheet_view.selection[0].activeCellId = None
アクティブセルをA1に変更するだけなら、右辺は「None」で大丈夫です。
アクティブセルをA1以外にする場合でも、基本「None」で大丈夫です。
というか私は「None」以外したことがありません。
まだまだ経験不足なのかもしれませんが…。
【 ワークシート変数.sheet_view.selection[0].activeCellId = None 】
選択セルを指定する
次に選択セルの指定です。
選択セルとは何でしょうか?
今回の場合、「選択セル」=「アクティブセル」だと思ってください。
ですので選択セルは、今回まさに移動させたいセル(A1)のことになります。
(選択セルの詳細は後述)
見本では下記のように記述しました。
>>7.ws.sheet_view.selection[0].sqref = ‘A1’
右辺は「A1」と記述してください。
【 ワークシート変数.sheet_view.selection[0].sqref = ‘選択セル‘ 】
アクティブセルを指定する
最後にアクティブセルを指定します。
【 ワークシート変数.sheet_view.selection[0].activeCell = ‘アクティブセル’ 】
選択セルを指定する時にも触れましたが、
アクティブセルをA1に変更する場合、「アクティブセル」=「選択セル」となります。
そのため、アクティブセルの指定は不要です。
見本では下記のように記述しましたが、不要ですので「#」をつけてコメントにしています。
>>8.#ws.sheet_view.selection[0].activeCell = ‘A1’
えっ?アクティブセルをA1にしたいのに、
アクティブセルの指定は不要ってどういうこと?
そう思いますよね~
その疑問を解決するために、「選択セル」と「アクティブセル」の違いを説明いたします
「選択セル」と「アクティブセル」の違い
「選択セル」と「アクティブセル」の違いを説明するために、セルを範囲選択してみましょう。
上図での「選択セル」は「B2~D3」です。
まさに選択されているセルですね。
では、「アクティブセル」とはどこのことなのでしょうか。
「アクティブセル」は選択範囲の左上で色が変わっている「B2」セルのみとなります。
選択セルの中でアクティブなセル、つまり選択セルの中の「リーダー」だと思ってください。
選択セルが単一(B1のみ)の場合は、リーダーになれるのが自分しかいないので、
「選択セル=アクティブセル」となります。
前項で「A1のみ」をアクティブセルにした際に「選択セル=アクティブセル」と説明したのはこういう理由があったからです。
「選択セル」をB2~D3、「アクティブセル」をB2にしたい場合のコードは、下記のように記述してください。
ws.sheet_view.selection[0].activeCellId = None
ws.sheet_view.selection[0].sqref = 'B2:D3'
ws.sheet_view.selection[0].activeCell = 'B2'
少しだけ難易度は上がりますが、全シートのアクティブセルをA1にする方法があります。
下記記事で解説しておりますので、興味のある方はご参考ください。
また、関連記事として、「アクティブシートを変更する方法」を解説したものがございます。
よろしければ、こちらもご覧ください。
その他の解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
開いていなければ、コンピューターを再起動して再度トライしてみましょう。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlを使ってアクティブセルを変更する方法を解説いたしました。
「アクティブセルIDの指定」「選択セルの指定」「アクティブセルの指定」3つセットで覚えておいてください。
最後までお読みいただき、ありがとうございます。