まりふのひと

Excel2010 VBAで列幅をmmで指定するには

 以前、「WordでPDFサムネイル」を作ったが、処理に時間が掛かるので Excel に作り変えようとしているが苦戦中‥‥
その一つ。Wordのようにセルの中に自動的に納めることができず、画像の縮小サイズは自分で指定しなくてはならないのだが、単位がややこしい...



  1. Excelで使われる単位の話(All About)
    セルの高さの単位
     セルの高さの数値を表示するには、行と行の境界線にマウスポインタを移動して、ポインタが下図のような形になったところで、左ボタンを押したままにします。
    すると、次のようなポップヒントが表示されます。この「13.50」がセルの高さを表す数値で、単位は「ポイント」です。
    1ポイントは1/72インチ。1インチが約25.4mmなので、1ポイントは25.4mm÷72より、約0.3528mmであることがわかります。したがって、13.50ポイントは約4.76mmとなります。

    列幅の単位
     列幅の数値を表示するには、列と列の境界線にマウスポインタを移動して、ポインタの形が変わったところで左ボタンを押したままにします。すると、次のようなポップヒントが表示されます。この「8.38」が列幅を表す数値で、「標準フォント」の半角文字の文字数を表しています。
    例えば、列幅が「8.38」の場合、「標準フォントの半角文字が8.38文字分表示できる列幅」ということになります。つまり、列幅を表す単位は「表示できる文字数」である、ということです。

  2. 行高さと列幅をセンチメートル単位にするExcel-Excel!
     CentimetersToPointsメソッドは、センチメートルをポイントに変換します。1ポイントは、0.35mmです。
    列幅は、ColumnWidth と CentimetersToPoints を使います。
    行高さは、RowHeight と CentimetersToPoints を使います。
     '列幅を3cmにする
    Range("E7").ColumnWidth = Application.CentimetersToPoints(3) * (Range("E7").ColumnWidth / Range("E7").Width)

     '行高さを2cmにする
    Range("E7").RowHeight = Application.CentimetersToPoints(2)



 セルの高さの単位は「ポイント」なので
    Range("E7").RowHeight = Application.CentimetersToPoints(2)
で 2cm に出来ることは解った。
しかし、幅の
     * (Range("E7").ColumnWidth / Range("E7").Width)
は何なの? 頭が固くなっていて解らない...


 セルA1で試した。

  • 幅は、“8.09(96ピクセル)”と表示された。‥‥ 単位:文字数
  • ActiveCell.ColumunWidthは、24.33
  • ActiveCell.Width は、135.6



  • Excel/ColumnWidth のヘルプ
    Range.ColumnWidth プロパティ
     指定された対象セル範囲内のすべての列の幅を設定します。値の取得および設定が可能です。バリアント型 (Variant) の値を使用します。
     列幅の単位は、標準スタイルの 1 文字分の幅に相当します。プロポーショナル フォントでは、数字の 0 の幅が列幅の単位になります。
    列幅をポイント単位で取得するには、Width プロパティを使ってください。

  • Excelの列幅をmm単位で設定したいVB初心者友の会 - Q&A掲示板過去ログ)
     幅の変更は ColumnWidth を使います。では、mm での変更は無理かというとそうではありません。
        .ColumnWidth(文字単位) / .Width(ポイント単位)
    とすれば、1 ポイントが文字単位でいくつになるか計算できます。
     これをもとに、目的の mm での文字単位がいくつになるか求め、ColumnWidth にセットすればOKです。

結論

 イミディエイト ウィンドウの数値はともかく、単位でみると


Range.ColumnWidth = Application.CentimetersToPoints(3) * (Range.ColumnWidth / Range.Width)
は、
文字数=3cmをポイントに変換×文字単位/ポイント単位
となる。単位上は整合性がとれているので、「解った」ことにしよう...