第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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.条件分岐(Select Case)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。