以前、「WordでPDFサムネイル」を作ったが、処理に時間が掛かるので Excel に作り変えようとしているが苦戦中‥‥
その一つ。Wordのようにセルの中に自動的に納めることができず、画像の縮小サイズは自分で指定しなくてはならないのだが、単位がややこしい...
- 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文字分表示できる列幅」ということになります。つまり、列幅を表す単位は「表示できる文字数」である、ということです。 - 行高さと列幅をセンチメートル単位にする(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)
は何なの? 頭が固くなっていて解らない...
- 幅は、“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)