Excelのユーザーフォームでフレーム(Frame)内にオプションボタン(OptionButton)を配置した際、選択すると勝手に上へズレて文字が隠れてしまう現象があります。この問題はバグのように見えますが、実はプロパティ設定や配置方法に起因するケースが多く、適切に対処することで安定した表示にできます。本記事では原因と対処法を整理して解説します。
オプションボタンがズレる現象の正体
フレーム内のオプションボタンは、選択状態になると内部的に再描画される仕組みがあります。
この再描画時に、配置基準やフォントサイズの影響で位置がわずかに変わることがあります。
特にFrameのサイズがタイトな場合や、AutoSize設定が影響していることが多いです。
原因① Frameのサイズと余白不足
最も多い原因はフレームの高さや余白が足りないケースです。
オプションボタンは選択時にフォーカス枠が表示されるため、その分の余白が必要になります。
例えばFrameの高さをギリギリに設定していると、上方向に押し出されるように見えることがあります。
原因② AutoSizeプロパティの影響
FrameやOptionButtonのAutoSizeがTrueになっていると、表示内容に応じてサイズが変わることがあります。
この結果、クリック時に再計算されて位置がズレるように見えることがあります。
特に英語版環境やフォント変更時に起こりやすい挙動です。
原因③ Captionやフォントサイズの不一致
オプションボタンの文字サイズがFrameより大きい場合、描画時にレイアウトが崩れます。
また日本語フォントと英数字フォントの違いでも高さ計算が変わることがあります。
例えばMSゴシックとMeiryoでは表示位置が微妙に変わることがあります。
解決方法① 余白を十分に確保する
Frameの高さを少し大きめに設定することで、ズレを防ぐことができます。
オプションボタン同士の間隔も広めに取ることで安定します。
実務では上下に2〜4ポイント程度の余白を追加するのが一般的です。
解決方法② AutoSizeをFalseに設定する
FrameおよびOptionButtonのAutoSizeをFalseにすることで自動調整を防ぎます。
これによりクリック時の再描画でもサイズ変動が起こりにくくなります。
特にレイアウトが決まっているフォームでは必須の設定です。
解決方法③ 配置をコードで固定する
VBAでInitializeイベント時に位置を明示的に指定する方法も有効です。
例:OptionButton1.Top = 10 のように固定値を設定します。
これにより再描画による微妙なズレを防止できます。
まとめ
オプションボタンが上にズレる現象は、主にFrameの余白不足やAutoSize設定、フォント影響によって発生します。
構造的な不具合ではなく、レイアウト設計の問題であるケースがほとんどです。
余白調整・AutoSize無効化・位置固定の3点を見直すことで安定したユーザーフォームを作成できます。


コメント