1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel:セル「幅1.88・高さ15」で20×20ピクセルの正方形Excel方眼紙が作れますが。。。

1
Last updated at Posted at 2026-05-03

Excel方眼紙の正方形セルを構成する4つの要素

未だにExcel方眼紙で設計書を作ってますが、セルの「幅1.88」と「高さ15」にすると、20×20ピクセルの正方形のExcel方眼紙が作れますが、これは特定の条件下でのこと(一般的なWindows環境下のExcelの標準スタイルのフォントは、「游ゴシック 11pt」の条件下でのこと)。

  • 列の幅: 1.88
  • 行の高さ: 15

一般的なWindows環境でこの設定を行い、境界線をマウスでクリックして確認すると、どちらも 「20 ピクセル」 となり、正方形のセルが出来上がります。
が、「他のPCで開くと縦長・横長になる」「フォントを変更するとセル幅が広がる・狭まる」といった現象に悩まされることがあります。

この「20ピクセル × 20ピクセル」の正方形になるのは、以下の 4つの要素が特定の条件で組み合わさった結果 にすぎません。

  1. ポイント(絶対的な物理サイズの単位)
  2. ピクセル(画面を構成する点の単位)
  3. DPI(OSのディスプレイ解像度。Dots Per Inchの略。)
  4. 標準スタイルのフォント(基準となる文字サイズの設定)

この記事では、セルサイズを決定している「4つの要素」の仕組みの理解をしたいと思います。


要素1・2・3:「行の高さ」を決めるDPIの仕組み

まず、行の高さ「15」が、画面上で「20ピクセル」として表示される仕組みについて解説します。
ここには、「ポイント」「ピクセル」「DPI」という3つの要素が関係しています。

Excelの「行の高さ」の単位は、ピクセルではなく 「ポイント」 です。つまり、高さ「15」は「15ポイント」を意味します。
このポイントが画面上のピクセルに変換される際、基準となるのがOSの 「DPI(解像度)」 です。

補足:「ポイント」という単位の由来
「ポイント」は、活版印刷の時代に金属活字のサイズを統一するために生まれた単位です。
「1インチ=72ポイント」と定義されていますが、これは紙面をレイアウトする際、72という数字が「2分割(36)」「3分割(24)」「4分割(18)」など、多くの数で割り切れ、計算が容易だったためです。この基準が、現代のソフトウェアにも引き継がれています。
この「1インチ=72ポイント」という定義を、AppleのMacintoshと、AdobeのPostScript(印刷用プログラム)が行いました。Macの画面上の1ピクセルが、印刷した時の1ポイントと完全に一致する(WYSIWYG:見たままが得られる)というものです。

  • 72の約数(12個): 1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, 72

Macの「72 DPI」と、Windowsの「96 DPI」

OSによって、1インチを画面上で何ピクセルで表現するか(DPI)の基準が異なります。

【Macの場合:72 DPI】
Macは、印刷物と画面表示のサイズを一致させることを重視し、印刷基準と同じ 「72 DPI(1インチ=72ピクセル)」 を標準解像度としました。
これにより、「72ポイント = 72ピクセル」となり、「1ポイント=1ピクセル」 というシンプルな関係になります。Mac版Excelで行の高さを「15」に設定すると、画面上でも「15ピクセル」になります。

【Windowsの場合:96 DPI】
一方Windowsは、モニターが紙よりも目から遠い位置にあることを考慮し、文字を約1.33倍(4/3倍)大きく表示するために 「96 DPI」 を標準解像度としました。

ちなみに「96」も約数が12個ある

  • 96の約数(12個): 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 96
  • 72ポイント × (96 ÷ 72) = 96ピクセル(Windowsでは 1ポイント = 約1.33ピクセル

行の高さ「15ポイント」をこれに当てはめると、以下のようになります。

  • 15ポイント × 1.333... = 20ピクセル

一般的なWindows環境で、「行の高さ」を 15 にすると、高さが20ピクセルになるのは、この「96 DPI」という基準によるものです。

ディスプレイの拡大縮小設定による影響

Windowsの標準は96 DPIですが、現在の高解像度ディスプレイなどでは、Windowsの「ディスプレイ設定(拡大縮小とレイアウト)」が初期状態で 「125%」 などに設定されていることがよくあります。

この場合、標準の96 DPIが1.25倍され、内部的には 「120 DPI」 として扱われます。
この環境で同じ「行の高さ:15」を設定すると、計算式は以下のようになります。

  • 15ポイント × (120 ÷ 72) = 25ピクセル

設定値が同じ「15」でも、OSの表示スケールが異なるだけで、画面上では 「25ピクセル」 となります。

確認:VBAでOSのDPIを取得する
実際にOSのDPIがどのように認識されているか、Windows APIを使って取得するコードです。Windowsのディスプレイ設定を125%などに変更して実行すると、結果が変わることが確認できます。

#If VBA7 Then
    ' 64ビット版・最新のExcel用
    Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
    Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hdc As LongPtr) As Long
    Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hdc As LongPtr, ByVal nIndex As Long) As Long
#Else
    ' 32ビット版・古いExcel用
    Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
#End If
Sub PrintDPI_WindowsAPI()
  Dim dpiX As Long
  Dim dpiY As Long
    
  #If VBA7 Then
    Dim hdc As LongPtr
    Dim hwnd As LongPtr
  #Else
    Dim hdc As Long
    Dim hwnd As Long
  #End If
    
  '' デスクトップ全体のウィンドウハンドルを取得(0を指定)
  hwnd = 0
    
  '' デバイスコンテキスト(描画情報)を取得
  hdc = GetDC(hwnd)
    
  '' GetDeviceCaps関数を使ってDPIを直接読み取る
  dpiX = GetDeviceCaps(hdc, LOGPIXELSX)
  dpiY = GetDeviceCaps(hdc, LOGPIXELSY)
    
  '' メモリを解放(重要)
  ReleaseDC hwnd, hdc
    
  '' イミディエイトウィンドウに出力
  Debug.Print "Windows APIから取得した解像度(X): " & dpiX & " DPI"
  Debug.Print "Windows APIから取得した解像度(Y): " & dpiY & " DPI"
End Sub

1920×1080の100%の解像度の場合

image.png
image.png
image.png
image.png
image.png

1920×1080の125%の解像度の場合

image.png
image.png
image.png
image.png
image.png


要素4:「列の幅」を決める標準スタイルのフォントの仕様

続いて、列の幅「1.88」が「20ピクセル」になる仕組みです。
行の高さは「ポイント」単位でしたが、列の幅の単位は異なります。ここに関わるのが第4の要素です。

Excelの列幅に入力する数値は、 「現在の標準スタイルのフォントの半角文字が何文字表示できるか」 という独自の単位に基づいています。

Microsoft公式からの引用:Range.ColumnWidth プロパティ (Excel):
https://learn.microsoft.com/ja-jp/office/vba/api/excel.range.columnwidth
1 単位の列幅は、標準スタイルの 1 文字の幅に等しくなります。 プロポーショナル フォントでは、数字の 0 の幅が列幅の単位になります。

冒頭の列幅「1.88」が「20ピクセル」という数値は、「1.88文字分の幅 + 左右の余白」を意味します。

書体(フォントの種類)が変わるだけで正方形が崩れます

ここで、困った具体例を紹介します。
同じ「11pt」のフォントサイズを設定していても、 フォントの「書体」が違うだけで、1文字あたりの横幅が異なるため、20ピクセルにするための設定値が変わってしまう のです。

  • 游ゴシック 11pt の場合: 文字幅が少しスリムなため、20ピクセルにするには 「幅 1.88」 が必要。
  • UD デジタル教科書体 NK-R 11pt の場合: 文字幅が広めなため、20ピクセルにするには 「幅 1.3」 で到達してしまう。

例えば、自分のExcelの標準スタイルのフォントが「UD デジタル教科書体 NK-R 11pt」になっており、「幅1.3と高さ15の固定値で正方形を作図」するような、VBAマクロを作ったとします。
そのマクロを、標準の「游ゴシック」を使っている別のユーザーが実行すると、游ゴシック環境では「幅1.3」ではピクセル数が足りず、 正方形になるはずが「縦長の長方形」として描画されてしまう のです。

確認:標準スタイルのフォントの変更による影響

さらにフォントサイズが変わった場合の影響も確認してみましょう。
標準スタイルのフォントが「游ゴシック 11pt」、セルを「幅1.88、高さ15」で正方形方眼紙にしたシートで、以下の手順を実行します。

【手順】

  1. [ホーム] タブの [セルのスタイル] をクリックする。
  2. [標準] を右クリックし、[変更] を選択する。
    image.png
  3. スタイルダイアログで [書式設定] をクリックする。
    image.png
  4. フォントタブで、サイズを「11」から 「24」 などの大きな数値に変更して「OK」をクリックする。
    image.png

【結果】
設定を変更すると、シート全体の列幅が広がり、正方形だったセルが横長の長方形になります。
行の高さは「15ポイント」のまま変わりませんが、列の幅は設定値「1.88」のまま、ピクセル数だけが40ピクセル以上に激増します。

image.png
image.png
image.png

この仕様を考慮せずに固定の数値でVBAを組んだりすると、他の環境でファイルを開いた際に図形の形が崩れてしまいます。


20×20ピクセルにするVBAコード断片

''' <summary>
''' セルを20ピクセルx20ピクセルの正方形にします。
''' </summary>
''' <param name="wsData">ジョブの定義データが入力されているシート</param>
''' <param name="lastRow">データシートの最下行番号</param>
''' <param name="wsDraw">作図対象のシート</param>
''' <returns>なし</returns>
''' <remarks>
''' 前提:画面の解像度は96DPIであることが前提の処理です。
''' 高解像モニタで120DPIとかだと、25×25ピクセルくらいに変化します。
'''
''' 説明:
''' 行の高さは **標準スタイル** の影響を受けずに15ポイントを指定したら必ず20ピクセルになります。
'''
''' 列幅は **標準スタイル** のフォントとフォントサイズの影響を受けます。
''' Range.ColumnWidth プロパティ (Excel):
''' https://learn.microsoft.com/ja-jp/office/vba/api/excel.range.columnwidth
'''
''' "UD デジタル 教科書体 NK-R 11pt"は、列幅1.3文字で列幅20ピクセルになりますが、
''' "游ゴシック 11pt"は、列幅1.88で列幅20ピクセルになります。
'''
''' 例えば、標準スタイルのフォントとフォントサイズが、"游ゴシック 11pt"の状態で、
'''
''' With workSheet
'''   .Cells.Font.Name = "UD デジタル 教科書体 NK-R"
'''   .Cells.Font.Size = 11
''' End With
'''
''' としたところで、標準スタイルのフォントとフォントサイズが勝ってしまうので、
''' 列幅1.3(文字)を指定すると、列幅は15ピクセルになってしまう。"游ゴシック 11pt"の場合は、列幅1.88(文字)にしないと20ピクセルにならない。
'''
''' そんなことをするくらいなら、標準スタイルを変更してしまう。
'''
''' **標準スタイル** というのがポイントです。単純にワークシートのセルを全選択してフォントとフォントサイズを指定したところで、列幅を制御できません。
'''
''' </remarks>
Public Function SetupWidthHeight(ws As Worksheet) As Worksheet
  '' Workbookにに標準スタイルが紐付く。メンドクサイのでParentで取得。
  With ws.Parent.Styles("Normal").Font
    .Name = "UD デジタル 教科書体 NK-R"
    .Size = 11
  End With
  
  '' セルを20ピクセルx20ピクセルの正方形にします。
  With ws
    ''
    '' セルを全選択してフォントとフォントサイズを変えても効果がない。
    '' .Cells.Font.Name = "UD デジタル 教科書体 NK-R"
    '' .Cells.Font.Size = 11
    ''
    '' 96DPI,"UD デジタル 教科書体 NK-R 11pt"という環境化で列幅1.3(文字)を指定すると列幅20ピクセルになる。
    ''
    .Cells.ColumnWidth = 1.3  '' VBAには残念ながらセル幅をポイントで指定するメソッドがない。
    
    '' 行高さ15ポイント(20ピクセル)
    .Cells.RowHeight = 15
    
    '' 画面の解像度96DPI
    Debug.Print "DEBUG:幅 :", .Range("A1").Width '' Withメソッドは参照のみ。15(ポイント)を返す。
    Debug.Print "DEBUG:高さ:", .Range("A1").Height  '' Heightは参照のみ。15(ポイント)を返す。
  
  End With
  Set SetupWidthHeight = ws
End Function

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?