• ベストアンサー

〔ExcelVBA〕ユーザーフォームテキスト

KenKen_SPの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

> 簡単に言うとどのような利用の仕方をするものなのでしょうか? クラス化する最大のメリットはインスタンスが可能であること。 と言うと難しい話のように聞こえますが、実は単純な話です。今回の事例 で説明すると...電卓の入力動作には2種の制御が必要です。  1. 入力をリアルタイムで桁区切りの数値にフォーマットする    -->他ご回答にあるとおり、Change イベントで実現します  2. 入力時に数値しか入力できない    -->KeyDown イベントで実現します 通常ですと、以上のように2つのイベントプログラムを書くことになりますね。 では、この動作を100個のテキストボックスに適用するとしたらどうしますか? 必要イベント2×100個のテキストボックス = 200 で 200 のイベントプログラムを書きますか? では1000個なら? 全く同じ動作なのに効率が悪いですよね。そういう時にクラスが非常に 役立ちます。今回の場合、例え 100個のテキストボックスであろうとも Private NumCtrl(1 To 100) As New NumTextbox Private Sub UserForm_Initialize()   For i = 1 To 100     Set NumCtrl(i).Bind = Me.Controls("TextBox" & Cstr(i))   Next i End Sub これだけです。仮にテキストボックスが 1000 でも 2000 でもこの方法なら どれだけ増えても簡単です。 同じ機能を複製して使いたいとき...そんな時にクラスが使われます。 2次的なメリットは機能のカプセル化です。 クラスでは決められたプロパティーを設定したり、機能を呼び出すだけで ひとかたまりの処理がなされます。この時、クラス内のコードを理解して 使う必要はありません。 身近な例で言えば、Excel ワークシートや ThisWorkbook モジュール、 フォームは実は全てクラスなんですよ。 例えば、フォームのタイトルを変えるには   Userform1.Caption = "SAMPLE FORM" なんてコードを書きます。Caption プロパティーを設定するだけで、ウインドウ のタイトルが変わるんです。これは実際にはフォームクラスが裏で複雑な 処理をして Windows に数多くのメッセージを送って、Windows から返って きたメッセージを解析して、やっと書き換わるものなのですが、ユーザーは その煩雑な部分を意識することはありません。   Userform1.Caption = "SAMPLE FORM" これだけ書けば、ちょろっと書き換わるんです。今回の NumTextbox クラス も利用するのに必要なコードは、   NumCtrl(1).Bind = Textbox1 といった単純なコードです。 本当はものすごく複雑なことをやってるのだけれども、それをユーザーが 意識することなく、このように単純な手続きのみで処理ができる... これがカプセル化です。 クラス...と聞いて腰が引ける人が多いのですが、上述のとおりコードを書く 人は、普段からクラスを使っているのです。意識してないだけなんですよね。 もちろんクラスを書くにはそれなりの知識が必要なのですが、コツさえ掴んで しまえばそれほど難しくもなく、クラスを利用するに至っては非常に簡単な ことなのです。

shunshun-dash
質問者

お礼

ありがとうございます。 効率よくコードを記述するためにも、将来的には心得たいですね。 でも、クラスの意味するところのイメージはできました。

関連するQ&A

  • ExcelVBAでセルをクリックしてユーザーフォームを表示するには

    OfficeExcel2003を使用しています。 ユーザーフォームのテキストボックスやコンボボックスに文字や数値を入力し、OKボタンを押せばエクセルのセルに記入できるようにしようと思ってます。 フォームはなんとか(形だけですが..)作成できたのですが、そのフォームを呼び出す方法として、入力したい行のA列のセルをクリックすればユーザーフォームが表示されるようにしたいのです。 ネット上でいろいろ検索してみましたがなかなか見つけることができませんでした。 初歩的な質問かもわかりませんが、教えて頂けないでしょうか。 宜しくお願い致します。

  • VBAユーザーフォームで

     エクセルVBAでユーザーフォームより、テキストボックスで入力させたものをセルに表示させようとしています。  テキストボックスは1と2があり、テキストボックス1で入力した値の最初の5文字+固定値をテキストボックス2に自動で入力(表示)したいのですがなかなかうまくいきません。(自動入力後、手動で一部修正します。)  VBAをはじめたばかりの初心者ですが、どうぞよろしくお願いします。

  • エクセルのユーザーフォームについて

    エクセルマクロのユーザーフォームのテキストボックスに セルの値を表示する方法で質問です。 ユーザーフォームを表示するとその時点での セルの値はテキストボックスに表示されているのですが ユーザーフォームを表示したまま 別のブックのセルを選んだ際に そのセルの内容がテキストボックスに表示されるようにしたいです。 ボタンや、なにかをするわけではなく 自分で任意のセルを選択したら、という事です。 ユーザーフォームには selectionchange などがないのでどうすれば良いかわかりません。 宜しくお願いします。

  • 【VBA】ユーザーフォームから、シート上のテキストボックスを操作

    ユーザーフォームで入力した値を、シート上にあるテキストボックスに入力させたいのですが、 どのように記述すればいいのでしょうか?(ボタンで操作) またおなじくテキストボックスの大きさ、フォントの大きさ、などを操作するにはどのようにしたらいいですか?

  • ユーザーフォームについて

    エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

  • ユーザーフォームのテキスト印刷

    ユーザーフォームでテキストだけ印刷させる方法はありますか? ユーザーフォームに何箇所か入力するリストボックス、テキストボックスなどがあり、すべてを入力した後、最後にエクセルに登録するようなフォームなのですが、登録する前にそれらを印刷できればと思います。 登録したエクセルを印刷してもいいんですが、他の情報とかがあるのでユーザーフォームだけを印刷したいです。また、ユーザーフォームをそのまま印刷するとよけいな装飾なども印刷されトナーがもったいないのでそれもしたくはありません。 宜しくお願いします。

  • ExcelVBA テキストボックスについて

    フォーム上100個のテキストボックスがあります このテキストボックスに入力制限を加えたいのですが、どのように書けばよろしいでしょうか?  ・半角数字だけしか入力できない(計算に使う)  ・入力すると、1,234,567のような表示になり、右詰め  ・10桁までしか入力できない  ・予定の計算結果だと、10億を超えない  ・計算結果は数字が入力されるたびLabel1に表示される 私の作ったマクロだと、全てのテキストボックスに同じようなマクロを登録する結果になってしまい、これってもっと短くかけるのでは?と思い、質問いたしました よろしくおねがいします

  • ユーザーフォームで数字にカンマを付けたい

    今EXCEL2003を使用しています。 ユーザーフォームのテキストボックスに数値を入力した際 例えば1000→1,000のように自動で千単位でカンマを表示させる事は可能でしょうか?

  • ユーザーフォームのテキストボックスに配列の値を読み込む方法を教えて下さい

    お世話になります ユーザーフォームのリストボックスにAddItemで記述したデータを表示するような形で、ユーザーフォームのテキストボックスに配列にとりこんであるデータの値を順番に読み込むようにしたいのですが、このようなことができるのでしょうか? どなたか教えて頂けないでしょうか

  • ExcelVBA ユーザーフォームに関しての質問です。

    ExcelVBA ユーザーフォームに関しての質問です。 ユーザーフォームでフレームを使って、 フレーム内に複数のチェックボックスを配置したとします。 行いたい作業としては次の2点 ?フレーム内に配置したチェックボックスのうち、チェックが入っているものだけの数を調べる ?チェックが入っているボックスの値(caption)を取得して、変数に入れる 以上のことができるでしょうか?