1. まずWindowsのスケーリングとは(おさらい)
高解像度ディスプレイに対して、表示する文字の倍率を大きくするなどして、
極精細になりがちな文字などを、標準の人間が読める精度にするWindowsOSの標準機能です。
様々なディスプレイを搭載するパソコンがあるので、スケーリング設定は一律100%が普通、とはいかないのです。
(ITmedia 様)Windows 10でディスプレイの表示スケールの設定を変更して見やすくする
(ASCII.jp 様)Windowsのディスプレイとモニター いまだ96DPIが基準
2. スケーリングの違いでExcelの改ページがずれまくる事態が発生する問題
(SEからの脱出日記 様)共有のExcel 印刷 ユーザーによって改ページ ずれる 対処方法
Excel印刷レイアウトが正常だった人はディスプレイ解像度は100%でした。
Excel印刷レイアウトがずれていた人はディスプレイ解像度は125%でした。
年配の方は老眼の方が多くディスプレイ解像度をあげていたのです!!!
ん~、、老眼じゃなくても最近のノートPCは高解像度ディスプレイなので、
PCメーカのデフォルトでスケーリング125%(推奨)とか150%(推奨)が逆にデフォなのですよね。。
(Microsoft 様)高 DPI デバイスでの Windows のスケーリングの問題
(Microsoft 様)Office ソリューションでの高 DPI と DPI スケーリングの処理
・・・いや、課題わかってるなら早く直しておいてよ、と。
そして、何もしてなくてもレイアウトが崩れてくれるExcel(!)は、
このスケーリングの違いでも見事にズレてくれるのです。。
これに気が付かなった私は、
スケーリング100%設定の方のエクセル原稿をスケーリング125%で校正した結果、
なんで毎回改ページがすれているんだろ!修正!・・・とやる度に無限ループになっていたのです。。
3. Windowsのスケーリング設定が違っても同じ改ページで編集出来るようにする施策
※この対策は、こちらの やっぱり「Excel方眼紙」でマニュアルを作ろうと思った(「Relax Tools Addin」のおかげ) の運用を前提にしています。
スケーリング100%の時の改ページ位置を記載(例:1ページ34行)しておいて、
ExcelVBAで、改ページの位置をポイントしていく運用を考えました。
この機能を使えば、スケーリングが違うパソコン環境でも、スケーリング100%時の改ページ位置が分かるようになります。
その位置で明示的に改ページを設定していけば、スケーリングが違う環境でも同じ改ページ位置を確保できる訳です。
また、2ページ以降は「印刷タイトル」分行数を減らして全体が同じページ行数になるようにしています。
Excel VBAコード
Sub WindowsのDPI設定に負けないExcel改ページ標準化()
Dim PTRows As Variant
Dim PTRowsCount As Integer
Dim NumOfPL As Integer
Dim Pages As Integer
'mougモーグ 様
'行/列タイトルを設定する(PrintTitleRows/PrintTitleColumnsプロパティ)|Excel
'https://www.moug.net/tech/exvba/0070015.html
'構文 Object.PrintTitleRows 印刷タイトル行の設定/取得
' Object.PrintTitleColumns 印刷タイトル列の設定/取得
'印刷タイトルの行範囲取得
With ActiveSheet.PageSetup
PTRows = .PrintTitleRows
End With
'大体でIT 様
'【VBA】Rangeの行、列、行数、列数を取得【Row、Column、Countを使う】
'https://daitaideit.com/vba-range/
'印刷タイトルの行数カウント
If PTRows = "" Then
PTRowsCount = 0
Else
With ActiveSheet.Range(PTRows)
PTRowsCount = .Rows.Count
'MsgBox ("印刷タイトルの行数" & vbCrLf & .Rows.Count)
End With
End If
NumOfPL = ActiveSheet.Range("NumOfPL").Value '指定された1ページの行数読み出し
Pages = ActiveSheet.Range("Pages").Value '指定されたページ数読み出し
'ポインタ書き出し列(AL列)の値削除
Columns("AL:AL").Select
Selection.ClearContents
'1ページ目の改ページポインタ「≪」書き出し
ActiveSheet.Cells(NumOfPL, "AL").Value = "≪"
'2ページ目以降の改ページポインタ「≪」書き出し
For i = 2 To Pages
ActiveSheet.Cells(NumOfPL * i - PTRowsCount, "AL").Value = "≪"
Next i
End Sub
操作の様子
(1)最初にスケーリング100%で改ページ位置を確認して値を決定する。
(2)次にスケーリングを変えると(125%など)自動改ぺージはずれるが、
改ページ目安ポインタがあるので同じ位置で改ページを設定できる。
以上です。