エクセルの内部データから容量確認、画像の差し替え等を行う方法(7zipの紹介)

VBAアドベントカレンダー

これは「Excel Advent Calendar 2025」の21日目の記事です。

Excel-Fun.xls* for Excel Advent Calendar 2025 - Adventar

adventar.org

今回紹介する内容

エクセルファイルの内部データを閲覧して、次のことを確認する方法を紹介します。

  • ファイル容量の内訳を知る方法
  • 画像の差し替え
  • CRCの確認(ファイルの同一の比較)

7zip無しで内部データを確認する方法

今回紹介するのは7zipというソフトを紹介するのですが、その前に7zipを使わない方法を紹介します。

拡張子zipに変更

まず、拡張子を表示する方法です。
適当なフォルダを開いて「表示」→「ファイル名拡張子」のチェックを付けると、エクセルのファイル名に「xlsx」や「xlsm」のような拡張子が表示されます。

拡張子の表示方法
拡張子の表示方法

エクセルファイルを破損させてもいいように念のため、ファイルをコピー取っておいてください。
拡張子が「xlsx」や「xlsm」の場合は、拡張子を「zip」に変更すると、
「拡張子を変更すると、ファイルが使えなくなる可能性があります。変更しますか?」という警告がでるので「はい」を選択します。
(拡張子が「xls」の場合は、この方法は使えないので、予めエクセルで開いて名前を付けて保存で「xlsx 」か「xlsm」に保存しなおしてから 、実行してください)

拡張子の変更

zipファイルを右クリックして「プログラムから開く」→「エクスプローラ」を選択すると、zipファイルの中身をエクスプローラ(フォルダ)で閲覧することができます。

zipフォルダをエクスプローラで開く
zipフォルダをエクスプローラで開く

エクスプローラのデメリット

エクスプーラでzipファイルの中身を閲覧している状態で、詳細ビューの列を右クリックすると「CRC-32」があるので追加することができます。(CRC-32については後で説明します)
エクスプローラの場合次のデメリットがあります。

  1. 拡張子をzipに変更する必要がある
  2. フォルダのサイズが見れない(ファイルのサイズはみれる)
  3. (解凍しても)圧縮時のフォルダの容量が分からない
  4. 解凍してファイルを差し替えた後、zipに再圧縮するときに手順を間違えるとファイルを破損させやすい
  5. 列を設定がフォルダ毎に別々
  6. フォルダのCRC32は見れない(ファイルのCRC32は見れる)

CRCというのは値が同一なら、ファイルが同一であることが確認できます。
フォルダのCRCが同一なら、そのフォルダ内の全てのファイルが同一であることが確認できます。

エクスプローラのデメリット
エクスプローラのデメリット

7zip

そこでおすすめなのが7zipというツールです。7zipのメリットは以下の通りです。

7zipのメリット

  1. 拡張子をzipに変更する必要がなくエクセルファイルのまま中身がみれる
  2. ファイル・フォルダのサイズが見れる
  3. 圧縮時のサイズ(格納サイズ)が見れる
  4. ファイルの差し替えが簡単にできる
  5. 列の設定は全てのフォルダで共通
  6. ファイル・フォルダのCRCが見れる

7zipのインストール

下記リンク先から7zipのインストーラをダウンロードします。
2025年7月に脆弱性の修正版がでているので、7zipを既にインストールしている人も、更新しておきましょう。

7-zip.opensource.jp

  1. リンクをダウンロード
  2. ダウンロードしたファイルを実行
  3. 「はい」を選択
  4. 「Install」を選択
  5. 「Close」を選択

7zipのインストール
7zipのインストール

これでインストール完了です。

エクセルファイルをコピーして7zipで開く

エクセルファイルを破損させる可能性があるので、なれるまでは、エクセルファイルをあらかじめコピーしておきましょう。
コピーしたエクセルファイルを右クリックして
「その他のオプションを確認」を選択します。(あるいはShift+右クリックを選択します)
右クリックメニューのなかから「7zip」→開く(2つあるうち上の方)
を選択します。

右クリックメニューから7zipを開く
右クリックメニューから7zipを開く
すると、選択したエクセルファイルの中身を閲覧することができます。
ついでに右側にあるCRCを見たい人はドラッグして左側に持っていくと良いでしょう

7zipでエクセルファイルの中身を閲覧
7zipでエクセルファイルの中身を閲覧

xlフォルダを開く

xlフォルダを開いてください。「xl」フォルダがない場合はエクセルファイルの拡張子が「xlsx」か「xlsm」か、
あるいはエクセルファイルにパスワードがかかってないか確認してください(これについては後で詳しく説明します)

xlフォルダを開く
xlフォルダを開く

エクセルファイルの容量の内訳を確認

様々なフォルダが現れますが、以下のような内訳になっています。

フォルダ名 内訳
chart グラフ
drawings 図形
embeddings 埋込オブジェクト
media 画像など
worksheets シートの実データ(文字列を除く)
sharedStrings.xml ワークシート内の文字列
vbaProject.bin VBAのコード

15MBのエクセルの例で見てみます。
サイズだと、zipを解凍したときのサイズになってしまうので、格納サイズを見ましょう。
embeddings(埋め込みオブジェクト)が*6.9MB
worksheets(シート内の文字列を除くデータ)が*5.8MB
sharedStrings.xml(シートの文字列部分)が*2.4MB
6.9+5.8+2.4≒約15MBが大半を占めている事がわかります。
*簡単のため1000x1000 Byte=1 Mbyteとして計算しています
(厳密には1024x1024 Btye=1 Mbyte)

エクセルファイルの容量の内訳を確認する
エクセルファイルの容量の内訳を確認する

Excel内の画像を一覧で確認

それではmediaフォルダを開いてみましょう。
(画像が1枚も挿入されていないエクセルファイルの場合はmedaフォルダがありません)
mediaフォルダの中にはエクセルファイルに挿入されているすべての画像がずらーと並んでいます。
それを全て選択して、エクスプローラーで、デスクトップ等に空のフォルダを作成し、そこに全ての画像ファイルを&ドロップしてみます。

mediaフォルダで画像の一覧を確認する
mediaフォルダで画像の一覧を確認する

空のフォルダに画像ファイルがコピーされるので表示を大アイコンにすると、エクセル内に保存している画像を一括で確認することができます。
7zipでエクセルファイル内の全ての画像を一覧で確認する
7zipでエクセルファイル内の全ての画像を一覧で確認する
これがどういうときに便利かというと、例えば非表示シート等に隠れている画像も一覧で表示される為、
社外に提出するエクセルファイルがある場合、社外秘の画像が含まれていないか確認するときなどに使えます。
また、単純にエクセルファイル内の画像をファイルとして一括で取り出したい場合や、一覧での確認に最適です。

画像ファイルの差し替え

画像の差し替えも可能です。同じ拡張子で、同じファイル名の画像を用意します。
(解像度が違っててもいいですが、エクセルでトリミングしている場合は範囲がずれるかもしれません)

拡張子が異なる画像に差し替えたい場合は別の記事にまとめていますので、そちらをご覧ください。

iori016.hatenablog.com

また、pngの画像をpngのまま一括で圧縮する方法はこちらの記事で紹介していますのでそちらをご覧ください。

iori016.hatenablog.com

例えば、下図では「image2.png」の内容を差し替えたいので、同じ「image2.png」で内容が異なる画像ファイルを用意しています。
画像が用意できたら、それを7zipのmediaフォルダ内にドラッグ&ドロップします。
(必ずエクセルファイルのバックアップを取ってから行ってください)

エクセルファイル内の画像を差し替える
エクセルファイル内の画像を差し替える
上書きしてもいいかの確認画面が現れるので「はい」を選択します。
7zipを一度閉じます(閉じないと、エクセルファイルを開いたときに読み取り専用になります)
確認画面で「はい」を選択して7zipを閉じる
確認画面で「はい」を選択して7zipを閉じる

万が一ファイルが破損していた場合はバックアップからやり直す

正常にファイルが開けるか試してみましょう。
慣れないうちは、操作手順を間違えてしまいファイルを破損してしまうことがありますのでその場合は、
エクセルファイルをバックアップからコピーしなおしてやり直すことをお勧めします。
また破損していなかったとしても、差し替え前と差し替え後で正しく差し替えできているかの目視での確認は必要になりますので、失敗しないとしてもバックアップを取っておくことは大事です。

エクセルファイルが破損していたらバックアップからやり直す
エクセルファイルが破損していたらバックアップからやり直す

エクセルファイルの中身を確認する

画像の差し替えの確認
画像の差し替えの確認

差し替えた画像のCRCを確認する

差し替える前と差し替えた後の画像のCRCを確認すると、差し替えた画像のみ値が異なっていることがわかります。逆にCRCが一致していればそれは同じ画像ということがわかります。
この様に内部データのファイル単位・フォルダ単位でCRCを確認して、同一のファイルか確認することができます。

差し替えた画像のCRCが異なる
差し替えた画像のCRCが異なる

パスワードの種類によっては中身が見れない

エクセルには様々な箇所にパスワードを設定できますが、その中でも、ファイルを開くときにパスワードを入力しないと閲覧できないタイプのものは「暗号化」されており、内部データがzipファイルでもなくなるため、解凍はできなくなります。
パスワードをかける方法は、「ファイル」タブの「情報」の「ブック保護」の中から「パスワードを使用して暗号化」を選択した後、パスワードを2回入力して保存を押します。

エクセルがパスワードで暗号化されている場合
エクセルがパスワードで暗号化されている場合
あるいは、F12を押して名前を付けて保存ダイアログを出して、「ツール」の「全般オプション」で読み取りパスワードを設定します。パスワードをもう一度入力したら保存押して上書き保存します。
F12で名前を付けて保存ダイアログで読み取りパスワードを設定する
F12で名前を付けて保存ダイアログで読み取りパスワードを設定する
これら2つのやり方がありますが、どちらも同じ設定で、ファイルを開くときにパスワードが求められるようになります。
この設定を行うと、内部データが暗号化されるため、zipとして解凍もできなくなります。
かろうじて7zipで内部データらしきものは見れますが、編集もできないですし、「xl」フォルダもないため、内部がどのようになっているか知ることができません。
暗号化されているため内部データがわからない
暗号化されているため内部データがわからない
逆にこれ以外のパスワードの設定は全て、編集などを禁止する為のもので内部データそのものは閲覧できてしまうのでエクセルにパスワードをかける場合は理解して使用してください。
拡張子が「xls」の場合も同じで7zipで開くと「xl」フォルダがないので内部データの閲覧はできません。
xlsを7zipで開いた場合
xlsを7zipで開いた場合

Windows11で遅くなった画像の右クリックメニューの高速化

画像の右クリックメニューを高速化
画像の右クリックメニューを高速化

Windows10のサポート期限が切れた為、Windows11にアップデートした人たちが増えていると思いますが、Windows11にして最初に困るのが、Explorerの右クリックメニューの問題です。これをWindows10ライクにする設定は割とよく知られていますが、それでも右クリックメニューの表示が遅いと思ったことはないでしょうか? 特に画像の表示が遅く計測してみた結果右クリックを押してから1.2秒も経ってから表示されるということがわかりました。今回はその遅い現象を改善する方法を紹介してみたいと思います。

はじめに

今回紹介する方法はpngなどの画像の右クリックメニューの表示を高速化できますが、その代わり、画像を右クリックしたときの下記メニューが非表示になります。そのことを留意してください。

  • フォトで編集

  • Designer で作成

  • Copilotに質問する*

  • ペイントで編集する

  • Clipchampで編集

*自分の環境ではWindows Updateで「Ask Copilot」と表示されるようになった。

xlsxの右クリックメニューは、ほとんど変わらないですが、「Copilotに質問する」が非表示になるため、少しだけ右クリックメニューの表示が速くなります。
また、今回紹介する方法はレジストリを変更する方法です。
レジストリを誤って削除したり間違った変更を行うとパソコンの動作が不安定になる可能性があるので注意してください。
情報の公開には最新の注意を払っていますが、もし、これらの操作によって不具合等が発生したとしても責任を取りかねますので、必ず自己責任で実行してください。

とりあえず、高速化したいひと向け(コマンドで変更)

とりあえず、細かい方法はいいから高速化したいという方は下記コマンドをコピーして、コマンドプロンプトに貼り付けてください。

reg add HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /f /ve
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked" /v "{BFE0E2A4-C70C-4AD7-AC3D-10D1ECEBB5B4}" /t REG_SZ /d "フォトで編集" /f

スタートメニューでコマンドプロンプトを検索してコマンドプロンプトを起動し、上記コマンドを貼り付けます。

コマンドプロンプトにコマンドを貼り付ける
コマンドプロンプトにコマンドを貼り付ける

正常に実行できた場合、下図のようになります

コマンドの結果
コマンドの結果
この状態でパソコンを再起動すると、右クリックメニューの表示がWindows 10ライクになり、画像の右クリックメニューの表示が高速化されます。

コマンドによる変更内容
コマンドによる変更内容

とにかく元に戻したい場合

元に戻したい場合は次のコマンドを打ってください。

reg delete HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /ve /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked" /v "{BFE0E2A4-C70C-4AD7-AC3D-10D1ECEBB5B4}" /f

右クリックメニューの表示を手動で設定する

実際のところ、いきなりコマンドで実行しても何をしているのかわからないと不安になりますし、応用も利きません。なので今回は、上記コマンドがどのレジストリを変更しているのか解説していきたいと思います。 まずはWindows11で変わった右クリックメニューをWindows10ライクにする方法です。

Windows10ライクの右クリックメニューにする
Windows10ライクの右クリックメニューにする
まずはスタートメニューで「regedit」と検索してレジストリエディタを起動します。
次にレジストリエディタのアドレスバーに次の文字列をコピーして貼り付けてエンターを押します。

HKEY_CURRENT_USER\Software\Classes\CLSID

regeditでレジストリエディタを起動
regeditでレジストリエディタを起動
CLSIDの配下にキーを作成し、次のキーを作成します。

{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}

その配下に次のキーを作成します。

InprocServer32

CLSIDの配下にキーを作成する
CLSIDの配下にキーを作成する
「InprocServer32」のキーを選択して、右側の枠内の「既定」をダブルクリックして「空欄のまま」OKボタンを押します。
すると、「(値の設定なし)」から「」に変化します。
既定を空欄にしてPCを再起動するとWindows10ライクになる
既定を空欄にしてPCを再起動するとWindows10ライクになる
これでパソコンを再起動すると、Windows10ライク右クリックメニューになります。
但し、このままだと画像の右クリックメニューに表示がかかってしまいます。

右クリックメニューを手動で元に戻したい場合

逆に元に戻したい場合は、「既定」を右クリックして、「削除」を選択すると、値が「」から「(値の設定なし)」に変化します。この状態でPCを再起動するとWindows11の右クリックにもどります。「InprocServer32」キーを削除する必要はありません。
これらの挙動の意味を書くと割と長くなるので余裕があれば最後に補足に書きたいと思います。

元に戻したい場合
元に戻したい場合
作成したキーはお気に入りに入れておくと後でアクセスしやすくなって便利です。
お気に入りの使い方
お気に入りの使い方

Windows 11の画像の右クリックメニューの表示が遅い

ただこれだけだと、画像の右クリックメニューの表示に時間がかかるという問題があります。実際に検証してみましたが、ややこしいことにPC起動後1回目(正確にはエクスプローラ起動後1回目)の右クリックメニューと2回目以降の右クリックメニューは表示される内容も時間も異なります。また、連続で右クリックメニューを表示していると3回目以降は高速になりますが、最後に右クリックメニューを表示してから10秒以上経過後に右クリックメニューを再度表示するとまた、時間が再び遅くなります。ややこしいですが、実際に気にするべき時間は最後に右クリックメニューを表示してから10秒以上経過後の時間だと思います。 この時間を自分の環境で計測してみたところ、表示に1.2秒かかりました。

右クリックメニューの内容と表示時間の違い
右クリックメニューの内容と表示時間の違い
PCを起動して1回目よりも2回目の方が右クリックメニューが多い為、表示に時間がかかってしまっています。 試しにレジストリを変更して1回目と同じになるように右クリックメニューの一部を非表示にした結果、最後に右クリックメニューを表示してから10秒以上経過した場合の右クリックメニューの表示時間が1.2秒から0.2秒に短縮できました。ややこしいのが、なぜか「フォトで編集」の右クリックメニューを非表示にすると周りの右クリックメニューが巻き添えを食らって非表示になる点です。この挙動があるため、「ペイントで編集」だけ残して非表示するの難しくなっています。
「フォトで編集」を非表示にすると表示が高速化される
「フォトで編集」を非表示にすると表示が高速化される

右クリックメニューを非表示にする

レジストリエディタのアドレスバーに次のアドレスを入力してエンターを押します。

HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions

通常、「Shell Extensions」の配下には「Cached」のみ存在するので、以下キーを追加します。

Blocked

「Blocked」キーの追加
「Blocked」キーの追加
「Blocked」キーに文字列値(REG_SZ)を追加して名前を以下のようにします。

{BFE0E2A4-C70C-4AD7-AC3D-10D1ECEBB5B4}

文字列値を追加
文字列値を追加
追加した文字列値をダブルクリックして、説明文を書きます。何を書いてもいいのですが、今回は「フォトで編集」のIDを追加したので「フォトで編集」を追加します。
文字列値を変更
文字列値を変更
この状態でPCを再起動すると、非表示になります

「フォトで編集」を非表示にすると全部非表示になる
「フォトで編集」を非表示にすると全部非表示になる

右クリックメニューの非表示状態を元に戻したい場合

「Blocked」で非表示にした「フォトで編集」のIDを削除すると、パソコン(またはエクスプローラ)を再起動後に表示されるようになります。

表示状態を元に戻して表示させる
表示状態を元に戻して表示させる

xlsxは高速化の効果が薄い。

xlsxではPC起動後1回目と2回目に表示される差分が「Copilotに質問する」(筆者の環境だと「Ask Copilot」)のみであることもあり、pngほどの効果はないようです。
それでも多少高速化はされるみたいなのでやってみて損はないと思います。

xlsxは高速化の効果が薄い
xlsxは高速化の効果が薄い

pngとxlsxの高速化前と高速化後の右クリックメニューの表示の比較は以下の通りです。

png 高速化前 高速化後
PC起動後1回目 0.8秒 0.8秒
2回目 1.2秒 0.2秒
3回目 0.4~0.5秒 0.2秒
10秒経過後1回目 1.2秒 0.5秒
2回目 0.4秒 0.2秒
xlsx 高速化前 高速化後
PC起動後1回目 0.8秒 0.7秒
2回目 0.5秒 0.4秒
3回目 0.3~0.4秒 0.2秒
10秒経過後1回目 0.7秒 0.4秒
2回目 0.2秒 0.3秒

補足1 「フォトで編集」以外のIDについて

「フォトで編集」以外にもIDがあります。以下に一覧を載せます。
ただ「Adobe PDFに変換」と「フォトで編集」「Copilot に質問」「Clipchampで編集」「Designerで作成」「ペイントで編集」を非表示にした場合は高速化できますが、それ以外を非表示にしても、高速化にはあまり関係しないようです。

"{BFE0E2A4-C70C-4AD7-AC3D-10D1ECEBB5B4}"="フォトで編集"
"{CB3B0003-8088-4EDE-8769-8B354AB2FF8C}"="Copilot に質問"
"{8AB635F8-9A67-4698-AB99-784AD929F3B4}"="Clipchampで編集"
"{7A53B94A-4E6E-4826-B48E-535020B264E5}"="Designerで作成"
"{2430F218-B743-4FD6-97BF-5C76541B4AE9}"="ペイントで編集"
"{CA6CC9F1-867A-481E-951E-A28C5E4F01EA}"="メモ帳で編集"
"{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"="左右に回転"
"{09A47860-11B0-4DA5-AFA5-26D86198A780}"="Windows Defender でスキャンしています"
"{3282E233-C5D3-4533-9B25-44B8AAAFACFA}"="Adobe PDF に変換"

最後の「Adobe PDFに変換」ですが、これはAdobe Readerをインストールしている人にしか表示されませんし、環境や時期によってIDが変動することがあります。なのでIDを実際に調べる必要があります。
IDの調べ方ですが、「HKCR\PackagedCom\Package」内にある「AdobeAcrobatReaderCoreApp~」内にある「Classs」内のキー名が「Adobe PDFに変換」のIDです。

「AdobePDF」に変換のIDの調べ方
「AdobePDF」に変換のIDの調べ方

またAdobe Readerをインストールしている場合、右クリックメニューに「Adobe PDFに変換」は表示されたりされなかったりかなり不安定になります。
なので安定化させたいのであれば、「Adobe PDFに変換」を非表示しておいた方が無難かもしれません。

実はこれらのIDをBlockedに追加するとWindows11の右クリックメニューを減らすことができます 例えば、下図のように追加すると、ペイントで編集以外を非表示にすることができます。

Blockedに各IDを追加する
Blockedに各IDを追加する

Windows11の右クリックメニューを減らす
Windows11の右クリックメニューを減らす
Windows10ライクの右クリックメニューの時と違ってEdgeを編集するを非表示にしても巻き添えを食らうことがないので好きに非表示にすることができます。

補足2 今回変更したWindows10ライクの設定の解説

ここから先はあくまで煩雑になりますので無理に読む必要はありません。あくまで豆知識みたいな感じで読んでください。
今回右クリックメニューをWindows10ライクに変更するために「HKEY_CURRENT_USER\Software\Classes\CLSID」にIDを追加し、既定の値に空欄を追加するという操作をしています。この方法はいろいろなサイトで紹介されているのですが、一見するとなんの意味があるのか意味が分かりません。 ここではそれを説明したいと思います。
実はレジストリキーには以下3つの種類があります。

  • HKEY_CURRENT_USER\Software\Classes
    • WIndowsのユーザーごとの設定、(以下HKCU\Software\Classes)
  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes
    • Windowsの全てのユーザーごとの設定、(以下HKLM\SOFTWARE\Classes)
  • HKEY_CLASSES_ROOT
    • 現在のユーザーで最終的に有効になっている設定(以下HKCR)

実は「HKCR」は「HKCU\Software\Classes」と「HKLM\SOFTWARE\Classes」を合体させたものです。
もっと具体的にいうと、「HKLM\SOFTWARE\Classes」の情報を「HKCU\Software\Classes」で上書きされたものが「HKCR」です。
従って、「HKLM\SOFTWARE\Classes」や「HKCU\Software\Classes」を変更すると「HKCR」が変化します。
「HKLM\SOFTWARE\Classes」と「HKCU\Software\Classes」に共通のキーや値がある場合はHKCUの方が優先されます。
「HKCR」のレジストリを変更した場合は、現在反映されているHKCUあるいはHKLMのどちらかが変更されます。

試しに「HKCU\SOFTWARE\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InProcServer32」のキーを右クリックして「HKEY_LOCAL_MACHINEに移動」を選択すると
「HKLM\SOFTWARE\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InProcServer32」に移動することができます。
そこの既定の値には本来の値が存在しています

HKCUからHKLMのキーに移動する
HKCUからHKLMのキーに移動する

HKCUの既定が(値設定無し)の場合、HKCRは値が上書きされない為、HKLMの設定が適用されます。

HKCUが値無しの場合、HKCRはHKLMの値になる
HKCUが値無しの場合、HKCRはHKLMの値になる
HKCUの既定が「」(空白)の場合、HKCRの値が上書きされて、HKCUの値(空白)が適用されます。
HKCUが空白の場合、HKCRは空白になる
HKCUが空白の場合、HKCRは空白になる
つまり、実質的には「HKCR\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32」の既定の値を削除しているのと同じですが、実際にそれをしてしまうと後で元に戻したくなった時に元の値がわからなくなるのでHKCUで空白を追加し、保守性を高めています。 あと個人的には既存のレジストリを削除するのはかなりの抵抗があるのも理由にあります。

セル内に埋め込んだ画像をイコール演算子「=」で比較

セル内に埋め込んだ画像をイコール演算子で比較する

セル内に埋め込んだ画像をイコール演算子で比較する

Excel 365の機能でセルの中に画像を埋め込む機能があることは、よく知られていますが、実は「=」演算子を使って画像同士の比較をすることもできます。
また、XLOOKUPでも文字列をキーとして画像を表示する機能はよく紹介されていますが、逆に画像をキーとして文字列を出力したり、リストとして画像を選択することもできます。今回はこの機能についての説明をしたいと思います。

セル内に画像を埋め込む方法

まずはセル内に画像を埋め込む方法ですが、以下の複数の方法があります。

・リボン挿入タブの「画像」の「セルに配置」で画像ファイルを選択する
・画像をコピーして、セルの右クリックメニューの「セルに画像を貼り付け」を選択する
・Ctrl+Vで貼り付けてCtrlキーで「セルに画像を貼り付け」を選択(貼り付けオプション)
・画像を選択して「セル内に配置」をアイコンをクリック

セル内に画像を埋め込む方法

セル内に画像を埋め込む方法

画像は以下リンク先の左上の画像から引用してきています。

引用先:いらすとや様、「5段階の困る表情のイラスト(男性)」

www.irasutoya.com



実はこれらの挿入の仕方によって少しずつ結果が異なります。
まずはリボンから、画像の「セルに配置」でファイルを選択して画像をセルに埋め込んだ場合で説明をします。


画像のデータ(バイナリ)が一致するかどうか確認できる「=」演算子

コピーしたファイルはコピー元と画像ファイルの中身のデータ(バイナリ)が完全に一致しますが、ペイント等でファイルを開いて上書き保存したり、名前を付けて保存した場合は、同じ画像に見えてもバイナリが変化していることがあります。
下図はWinMergeという比較ソフトで、ペイントで名前を付けて保存したファイルとコピー元を比較したデータです。左では画像のピクセルの情報は一致していますが、右側の画像では内部データ(バイナリ)は異なっている為、差異の部分が黄色く表示されています。

名前を付けて保存をすると同じ画像でもバイナリが変化する

名前を付けて保存をすると同じ画像でもバイナリが変化する


これら画像を実際にそれぞれのファイルを選択してセルに埋め込んで「=」演算子の結果を確認することができます。
下図では、「B2=F5」の結果はコピーしたファイルとの比較なのでバイナリは一致している為に「TRUE」になっていましたが「B2=F6」は名前をつけて保存したファイルとの比較なのでバイナリが一致しない為「FALSE」になります。

イコール演算子について

イコール演算子について

代替テキストについて

Excelでは画像に代替テキスト(ALT、alternativeとも呼びます)を設定することができます。
代替テキストを設定されている画像をセルに埋め込んだ場合、バイナリが同一でも、代替テキストが同一でなければ「=」演算子の比較結果はFALSEになります。

バイナリが同一でも、代替テキストが異なると、「=」はFALSE

バイナリが同一でも、代替テキストが異なると、「=」はFALSE

XLOOKUPの検査値に画像を指定する

通常は、XLOOKUPの検査値には文字列を指定して、戻り範囲に画像を指定する方法が一般的ですが、逆にXLOOKUPの検査値に画像を指定して、戻り範囲を文字列にすることができます。

XLOOKUPの検査値に画像を指定する

XLOOKUPの検査値に画像を指定する

データの入力規則のリストに画像を設定する

入力規則のリストは文字列の範囲を設定して、その隣に画像を表示するxlookupを設定するのが普通のやり方ですが、いきなりセル内に埋め込んだ画像の範囲を選択することができます。その場合ドロップダウンリストに表示される名称は代替テキストになります。

入力規則のリストで画像の範囲を指定する

入力規則のリストで画像の範囲を指定する

インターネットの画像をコピーして貼り付ける場合

まず前提知識としてインターネット上で公開されている画像にはalt属性が付与されているものがあります。

インターネットの画像のalt属性

インターネットの画像のalt属性

このハテナブログのこの記事の画像にもalt属性を埋め込んでいます。
ただし、画像の下に表示されている文章はキャプションと呼ばれるものでalt属性とは別です。
ただし、この記事の画像のalt属性にはキャプションと同じ文章を埋め込みました。
(他の記事の画像には埋め込んでいません。この記事の画像のみです)

はてなブログの画像の設定画面

はてなブログの画像の設定画面

このインターネット上の画像をコピーして貼り付ける場合注意が必要です。

例えばインターネット上の画像を右クリックして「画像をコピー」を選択します。
その後ExcelにCtrl+Vで貼り付け、あるいは右クリックメニューの「元の書式を保持」を選択して貼り付けてみます。

インターネット上の画像をコピーして貼り付け

インターネット上の画像をコピーして貼り付け

すると、貼り付けられた画像には、代替テキストが自動で埋め込まれます。

代替テキストが自動で埋め込まれる

代替テキストが自動で埋め込まれる

ところが、貼り付けた直後にCtrlを押して現れる貼り付けオプションで「セルに画像を貼り付け」を選ぶと、画像がセル内に埋め込まれますが、貼り付けた時には存在したはずの代替テキストが消失してしまいます。

「セルに画像を貼り付け」を選択すると代替テキストが消失する

「セルに画像を貼り付け」を選択すると代替テキストが消失する

しかし、画像をクリックした時に現れる「セル内に配置」というアイコンをクリックすると、同様にセル内に埋め込まれますが、代替テキストは消失しません。
つまり、画像のセル内に埋め込み方によってイコール演算子の結果が異なります。

「セル内に配置」を選択すると代替テキストは消失しない

「セル内に配置」を選択すると代替テキストは消失しない

また、Googleの画像検索から画像をコピーすると、サイトのタイトルがalt属性になってしまいます。

Googleの画像検索はalt属性がサイトのタイトルになる

Googleの画像検索はalt属性がサイトのタイトルになる

つまり、貼り付けた後に常に「セル内に配置」のアイコンを選んでいたとしても画像を右クリックする場所によっても代替テキストの内容が変わるため、イコール演算子の結果がFALSEになります。
また、インターネット上の画像を名前をつけて保存した場合、Googleの画像検索や、画像ファイルのURL、サイトのサムネイル等、右クリックする画像によってもバイナリが異なることがあります。これによっても「=」の結果が異なるので注意してください

名前をつけて保存の仕方によってバイナリが異なる

名前をつけて保存の仕方によってバイナリが異なる

3種類の埋め込み方と
・リボンの挿入タブの画像の「セルに配置」
・右クリックメニュー(あるいは貼付後にCtrlの貼付オプション)「セルに画像を貼り付け」
・画像選択後に現れる「セル内に配置」アイコン

3種類のサイトの画像
・画像のURL
・サイト内の画像のサムネイル
Google画像検索
を用いて、それぞれイコール演算子を用いて比較をしてみました。

サイトと画像の埋め込み方の対応表

サイトと画像の埋め込み方の対応表

画像のダウンロードの仕方や貼り付け方によってバイナリは4種類に分かれ、代替テキストもCtrl+Vで貼り付けた後にセル内に配置する以外は全て空欄になってしまいました。
もしイコール演算子で画像を比較することがあれば、参考にしてみてください。

 

補足(画像のバイナリの同一性について)

ここからは、あまり知る必要性がないのですが、どのようにして画像が同一か見ているのか考察してみたいと思います。
専門用語が増えるので、無理に見る必要性はないです。
xlsxやxlsmは実は内部的にはzipファイルと同一であり、7zipなどのツールを用いて内部データを見ることができます。(実際には拡張子を変更すれば7zipがなくても内部データ見ることができます)
先ほどの対応表のエクセルファイルを7zipで見てみます。対応表では画像が9個入っていますが、内部データを見ると4つしかファイルがありません。これは実は画像ファイルをエクセルファイルに挿入した後、エクセルファイルを上書き保存すると、CRC32を比較して同一の画像とみなされたファイルは1つのファイルに統合されるという仕様がある為です。
(正確には8KB以下の画像はバイナリを比較して、8KBを超える場合はCRC32を比較しています)

エクセルに挿入した画像とCRC32

エクセルに挿入した画像とCRC32

CRC32というのは一致していたら基本的に同じファイルとみなすことができます。

しかし実は確率的には42億分の1の確率で違うバイナリでも同じ値になる可能性があります。その為、イコール演算子がバイナリを比較しているのかCRC32のようなハッシュ値を見ているのかが不明でした。
そこでClaudeにCRC32が衝突している2つのpngファイルを生成してもらうツールを作ってもらいました。

claude.aiこれらを用いて検証した結果、CRC32が衝突していたとしてもバイナリが異なれば(あるいはCRC32ではない、何かしらのハッシュ値が異なれば)イコール演算子の結果がFALSEになることを確認できました。
ただし、8KBを超える画像の場合、CRC32が衝突していると上書き保存したときに、画像が1つに統合されてしまう為、開きなおした時に、再計算でTRUEになってしまうことも確認できました。しかし、自然にCRC32が衝突する確率は物凄く小さいので実際には気にする必要はなさそうです。

Excelで日付が1日巻き戻る現象の解説と対策

最近私がお世話になっているDiscord内のExcel専用チャンネルで次のような質問がありました。

『「●/● 23:00」に「60分」を足しても日付が繰り上がらない』


この質問を追っていくと次のような事実が浮かび上がりました。

Excelのセルには日付が特定の範囲の場合、1日巻き戻るという不具合が存在する

今回はこの不具合について詳しく解説していきたいと思います。

ちなみにdiscordのチャンネルはこちらです

sites.google.com

#不具合の再現方法

・オートフィルの場合

まずは不具合の再現方法を紹介します。
Excelで次のような操作をしたとします。
・1行目に「2025/8/31 23:58」
・2行目に「2025/8/31 23:59」
・2つのセルを選択して、フィルハンドルを3行目にドラッグ(オートフィル)する

すると、3行目は「2025/9/1 0:00」になります。

ここまでは普通ですね。さてこの図ですが、何かおかしなところがないでしょうか?
よく見てみましょう。

よくみると、セルの日付が「2025/9/1」なのに、数式バーの日付が、「2025/8/31」になっていますね。

はい。この時点で不具合が発生しています。このセルをダブルクリックすると日付が数式バーの状態に変化し、エンターを押すと実際に1日巻き戻ってしまいます。

別解として、「23:59:58」と「23:59:59」のセルをオートフィルで延長した場合も同様の結果になります。

・数式の場合

次は数式で計算した場合です。次の操作を行ったとします
・1行目に「2025/8/31 22:00:00」
・2行目に「1行目のセル+TIME(1,0,0)+TIME(1,0,0)」
・3行目に2行目のセルをコピーして値として貼り付け

こちらもオートフィルと同様に不具合が発生します。
このセルもダブルクリックすると日付が数式バーの状態に変化し、エンターを押すと実際に1日巻き戻ってしまいます。
ただし、値として貼り付けなければ不具合は発生しない為数式のままであれば問題はありません。

VBAの場合

次はVBAの例を紹介します(こちらがDiscordの質問にあった内容を簡単にしたものです)
イミディエイトウィンドウで次のコードをコピーして実行してみてください。
(セルD1にしているのは数式バーに近くしたかっただけで特に意味はありません)

 Range("D1") = #2025/8/31 22:00:00# + TimeSerial(1,0,0) + TimeSerial(1,0,0)

上のコードの意味は8月31日の22時に1時間を2回足すという意味です。
当然、9月1日の0時になるはずですよね?
しかし、セルに書き出すとどういうわけか8月31日の0時になってしまいます。

Microsoftさんが気を利かせて夏休みを延長してくれたのですかね?

別解として
Range("D1") = DateAdd("h",1,DateAdd("h",1,#2025/8/31 22:00:00#))
とすると同様の不具合が発生します。
ただし、TimeSerial(1,0,0)を#1:00:00#に書き換えた場合は(この例では)不具合は発生しません。(最後の補足参照)

誤解が無いようにいいますと、VBA上ではちゃんと9月1日と計算されています。
今回の不具合はエクセルのセルの話でありVBAは無関係です。

#不具合の起きる条件

不具合の発生する範囲は日付の時間が
23:59:59.500~23:59:59.999
の範囲内に入っていると不具合が発生します。(日付は問わない)
「.500」というのは500msecという意味です。
より厳密に書くとシリアル値の小数部が
0.999994212961609~0.999999999999999
の範囲に入るとバグになるようです。
(499msecと500msecの間に境界があるようです)

実際、日付はシリアル値の整数部が5桁あるので、小数部は10桁にまで桁落ちして
0.9999942129~0.9999999999
の範囲内がバグルる範囲と思えばよさそうです。
(※0.9999942130とするとぎりぎりバグ範囲が入りきりなさそうなので0.9999942129にしました)


しかしここで疑問が残ります。今までの不具合再現方法の例はすべて「2025/9/1 0:00:00」を出力しようとしていました。
しかし、「0:00:00」のシリアル値の小数部は0なので当然、
0.9999942129~0.9999999999
の範囲には入りません。
実はここで問題になるのが浮動小数点誤差です。
オートフィルで1分ずつや1秒ずつ足して「0:00:00」になる場合や
ExcelのTime関数やVBAのTimeSerial関数で1時間ずつ足して「0:00:00」になる場合、
浮動小数点誤差が入り、わずかに「0:00:00」を下回ります。これは1msecにも満たないほんのわずかな誤差ですが、この誤差のせいで、小数部が「0.9999999999」になってしまい不具合範囲に入ってしまうのです。

#対策

対策としては、時間がバグ範囲に入る場合、四捨五入して次の日にしてしまうという手があります。VBAの関数で書くと次のようになります。

Public Function BugFixDate(ByVal dt As Date)
    Rem 機能
    Rem 日付がエクセルのセルのバグ範囲に入る場合、次の日にする
    Dim Dbl小数部 As Double
    '1msecが1.15740E-08であるから、round関数で10で桁落ちさせても問題ない
    If Round(dt - Int(dt), 10) = 0 Then
        '条件式の意味が分かりづらいが、Round(a) = Round(b)→Round(a-b) =0という変形を行っている
        Dbl小数部 = 1
    Else
        Dbl小数部 = dt - Int(dt)
    End If

    If Round(Dbl小数部 - 0.999994212961608, 15) >= 0 And Round(Dbl小数部 - 1, 10) <= 0 Then
        '0.999994212961609から1がバグ範囲、(念のために0.999994212961608からにしている)
        If Round(dt, 5) <> Int(dt) Then 'dtがぴったり当日の場合を除いて次の日にする
            dt = Int(dt) + 1  '500msecにすると不具合範囲に入るので、次の日にする
        End If
    End If
    BugFixDate = dt
End Function

Excelのシートで使う場合はユーザー定義関数として使ってもいいですし、VBAで使用する場合はとりあえず時間をこの関数で変換しておけば間違いないです。
ただし、Excelのシートからユーザー定義関数として呼び出す場合は、ものすごく計算がものすごく遅くなる可能性があるのでご注意ください。
Lambda式とか書ける人はLambdaにしてみるといいかもしれません。

 

#補足

VBA

#2025/8/31 22:00:00# + TimeSerial(1,0,0) + TimeSerial(1,0,0)

#2025/8/31 22:00:00# + #1:00:00# + #1:00:00#

のdouble型の8バイトのデータをWindows APIで調べてみてみて、以下サイトで実際の数値に変換してみました。

tools.m-bsys.com


#2025/8/31 22:00:00# + TimeSerial(1,0,0) + TimeSerial(1,0,0)
の場合、VBA上では2025/9/1(シリアル値45901)と表示されていましたが、
内部データを調べると45900.99999999999となっていることがわかります。


#2025/8/31 22:00:00# + #1:00:00# + #1:00:00#
の場合、VBA上で(シリアル値45901)となっていて、内部データも正しく45901になっていることがわかりました。

したがって、TimeSerial関数を使うよりは#1:00:00#という表記を使用したほうが正確に計算ができそうです。

Windows11で新しいメモ帳と古いメモ帳を併用する方法

Windows11 になって以降、どんどん新しい機能を追加されていくWindows11のメモ帳ですが、古いメモ帳を使いたいという要望もあります。

そこで今回はWindows 11で新しいメモ帳を削除することなく、txtファイルを古いメモ帳で開く方法を紹介します。

 

 

 

0.初めに

まずWindows11でのメモ帳の挙動について説明します。
メモ帳は現在UWP版(アプリ版)に移行してしまい、Windows 10で使用していたメモ帳(notepad)は使えなくなっています。

しかし古いメモ帳も需要があるらしいので、今回は新しいメモ帳のアプリをアンインストールすることなく、
古いメモ帳と新しいメモ帳を併用して使える方法を紹介します。
また、以下内容についても紹介していきたいと思います。

 

・txtファイルを右クリックメニューでプログラムから開くときに
 新しいメモ帳と古いメモ帳をどちらも選択できるようにする方法
・txtファイルをダブルクリックしたときに古いメモ帳で起動できるようにする方法

 

もちろん新しいメモ帳も今まで通り使用することができます。

1.設定で「notepad」の「エイリアス」をオフにする

win+Xかスタートメニューを右クリックして「設定」を開きます。

設定の検索欄に「エイリアス」と入力して「アプリ実行エイリアスの管理」を開きます。(検索欄がない場合は、横に広げてみてください)

一覧からメモ帳を探してオフにします。

2.ファイル名を指定して実行で「notepad」を実行する

Win+Rで「ファイル名を指定して実行」を開き、「notepad」と入力します。
すると古いメモ帳起動できるようになっています。
(※スタートメニューからnotepadを起動しても新しいメモ帳が起動するので注意してください)

ここまでの設定でもタスクバーに登録すれば、古いメモ帳は起動できるようになりますが、ここまでの設定では、txtファイルから古いメモ帳で起動することができません。
txtファイルから古いメモ帳で起動できるようにするにはレジストリの変更が必要になります。

 

3.レジストリの変更してtxtファイルから古いメモ帳を起動できるようにする

レジストリを誤って削除したり間違った変更を行うとパソコンの動作が不安定になる可能性があるので注意してください。
情報の公開には最新の注意を払っていますが、もし、これらの操作によって不具合等が発生したとしても責任を取りかねますので、必ず自己責任で実行してください。

まずは、Win+Rで「ファイル名を指定して実行」を開いて「regedit」と入力してレジストリエディタを起動します。

レジストリエディタのアドレバーに次のように入力します。
(コピペしてもかまいません)

HKCR\Applications\notepad.exe

左側のペイン(枠)で「notepad.exe」を選択したら、「NoOpenWith」を選択して「名前を変更」を選択する。

変更先はなんでもいいのですが、ここではわかりやすく、先頭にアンダーバーを追加して「_NoOpenWith」とします。(あとで元に戻したくなったときにわかりやすくするためです)

これでtxtファイルの右クリックメニューにプログラムから開く「メモ帳」が2つに増えます。片方が新しいメモ帳で、もう片方が古いメモ帳です。(アイコンで見分けがつきます)


txtファイルのプロパティを開いて、プログラムの「変更」を押すと、既定のアプリに古い方のメモ帳が追加されています。


古いメモ帳を既定のアプリにすると、txtファイルをダブルクリックしたときに古いメモ帳で起動するようになります。





24H2でタスクバーのプレビューが反応しない条件を突き止めました。

会社で24H2になってからこんな報告を受けました。

「タスクバーのプレビューが反応しなくなった」

自分は使っててそんなことなかったのですが、話を聞いているうちに発生する条件が分かったのでこのブログで紹介させていただきます。

 

 

不具合発生する条件

実はこの不具合が発生する条件は少々ややこしくて、以下2つの状態があります。

・不具合発生する状態
・不具合発生しない状態


不具合発生する状態になる条件

何かしらのウィンドウが開いている(最小化されていない)状態で、スタートメニューのアイコンをクリックすると、不具合が発生する状態になります。
あるいはサインインした直後は不具合が発生する状態です。

不具合が発生しない状態になる条件

タスクバーの何もないところをクリックすると不具合が発生しない状態になります。
タスクバーのアイコンをクリックしても不具合が発生しないといえばしないんですが、パソコンによっては毎回クリックしないといけない場合があります。
タスクバーの何もない所だったら、1回クリックすれば、次にスタートメニューのアイコンをクリックするまで不具合発生しない状態を維持します。

 

不具合1:最小化したアプリがプレビューからアクティブにならない

「不具合が発生する状態」で全てのウィンドウを右上の「-」を押して最小化します。
(※Win+Dで最小化した場合は不具合は発生しません)

・不具合発生状態(スタートメニューのアイコンをクリックした状態)
・全てのウィンドウが最小化されている状態
・タスクバーをクリックしない
上記条件を満たしている場合、タスクバーのプレビューをクリックしても反応しません。

例によって文章や画像だとわかりづらいと思うので動画にしました。

 

 

不具合2:画面裏にあるアプリがアクティブにならない。

何かしらのウィンドウがある状態でスタートメニューのアイコンをクリックをすると不具合発生状態になりますが、その時に表示されるウィンドウが手前にある状態で、タスクバーをクリックしないで裏に隠れているプレビューを選択しても反応しません。


対策

対策としてはやはり、タスクバーの何もないところをクリックすることでしょうか、
タスクバーのアイコンをクリックしてもいいのですが、パソコンによっては毎回クリックする必要があるため、人によっては煩わしいようです。

そもそも24H2のPCすべてに発生するのどうかも不明ですが、少なくとも会社のPCと家のPCでは発生しているので、それなりに発生してるPCは多そうに感じます。

Windows11のメモ帳の新しい機能と注意点について

今回はメモ帳についてです。
シンプルだと思っていたWindows のメモ帳ですが、実は最近かなり複雑になってきたことをご存じでしょうか?
知ってるよ!って人も一度この記事をご覧になってください。意外と知らない機能があったりするかもしれません。

バージョンについて

メモ帳のバージョンですが、以下2つのバージョンで共通した機能について説明していきます。
この間バージョンであれば今回の記事の内容が適用できると思います。
Windows メモ帳 11.2312.18.0
Windows メモ帳 11.2501.31.0

※11.2501.31.0に新しく追加されたCopilotについては触れないのでご了承ください。

タブのアイコン

タブには最後に保存(あるいは新規作成)してから未編集(保存済)の場合と編集済(未保存)の場合でアイコンが変化します。
×:未編集(保存済)の状態
・:編集済(未保存)の状態

新しいタブを開く・新しいウィンドウを開く

ファイル→新しいタブや、タブの右側の「+」記号をクリックするとタブが増えます。
ファイル→新しいウィンドウを選択すると別のウィンドウが開かれます。

すべて保存

上書き保存、名前を付けて保存はWindows 10から変わりありませんが、Windows 11からはすべて保存という機能が追加されました。
すべて保存を選択すると、既存のファイルは上書きされ、新規ファイルは名前つけて保存が開かれます。
(新規作成のタブが複数ある場合は連続で名前つけて保存が現れます)

メモ帳の3つの閉じる機能

1.タブを閉じる

タブを閉じる場合は、Windows 10の閉じると同じ効果があります。
未編集の場合は保存するかどうかの確認画面が現れずに閉じますが、編集済み(未保存)の場合は、タブを閉じるときに保存するかどうかの確認メッセージがでます。

2.右上の×ボタン(ウィンドウを閉じる)

ウィンドウが1つのみの状態で、右上の×(ウィンドウを閉じる)を押すと、編集状態であっても確認画面は表示されず、全てのタブの編集状態を保持したまま、閉じることができます。
次にメモ帳を起動した場合、全てのタブの編集状態を保持した開かれます。これはパソコンを再起動しても保持されます。
但し「元に戻す」(Ctrl+Z)の履歴については保持されないため注意が必要です。
保存しなくても編集状態が保持されるのは便利な側面、理解していないとトラブルの元なのでしっかり挙動を理解しましょう。
ただし、ここからがややこしいのですが、この右上の×の挙動は
ウィンドウが1つのみ開いている場合と、複数開いている場合で挙動が異なります。
例として「ファイル」→「新しいウィンドウ」かメモ帳を新しく起動して、複数ウィンドウを開きます。
この状態で編集状態のウィンドウを閉じた場合、全てのタブに対してタブを閉じるを選択した時と同じ挙動になり、保存確認画面が現れます。ここで保存しないを選んでしまうと、次開いたときに編集状態が失われます。
編集状態のタブを複数開いている場合は、連続で確認画面が現れます。
また全てのタブが保存済みだった場合でも、1つのウィンドウのみでウィンドウを閉じた場合は開いているタブの順番を保持することができますが、複数のウィンドウを開いているときにウィンドウを閉じると全てのタブを閉じたのと同じ挙動になるため、タブが開いていた順番がわからなくなります。
いつも右上の×で閉じることに慣れてる人は気を付けましょう。
逆に複数のタブに対して編集状態破棄して一括で閉じたい場合は、この方法しかないので覚えておくといいかもしれません。

3.終了

ファイル→「終了」を押すとすべてのタブ、すべてのウィンドウの編集状態を保持したまま閉じることができます。
次に開いた場合は複数のウィンドウ毎復元されます。

注意点

これらメモ帳に仕様を理解した上で気を付けるべき点があります。
それはメモ帳の編集に閉じて、右上の×(ウィンドウを閉じる)を押して、編集状態を保持した状態で、再度保存されたtxtファイルをダブルクリックして開いたらどうなるのか?という点です。
こちらはメモ帳のバージョンによって挙動が変わるので2つのバージョンについて説明をしていきます。

メモ帳 11.2501.31.0

メモ帳のバージョンが11.2501.31.0の場合、変更中に、編集状態を保持したまま閉じた後、ファイルをダブルクリックして開いた場合、保存されたtxtの状態では開かれず、最後に編集した状態が開かれます。
つまり、「ファイルの中身を確認するため」に開き、タブを押して保存しないを選んだ場合、
編集状態が失われ、最後に保存された状態に戻ります。
Windows 10までのメモ帳に慣れている人は事故が発生しそうになるため、しっかり上書き保存する癖をつけましょう。
画像は言葉だけだと、わかりづらいと思うので動画を作成しました。12秒までは準備で、13秒からが本番です。
ファイルを開き、保存しないで閉じた場合、開きなおすとなぜか前回開いたときと内容が変わっています。
理由は12秒までの操作が原因です。

メモ帳 11.2312.18.0

少し前の古いバージョンですが、メモ帳のバージョンが11.2312.18.0の場合、変更中に、編集状態を保持したまま閉じた後、ファイルをダブルクリックして開いた場合、保存された状態のtxtファイルは開かれますが、編集状態のタブも別に開かれます。
これは同じファイルをダブルクリックして開くと、複数のタブが開けてしまう不具合に起因した現象です。
ちなみに2つとも上書き保存した場合は、最後に保存したほうが有効になり、先に保存した編集内容は失われます。
編集済みのタブと編集状態のタブが2つあると混同しやすく間違いやすいので気を付けましょう。
動画では17秒までが準備で18秒以降が本番です。
ファイルをダブルクリックして開くとなぜか、編集中のタブと最後に保存したときのタブが2つ開かれます。
これも原因は17秒までの操作が原因です。

メモ帳のバージョンを最新にする方法は以前の記事で紹介したのでそちらを参照してください iori016.hatenablog.com

どちらの動画も冒頭でタブを閉じているは、最後の保存状態がどうなっているのかの証拠を見せる為です。