エクセル顧客管理 | 第22回.コントールについて | Excelマクロを駆使したカスタマイズ可能なエクセル顧客管理、エクセルVBAの学習教材



最終更新日:2014-11-11

第22回.コントールについて


エクセルで顧客管理を作ります、


今回は、コントロールについての、補足と復習です、


マクロを作っても、起動方法がマクロの一覧からでは、ちょっと淋しいです。


また、色々なコントロールを使えるようになれば、出来る事が増えてきます。



まずは、この違いから。


2007以降なら、「フォーム コントロール」と「ActiveX コントロール」

2003なら、「フォーム」と「コントロール ツールボックス」


初めて使おうとした時は、あれっ、何が違うのって思いますよね。


難しい話はともかく(説明出来ないし)、「フォーム コントロール」は古いエクセルからの継続です。


「ActiveX コントロール」は、確かExcel97から使えるようになりました。


余談ですが、Application.WorksheetFunction.関数も、確か97からだったはずです。

その前は、Application.関数でした。


私が思うに、エクセルは97が一つの完成形だと思っています。


その後の拡張は、無理やり機能追加していたり・・・まあそれはともかくとして。


ですから、現在では、「ActiveX コントロール」を使うべきでしょう。


作成中のエクセルでは、「ActiveX コントロール」のみ使用します。



コントロールの作成方法


1.2003なら、「表示」→「ツールバー」→「コントロールツールボックス」→ボタンを選択する

  2007以降なら、「開発」→「挿入」→「ActiveXコントロール」→ボタンを選択する

2.十字カーソルの状態で、シートの配置する場所をドラッグして配置

3.ボタンをクリックし、ツールバーの「プロパティ」

  または、右クリックで「プロパティ」

4.「プロパティ」の「オブジェクト名」を、「○○○」と変更

5.「Caption」を、「○○○」に変更」

6.ボタンをダブルクリック、または、右クリックで、「コードの表示」

7.VBEが起動され、

  Option Explicit

  Private Sub ○○○_Click()

  End Sub

  が自動的に作成されたはずです。


上は、ボタンの例です。


選択後に、ドラッグで位置変更したり、サイズ変更が可能です。


また、位置の微調整は、矢印キー(↑↓→←)で、少しづつ移動します。


また、プロパティを変更することで、外観を変更することが出来ます。


BackColor、ForeColor、Font等です、いろいろ変更して確認して見て下さい。



コマンドボタン


これは、マクロを起動する為に使用します。


マクロを作った後、このボタンを作成し、クリックイベントのモジュール、


つまり、「ボタン名_Click」の中で、作成済のモジュールをCallしてやればよいです。


もちろん、「ボタン名_Click」の中に、いろいろ記述しても構いません。


他の用途ではあまり使いませんが、


例えば、マウスが上に来た時に、色を変更するのは、

Private Sub ボタン名_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ボタン名.BackColor = RGB(0, 0, 255)

End Sub

これで、マウスを重ねると、ボタンが青くなります。

ちなみに、元には戻せません(笑)・・・いや、他のイベント等で戻します。


まあ、クリック以外は、おまけみたいなものです。


ただ、シングルクリックではなく、ダブルクリックで起動したいのなら、


ボタン名_DblClickを使う事になります。


ただし、シングルとダブルを同時には使えません、というか、操作分け出来ないし。



コンボボックス


この「コンボボックス」が理解出来れば、「リストボックス」も同じようなものですし、


他のコントロールも直ぐに理解できると思います。


コンボボックスのリスト(一覧)への設定


コンボボックス名.Clear

これで、全てのリストが消去されます。


コンボボックス名.AddItem "○○1"

コンボボックス名.AddItem "○○2"
順に先頭から、リストに追加されます。


List() = 配列

配列が、一気にリストに入ります。


コンボボックス名.RowSource = "セル範囲"

セル範囲を参照します。

私は使いませんが、固定範囲なら便利かもしれません。


コンボボックス名.ColumnCount = 列数
カラム数を指定します。

指定しない場合は、1列になります。


コンボボックス名.ColumnWidths = "列1の幅;列2の幅;・・・"

列毎の幅を指定します。

標準では、全列とも同幅になります。



コンボボックスの選択されたリストを取得


cmb顧客一覧.ListIndex

選択されているリストのインデックス(0開始)を取得します。


cmb顧客一覧.List(インデックス, [列])

指定のインデックス位置のリストを取得します。

1列目の場合は、列を省略できます。



では、作成済のエクセルを直してみます。


「納品書」のコンボボックスを3列表示に変更します。

以下は、「納品書」のシートモジュールです。

Private Sub Worksheet_Activate()
  Dim ary As Variant
  Dim r1 As Long, c1 As Long
  Dim strWidth As String
  
  r1 = 開始セル取得("顧客一覧").Row
  c1 = 開始セル取得("顧客一覧").Column

  With シート取得("顧客一覧")
    ary = .Range(.Cells(r1, c1), .Cells(最終行取得(シート取得("顧客一覧")), c1 + 2))
    strWidth = .Columns(c1).Width & ";" & _
          .Columns(c1 + 1).Width & ";" & _
          .Columns(c1 + 2).Width
  End With
  
  With cmb顧客一覧
    .Clear
    .ColumnCount = 3
    .ColumnWidths = strWidth
    .List() = ary
  End With
End Sub

Private Sub cmb顧客一覧_Change()
  If cmb顧客一覧.ListIndex < 0 Then
    Exit Sub
  End If
  Range("納品書_顧客番号") = cmb顧客一覧.List(cmb顧客一覧.ListIndex, 0)
End Sub

変更箇所を太字にしています。


まあ、なんとなく、スマートになったように感じます。


「顧客一覧」の当該列の列幅を、コンボボックスの列幅に採用しています。

コンボボックス自体の幅も変更するなら、

コンボボックス名.Widthで変更できます。


まあ、好みではありますが、コンボ自体の幅が狭く固定されている場合は、当初の方が良いですが、

幅に余裕があるなら、複数列の指定の方が見やすくなります。


今回は、複数列を採用します。

やってみたら、見やすかったので。



では、これくらいで。


次回は、どうしましょうか・・・


プログラムの作成を進めるか、それとも補足説明をするか。


まあ、ゆっくり考えます。


ではまた。






同じテーマ「エクセル顧客管理」の記事

第23回.納品書を作成、商品情報を取得(1)
第24回.納品書を作成、商品情報を取得(2)
第25回.納品書を作成、商品情報を取得(3)
第26回.WorksheetFunctionについて
第27回.RangeとCellsの深遠
第28回.納品書データをデータベース化(1)
第29回.納品書データをデータベース化(2)

新着記事 ・・・新着記事一覧を見る

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.定数と型宣言文字(Const)|ExcelマクロVBA入門
8.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • コントールについて

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP