2017年3月22日VBAVBAのフォームは通常の方法ではサイズの変更ができないVBAでフォームを作成した場合に、ひとつ不便なことがあります。それはフォームのサイズが変更できないことです。×ボタンが付いているだけで、最大化や最小化もできません。Win32APIを使えばサイズの変更は可能しかし、サイズ変更したい場合はやはり出てきます。テキストボックスを広げたい場合などですね。VBAの機能だけでは実現できませんが、Win32APIを利用すると実現できます。ソースコード以下のソースコードは標準モジュールに書いていきます。フォームのサイズ変更をするには以下の4つを用意します。以下のWin32APIの参照宣言は標準モジュールの先頭に書いてください。Longフォームのサイズ変更をする関数フォームのサイズの変更を行うメインの関数です。Subこのフォームサイズ変更処理の簡単な説明です。アクティブフォームのハンドル(フォームの識別番号)を取得します。GetActiveWindowの部分です。現在のフォームのスタイル(表示状態)を取得します。GetWindowLongの部分です。フォームの表示状態変数に、サイズ可変と最小ボタンと最大ボタンを追加します。再度ウインドウのスタイルを設定します。SetWindowLongの部分です。処理自体は簡単な流れですが、Windowsプログラミングは見慣れない定数などが多くあり、それらの知識が要求されるため、もしカスタマイズをする際にはいろいろと調べる必要が出てきます。WS_MAXIMIZEBOXの部分を以下のように変更します。次に、フォームからその関数を呼ぶ処理です。フォームがアクティブになった際のイベント関数であるUserForm_Activate()を作成して、フォームサイズ変更関数を呼びます。フォームが選択された際にフォームサイズ変更関数を呼ぶことで、サイズ変更を実現します。ここでは例としてリストビュー(lstvCell)を用意しています。最後にフォームサイズ変更時の処理です。フォームのサイズを変更する場合は、一緒に他のコントロールのサイズも変更することがほとんどです。そのため、他のコントロールのサイズを設定する必要があります。フォームサイズが変わったときのイベント関数であるUserForm_Resize()を作成して、他のコントロールのサイズ変更処理を記述します。ここでは例としてリストビュー(lstvCell)のサイズを変更しています。UserForm_Resize()でのテキストボックス等のサイズ設定の際には、微調整が必要な場合があります。以下の例ではListViewのサイズ変更時に、高さに+36して調整しています。そのあたりは作りながらやってみてください。Heightの+36は目視調整した。Heightの+36は目視調整した。Sub是非活用してください。Excel作業をVBAで効率化シェアお問合わせTOPへ。