ユーザーフォームにワークシートを表示させる。

ユーザーフォーム上で表形式に入力ができるようにしたくなることがあります。しかし標準状態では適当なコントロールがありません。こんな時は「Microsoft Office Spreadsheet」コントロールが利用できます。(本機能はExcel2000以降で動作します。但し、Excelのインストールオプションによってはインストールされていないこともありますので、その場合は「追加/削除」でコンポーネントを追加して下さい。)
本ページの内容は「Office 2007」以降では動かないようです。   私のところの環境では、Excelは「97」以降のバージョンを共存させているため、気がつかないことでしたが、 「Office 2007」では「Office xxx Web Components」そのものがなくなってしまったそうです。 Office 2000Office 2003の間でも互換性がないようでOffice 2000で作成したものをOffice 2003で開くと「Spreadsheetのオブジェクトがない」というエラーになってしまいます。 一応紹介だけしますが、実用性は疑わしいです。

まず、「コントロールの追加」を行ないます。
コントロールの追加
ユーザーフォームを追加してから、ツールボックス上で右クリックメニューの「その他のコントロール」を選択します。
コントロールの追加
「利用可能なコントロール」で「Microsoft Office Spreadsheet」にチェックし「OK」をクリックします。
Excelのバージョンにより名称の後ろの数字は異なります。以降の説明でも判るように、バージョン間の互換はあまりないようです。

Microsoft Office Spreadsheetコントロールが見つからない! 「利用可能なコントロール」の一覧に「Microsoft Office Spreadsheet」が見あたらない場合は、Microsoft OfficeMicrosoft ExcelCD-ROMから「機能の追加/削除」を選択して、「Office xxx Web Components」を追加インストールさせて下さい。
    見あたらない場合はOfficeWebComponentsを追加インストール
これはExcel 2002の単独パッケージのセットアップの画面ですが、「Office XP Web Components」と「Office 2000 Web Components」の両方が選択できるようになっています。このことは単純に上位互換がないことを示しているので、異なるバージョンの環境に配布することには向かないかも知れません。
但し、「Office 2007」ではこの方法も採ることはできないようです。今後のことを考えるとこのページで紹介している方法自体が否定されてしまいます。やはり「表」はワークシートで処理しないさいということなのでしょう。

Spreadsheetの追加
コントロールの追加を行なうと、このように「Spreadsheet」コントロールが追加されます。以降は他のコントロールと同様にフォームに貼り付けて利用できます。
なお、「利用可能なコントロール」には数多くのコントロールが表示されますが、何でも利用できるわけではありません。現在の環境と作成したワークブックを利用する環境の違いによって動作しない場合もあります。「Microsoft Office ...」のコントロールはExcel2000以降で標準搭載ですので利用可能です。
ツールボックスから「Spreadsheet」をフォームに貼り付けます。
Spreadsheetを貼り付けた状態
続いて、シートのデザインを行ないます。まず、項目の見出しや行列状態を設定して下さい。
それ以外は「プロパティ」の「項目別」タブにある「(プロパティページ)」の右端のボタンをクリックすると表示される「プロパティツールボックス」で細かいデザイン設定を行ないます。
「プロパティツールボックス」を選択
「プロパティツールボックス」を選択すると別ウィンドウで「スプレッドシートプロパティツールボックス」が表示されます。濃いグレーの部分をクリックするとグループごとの詳細設定画面が開きます。
スプレッドシートプロパティツールボックス(11.0)
↑これはExcel2003(Microsoft Office Spreadsheet11.0)のプロパティの画面です。
スプレッドシートプロパティツールボックス(10.0)
↑これはExcel2002(Microsoft Office Spreadsheet10.0)のプロパティの画面です。
スプレッドシートプロパティツールボックス(9.0)
↑これはExcel2000(Microsoft Office Spreadsheet9.0)のプロパティの画面です。
項目はシート全体のもの、選択セルごとのものが混在しているため判りにくいですが、「プロパティツールボックス」を表示させたままでシート上の選択セル範囲をクリックし直すとセルに対応している項目は内容が変わります。

ツールバーや行列番号を非表示にし、入力項目以外を保護するなどでこのようになります。
デザインの完成

Spreadsheet」はコントロール内でTabキー移動が発生するため、Tabキー動作では一旦「Spreadsheet」に入ると外へ出なくなってしまいます。そこでサンプルでは項目間で位置を判断して強制的にSetFocusメソッドを記述してカーソル移動させるようにしています。