フォントの扱いはセルやオートシェイプで異なる
セルやオートシェイプのテキストのフォントは、Fontオブジェクトで操作します。
セルとオートシェイプではFontオブジェクトの親オブジェクトが異なります。
セルの場合はRangeオブジェクト、オートシェイプの場合はShapeオブジェクトのTextRange2オブジェクトです。
ここではセルのフォントの取得と変更について説明します。
構文
1 |
Fontオブジェクト.Nameプロパティ |
FontオブジェクトのNameプロパティはセルのフォントの種類の取得または設定を行います。
フォントの種類は利用するPCごとに異なるため定数値を持っておらず、”MS Pゴシック”のように文字列での設定になります。取得も文字列で取得します。
フォントを変更すると、リボンのホームタブ→フォント や、セル右クリック→セルの書式設定→フォントタブのフォント名が変わります。
なお、利用しているPCで扱えるフォントを知りたいときはホームタブ→フォントのフォントコンボボックスで分かります。一覧で確認したい場合は「利用できるフォントの種類を取得する」を参照してください。
フォントコンボボックスにないフォントを設定した場合
設定できるフォントはホームタブ→フォント のフォントコンボボックスに表示されているフォントに限定されます。
ただ、フォントコンボボックスに無いフォントを設定してもエラーにはならず、設定した文字列がそのままフォントコンボボックスに表示されます。
エラーは発生しませんがフォントとしては存在していないため、元のフォントでそのまま表示されます。
変更前
変更後(フォントコンボボックスに” aaaaa”が設定されているがセル文字列の見た目は変わっていない)
1 2 3 |
Sub SetNotExistFont() Selection.Font.Name = " aaaaa" End Sub |
英字フォントを設定すると日本語は元のフォントのままになる
フォントを設定する場合、全角と半角や大文字と小文字の間違いがあると正しく設定されません。
また、日本語のみの文に対して英字フォントを指定しても日本語へ対応していないため表示上は何も変わりません。
同様に、日本語と英語が混在している文に対して英字フォントを指定した場合は英字のみにフォント変更が適用されます。
1 2 3 |
Sub SetCourierNew() Selection.Font.Name = "Courier New" End Sub |
変更前
変更後
英字部分のみが”Courier New”になっています。日本語部分は元のままです。
個人的にはこういう日本語+英語への英字フォントを設定する使い方は避けた方がいいと考えています。理由は本来設定したかったフォントの種類が何なのかが分からなくなる恐れがあるためです。
標準フォントの取得と設定
元の標準フォントの取得または設定を行いたい場合はApplicationオブジェクトのStandardFontプロパティを利用します。
Standardプロパティの設定は、Excelオプション→基本設定→使用するフォント での変更に該当します。
StandardFontプロパティを行った場合、その設定変更はExcelを再起動後に適用されます。
1 2 3 4 5 6 7 8 9 10 |
Sub SetStandardFont() Dim f '// 標準フォントの取得 f = Application.StandardFont Debug.Print f '// 標準フォントの設定 Application.StandardFont = "メイリオ" End Sub |