エクセル顧客管理
コントールについて

Excelマクロを駆使したカスタマイズ可能なエクセル顧客管理、エクセルVBAの学習教材
公開日:2013年5月以前 最終更新日: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で変更できます。


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

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


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

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



では、これくらいで。


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


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


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


ではまた。





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

第19回.納品書を作成、顧客情報を取得(2)
第20回.納品書を作成、顧客情報を取得(3)
第21回.イベント処理について
第22回.コントールについて
第23回.納品書を作成、商品情報を取得(1)
第24回.納品書を作成、商品情報を取得(2)
第25回.納品書を作成、商品情報を取得(3)
第26回.WorksheetFunctionについて
第27回.RangeとCellsの深遠
第28回.納品書データをデータベース化(1)
第29回.納品書データをデータベース化(2)


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

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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