
openpyxlでエクセルファイルを編集しているんだけど、
セル内の文字を「上付き」や「下付き」にしたい…。


なるほど…。
そういうとき、ありますよね。
では今回は、「openpyxlでセル内の文字を上付き・下付きにする方法」を
できるだけわかりやすく解説いたします。
また、「文字の一部を上付き・下付きにする方法」
も解説いたしますので、最後まで読んでいってください。

openpyxlでセル内の文字を上付き・下付きにする方法
「font」属性の「vertAlign」を変更します。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import openpyxl
from openpyxl.styles.fonts import Font
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
ws['A1'].font = Font(vertAlign = 'superscript') #上付き
ws['A2'].font = Font(vertAlign = 'subscript') #下付き
wb.save('C:/Utatane/output.xlsx')
ws['A1'].font = Font(vertAlign = 'superscript') #上付き
ws['A2'].font = Font(vertAlign = 'subscript') #下付き
実行結果

事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~ブック・シートの取得
import openpyxl
from openpyxl.styles.fonts import Font
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
上記コードにて、エクセル操作に必要な「openpyxl」のインポートと、エクセルブック・シートを取得しています。
詳細は、「インストール方法」の記事をご参考ください。
コードの2行目は、今回の「上付き」「下付き」という書式設定に必要なインポートですので、忘れず記述しましょう。
上付き・下付きにする
ws['A1'].font = Font(vertAlign = 'superscript') #上付き
ws['A2'].font = Font(vertAlign = 'subscript') #下付き
上記コードにて、A1セルの文字を上付き、A2セルの文字を下付きにしています。
【コードの解説】
ワークシートを取得した変数(今回はws)を書いたら [] を書きます。
[]内には、上付き・下付きにしたい文字が入ったセルの名前を記述しましょう。
【注意点】
[]内に記述したセル名は、「’(クォーテーション)」で囲ってください。
囲わないと、変数と判断されてうまく動作しません。
[]の後ろは上付き・下付きに応じて書き分けます。
上付き:「.font = Font(vertAlign = ‘superscript’)」
下付き:「.font = Font(vertAlign = ‘subscript’)」
これで指定したセルのfont属性の「vertAlign」が変更され、上付きや下付きになります。
【属性とは?】
「属性」は体の一部のようなもので、アクセサリーを身に付けて見た目を変更するものだと思ってください。
font属性(手)にvertAlign(手袋)をはめる(superscriptは軍手、subscriptは防寒手袋)と言い換えるとわかりやすいでしょうか。
【注意点】
「Font」「vertAlign」は大文字と小文字が混在していますので注意してください。
全部小文字にすると動作しません。
ここまで、文字を上付き・下付きにする方法を解説いたしました。
では、既に上付き・下付きになっている文字を元に戻すにはどうしたらいいのでしょうか?
次項で解説いたします。
上付き・下付きになった文字を元に戻す方法
import openpyxl
from openpyxl.styles.fonts import Font
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
ws['A1'].font = Font(vertAlign = None)
ws['A2'].font = Font(vertAlign = None)
wb.save('C:/Utatane/output.xlsx')
上記コードにて、上付き・下付きになった文字を元に戻すことができます。

コード7・8行目の最後が「None」になっただけで、他は前項と同じです。
「None」を指定することで設定がリセットされ、元に戻ります。
ここまで、セル内の文字全てを上付き・下付きにする方法・元に戻す方法を解説いたしました。
しかしながら、冒頭の会話のようにセル内の文字全部ではなく、文字列の一部を上付き・下付きにしたい場合もあるかと思います。

次項をご覧ください。
文字列の一部を上付き・下付きにする方法
残念ですが、文字列の一部を上付き・下付きにするといった機能は、openpyxlにはありません。
しかしながら、別のライブラリである「Pywin32」を使えば実現可能です。

少し長いですが、コードと簡単な解説をご覧ください。
#インポート
import win32com.client
# Excelを起動
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = True
# 既存のブックを開く
workbook = excel.Workbooks.Open('C:/Utatane/input.xlsx')
sheet = workbook.Sheets(1) # 一番左のシートを取得
# 文字列の一部を上付き文字に設定
cell_a1 = sheet.Cells(1, 1) #A1セルを取得
cell_a1_characters = cell_a1.GetCharacters(3, 1) # 3文字目から1文字分を指定
cell_a1_characters.Font.Superscript = True # 上付き文字に設定
# 文字列の一部を下付き文字に設定
cell_a2 = sheet.Cells(2, 1) #A2セルを取得
cell_a2_characters = cell_a2.GetCharacters(2, 1) # 2文字目から1文字分を指定
cell_a2_characters.Font.Subscript = True # 下付き文字に設定
workbook.Save() # 上書き保存
workbook.Close() # ブックを閉じる
excel.Quit() # Excelの終了
「Pywin32」を使用するにはインストールが必要です。
簡単な使い方も下記記事で解説しておりますので、ご参考ください。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでセル内の文字を「上付き」「下付き」にする方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!