標準スタイル違いの問題点:標準フォント複写、列幅をピクセルで合わせる
VBAでスタイルの標準フォントが違うブック間のコピー等の処理では、


同じ列幅20の時の、列幅の表示です。
125ピクセル、207ピクセル、大きく違っています。
実際の見た目の幅も大分違います。
これでは作成されるシートの見た目が大きく違ってしまいます。



この数値は標準スタイルの 1 文字分を基本としているため、
実際のピクセル数は、それぞれのブックに依存することになります。
本記事では、既に登録されているStyleオブジェクトについてのみ扱います。
名前 | 説明 |
Delete | オブジェクトを削除します。 |
Styleオブジェクトのプロパティ
名前 | 説明 |
AddIndent | セル内の文字列の配置で縦または横位置を均等に割り付けるときに、文字列を自動的にインデントするかどうかを示すバリアント型 (Boolean) の値を取得、または設定します。 |
Application | 対象となるオブジェクトが指定されない場合は、Excel アプリケーション (Application オブジェクト) を返します。 対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成した Application オブジェクトを返します。 OLE オートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。値の取得のみ可能です。 |
Borders | スタイルまたはセル範囲 (条件付き書式の一部として定義された範囲を含む) の罫線を表す Borders コレクションを取得します。 |
BuiltIn | True の場合、オブジェクトは組み込みオブジェクトです。値の取得のみ可能です。 ブール型 (Boolean) の値を使用します。 |
Creator | 現在のオブジェクトが作成されたアプリケーションを示す 32 ビットの整数を取得します。 値の取得のみ可能です。長整数型 (Long) の値を使用します。 |
Font | 指定したオブジェクトのフォントを表す Font オブジェクトを取得します。 |
FormulaHidden | シートが保護されているときに、数式を非表示にするかどうかを示すバリアント型 (Boolean) の値を取得、または設定します。 |
HorizontalAlignment | 指定されたオブジェクトの水平方向の配置を表す XlHAlign クラスの定数を取得または設定します。 |
IncludeAlignment | True の場合、選択されているセルまたはセル範囲のスタイルとして定義されている書式は、配置の設定 (AddIndent プロパティ、HorizontalAlignment
プロパティ、VerticalAlignment プロパティ、WrapText プロパティ、IndentLevel プロパティ、および Orientation
プロパティ) を含みます。 値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。 |
IncludeBorder | True の場合、選択されているセルまたはセル範囲のスタイルとして定義されている書式は、罫線の設定 (Color プロパティ、ColorIndex プロパティ、LineStyle プロパティ、および Weight プロパティ) を含みます。 値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。 |
IncludeFont | True の場合、選択されているセルまたはセル範囲のスタイルとして定義されている書式は、フォントの設定 Background、Bold、Color、ColorIndex、FontStyle、Italic、Name、Size、Strikethrough、Subscript、Superscript、および
Underline プロパティ) を含みます。値の取得および設定が可能です。 ブール型 (Boolean) の値を使用します。 |
IncludeNumber | True の場合、選択されているセルまたはセル範囲のスタイルとして定義されている書式は、表示形式の設定 (NumberFormat プロパティ)
を含みます。値の取得および設定が可能です。 ブール型 (Boolean) の値を使用します。 |
IncludePatterns | True の場合、選択されているセルまたはセル範囲のスタイルとして定義されている書式は、塗りつぶし属性 (Color プロパティ、ColorIndex プロパティ、InvertIfNegative プロパティ、Pattern プロパティ、PatternColor プロパティ、PatternColorIndex プロパティ) を含みます。値の取得および設定が可能です。 ブール型 (Boolean) の値を使用します。 |
IncludeProtection | True の場合、選択されているセルまたはセル範囲のスタイルとして定義されている書式は、保護の設定 (FormulaHidden プロパティ、Locked
プロパティ) を含みます。値の取得および設定が可能です。 ブール型 (Boolean) の値を使用します。 |
IndentLevel | 指定されたスタイルのインデントのレベルを表す長整数型 (Long) の値を取得、または設定します。 |
Interior | 指定されたオブジェクトの塗りつぶし属性を表す Interior オブジェクトを取得します。 |
Locked | オブジェクトのロック状態を表すバリアント型 (Boolean) の値を取得、または設定します。 |
MergeCells | True の場合、スタイルに結合セルが含まれます。値の取得および設定が可能です。 バリアント型 (Variant) の値を使用します。 |
Name | オブジェクトの名前を表す文字列型 (String) の値を返します。 |
NameLocal | コード実行時の言語でオブジェクトの名前を設定します。値の取得のみ可能です。 文字列型 (String) の値を使用します。 |
NumberFormat | 指定されたオブジェクトの表示指定されたオブジェクトの表示形式を表す文字列型 (String) の値を取得、または設定します。 |
NumberFormatLocal | 指定されたオブジェクトの表示形式をコード実行時の言語の文字列で表すバリアント型 (String) の値を取得、または設定します。 |
Orientation | 文字の向きを表す XlOrientation クラスの値を取得または設定します。 |
Parent | 指定されたオブジェクトの親オブジェクトを取得します。値の取得のみ可能です。 |
ReadingOrder | 指定されたオブジェクトを読み取る順序を設定します。使用できる定数は、xlRTL (右から左)、xlLTR (左から右)、xlContext のいずれかです。 値の取得および設定が可能です。長整数型 (Long) の値を使用します。 |
ShrinkToFit | 使用可能な列幅に収まるように自動的に文字列を縮小するかどうかを表すブール型 (Boolean) の値を取得、または設定します。 |
Value | 指定されたスタイルの名前を表す文字列型 (String) の値を返します。 |
VerticalAlignment | 指定されたオブジェクトの垂直方向の配置を表す XlVAlign クラスの値を取得または設定します。 |
WrapText | オブジェクト内のテキストを折り返すかどうかを表すバリアント型 (Boolean) の値を取得、または設定します。 |
このように多数のプロパティが存在します。
Sub sample1()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim myFont As Font
Dim myCols As New Collection
Set wb1 = Workbooks("Book1.xlsm")
Set wb2 = Workbooks("Book2.xlsm")
With myCols
wb2.Activate
Set myFont = wb2.Styles("Normal").Font
.Add Item:=myFont.Name, Key:="Name"
.Add Item:=myFont.Size, Key:="Size"
.Add Item:=myFont.Bold, Key:="Bold"
.Add Item:=myFont.Italic, Key:="Italic"
.Add Item:=myFont.Underline, Key:="Underline"
.Add Item:=myFont.Strikethrough, Key:="Strikethrough"
.Add Item:=myFont.ThemeColor, Key:="ThemeColor"
.Add Item:=myFont.TintAndShade, Key:="TintAndShade"
.Add Item:=myFont.ThemeFont, Key:="ThemeFont"
wb1.Activate
Set myFont = wb1.Styles("Normal").Font
myFont.Name = myCols("Name")
myFont.Size = myCols("Size")
myFont.Bold = myCols("Bold")
myFont.Italic = myCols("Italic")
myFont.Underline = myCols("Underline")
myFont.Strikethrough = myCols("Strikethrough")
myFont.ThemeColor = myCols("ThemeColor")
myFont.TintAndShade = myCols("TintAndShade")
myFont.ThemeFont = myCols("ThemeFont")
End With
End Sub
少々回りくどいVBAコードとなっていますが、
アクティブブックでなければ、スタイルを正しく取得することが出来ません。
配列やDictionaryでも同じことが出来ます。
そして、
Book1をアクティブにして、格納されているCollectionを使って標準フォントを設定しています。
Sub sample2()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim dblCal As Double
Set ws1 = Workbooks("Book1.xlsm").Worksheets(1)
Set ws2 = Workbooks("Book2.xlsm").Worksheets(1)
Do Until Abs(1 - dblCal) < 0.01
dblCal = (ws2.Columns(1).Offset(, 1).Left - ws2.Columns(1).Left) _
/ (ws1.Columns(1).Offset(, 1).Left - ws1.Columns(1).Left)
ws1.Columns(1).ColumnWidth = ws1.Columns(1).ColumnWidth * dblCal
Loop
End Sub
Sub sample3()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim dblCal As Double
Set ws1 = Workbooks("Book1.xlsm").Worksheets(1)
Set ws2 = Workbooks("Book2.xlsm").Worksheets(1)
Do Until Abs(1 - dblCal) < 0.01
dblCal = (ws2.Rows(1).Offset(1).Top - ws2.Rows(1).Top) _
/ (ws1.Rows(1).Offset(1).Top - ws1.Rows(1).Top)
ws1.Rows(1).RowHeight = ws1.Rows(1).RowHeight * dblCal
Loop
End Sub
sample2が列幅をピクセルで合わせています。
sample3が行高をピクセルで合わせています。
元々の差異が大きい場合、
一回の実行では、数値誤差で同じピクセル数にならないからです。
しかし、
スタイルだけではなく、各種の標準設定はあまり変更すべきではありません。
・複数の人でExcelファイルを共有する場合
・複数のブックを同時に扱う場合
このような場合は、標準を変更してしまう事はトラブルの元となります。
標準を変更して使うメリットは、シート作成時の省力化ですが、
・1セルに設定したら、それを他のセルにコピペ
・1シートに設定したら、それを他のシートにコピペ
結果として、それほどの作業時間の違いはありません。
自分専用で使うExcelなら、好きなようにすれば良いことは言うまでもありません。
同じテーマ「マクロVBA技術解説」の記事
フォルダー・ファイル・ブック・シートの文字制限
Excel2013におけるScreenUpdatingの問題点
Dir関数の制限について
よくあるVBA実行時エラーの解説と対応
Application.Goto使用時の注意
ScreenUpdating=False時にエラー停止後にシートが固まったら
標準スタイル違いの問題点:標準フォント複写、列幅をピクセルで合わせる
VBAでエラー行位置(行番号)を取得できるErl関数
WorksheetFunction.Matchで配列を指定した場合の制限について
VBAでシート関数使用時の配列要素数制限
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブック・シートの選択(Select,Activate)|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- 標準スタイル違いの問題点:標準フォント複写、列幅をピクセルで合わせる
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。