Excelで隠した行もPythonで値を読むと通常どおり取り出されます。画面では見えていない行を含めて集計し、利用者が見ている合計とずれる場合があります。
明示的に非表示にされた行を除外したいなら、openpyxlのrow_dimensionsにあるhiddenを見て、集計対象を選びます。ただし、非表示の状態と、業務上の集計対象は別の条件です。隠れているから除外するという規則でよいかも確認します。
非表示にした三行目を除外
次は見出しと三明細を持つ架空のシートです。三行目の200だけを非表示にします。全行の合計と、非表示フラグが付いていない行の合計を比べます。
from openpyxl import Workbook
book = Workbook()
sheet = book.active
sheet.append(["ID", "金額"])
sheet.append(["A", 100])
sheet.append(["B", 200])
sheet.append(["C", 50])
sheet.row_dimensions[3].hidden = True
all_total = 0
visible_total = 0
excluded = []
for row in sheet.iter_rows(min_row=2, max_row=4):
row_number = row[0].row
amount = row[1].value
all_total += amount
if sheet.row_dimensions[row_number].hidden:
excluded.append(row_number)
continue
visible_total += amount
print("全行の合計:", all_total)
print("非表示を除く合計:", visible_total)
print("除外した行:", excluded)
assert all_total == 350 and visible_total == 150
assert excluded == [3]
book.close()
全行では350、非表示を除くと150になります。Windows・Python 3.12.10・openpyxl 3.1.5で、行のフラグと集計値を確認しました。Excel画面や実帳票のフィルター結果を確認した例ではありません。
実ファイルでは明細の開始行と終了行を確かめてから処理します。見出しや合計行まで同じ列の数値として足すと、非表示行の扱いが正しくても集計結果はずれます。
フィルター設定を評価する例ではない
openpyxlはAutoFilterの条件をファイルへ設定できますが、その条件に従って行を選別し、非表示へする処理を自動で実行するわけではありません。Excelなどで適用する部分とは分かれます。
そのため、フィルターの条件が書かれたブックを読んだだけで、Excelの画面と同じ行がhiddenに反映されていると決めつけないでください。保存状態も含め、必要な行のフラグを確かめる必要があります。
「部門がAの行を集計する」という業務条件なら、表示状態へ依存させず、部門列の値で抽出する方が処理の意味を説明しやすくなります。今回の例は保存された非表示フラグそのものを使う場面です。
除外した理由を残す
集計結果だけを返すより、元の件数と除外した行番号を残すと、差を説明できます。利用者が行を非表示にしたことを忘れていても、確認する場所が分かります。
グループを折りたたんだ表や、複数シートを使う帳票では、何を表示行とみなすかを追加で決める必要があります。最初は一シートの小さなコピーで、値、行番号、hidden、採用するかを並べて見比べます。
非表示を解除して保存し直す処理は、このコードに含みません。元帳票を変えず、採用した条件を結果へ添えるところから始められます。
セルの読み方はopenpyxl入門、合計を確かめる方法はCSV集計の基本で確認できます。
参考資料
RowDimensionとフィルターの公式資料を2026年11月1日に確認しました。
