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



最終更新日:2018-02-21

第13回.コントロールのボタンを配置


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


前回は、話が難しかったかもしれません、


今回は簡単です、


コントロールのボタンを配置して、マクロを割り当てます。


「顧客一覧」から、新規登録する為に、「顧客登録」のシートへ移動する為に使用します。


直接シート選択すれば良さそうですが、最終的には、シート名は非表示にすることになりますので。



また、「顧客登録」のシートも、枠線等は不要ですので、非表示にします。


さらに、不使用のセルに対する、操作も禁止するように設定します。



シート「顧客一覧」の上部(1〜2行目)にボタンを配置します。


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

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

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

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

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

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

5.「Caption」を、「新規」に変更」

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

7.VBEが起動され、

  Option Explicit

  Private Sub btn新規_Click()

  End Sub

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


この、Subモジュールが、ボタンがクリックされた時に起動されるモジュールです。

この中に、処理を記述します。

Private Sub btn新規_Click()
  シート取得("顧客登録").Select

End Sub

と、1行だけ追加して下さい。


エクセルに戻って下さい。Shif+F7

「デザインモード」を終了して下さい。


これで、ボタンをクリックすると、「顧客登録」へ移動するはずです。


シート「顧客登録」の上部(1〜2行目)にボタンを配置します。


手順は、前述と同じです。

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

5.「Caption」を、「一覧へ戻る」に変更」

の部分だけ変更して下さい。


そして、以下のコードを追加して下さい。

Private Sub 一覧へ_Click()
  Dim rtn As Integer 'メッセージの応答の受取
  
  rtn = MsgBox("入力中のデータは破棄されます" & vbLf & vbLf & _
          "よろしいですか?", vbYesNo, "確認")
  If rtn = vbNo Then '「いいえ」の場合は終了
    Exit Sub
  End If
  シート取得("顧客一覧").Select
End Sub


MsgBoxの説明が少し必要ですね。

以前に出てきたのは、「OK」ボタンだけのメッセージでした。

ここでは、処理の選択を、「はい」「いいえ」で使用社に選択させています。

vbYesNoは、「はい」「いいえ」のボタンを表示します。

そして、そのメッセージに対する応答が、rtnに入ります。

このrtnはIntegerの整数値ですが、数値を覚える必要はありません。

vbYes、vbNoのように、定数が容易されています。

"確認"の引数は、タイトルになります。


このようなメッセージが表示されます。


これで、「顧客一覧」と「顧客登録」の行き来がらくになりましたね。



続いて、

「顧客登録」の枠線、見出しを非表示にし、さらに未使用のセルを操作不可に設定します。


Subプロシージャー「顧客登録シート作成」を修正します。

Sub 顧客登録シート作成()
  Dim r1 As Long, c1 As Long '顧客一覧の見出しの行,列位置
  Dim r2 As Long, c2 As Long '顧客登録の行,列位置
  Dim intW As Integer     '列数計算用
  
  Call マクロ開始処理

  r1 = 開始セル取得("顧客一覧").Row  '顧客一覧の開始行位置を取得
  c1 = 開始セル取得("顧客一覧").Column '顧客一覧の開始列位置を取得
  r2 = 開始セル取得("顧客登録").Row  '顧客登録の開始行位置を取得
  c2 = 開始セル取得("顧客登録").Column '顧客登録の開始列位置を取得

  With シート取得("顧客登録") 'Worksheets("顧客登録")を省略可能とする
    .Unprotect '保護解除
    .UsedRange.Clear '顧客登録の使用セルを全てクリア
    
    '顧客一覧の3行目を2列目から右に進み、空白セルになるまで繰り返す
    Do Until IsEmpty(シート取得("顧客一覧").Cells(r1, c1))
      '顧客一覧の見出しを顧客登録にコピー
      シート取得("顧客一覧").Cells(r1, c1).Copy .Cells(r2, c2)
      '顧客一覧のデータ部を顧客登録にコピーし、データは消去する
      シート取得("顧客一覧").Cells(r1 + 1, c1).Copy Destination:=.Cells(r2, c2 + 1)
      .Cells(r2, c2 + 1).ClearContents
      '顧客一覧の列幅が、顧客登録の列幅の何個分かを計算し、セルを結合する。
      intW = Round(シート取得("顧客一覧").Columns(c1).Width / .Columns(c2 + 1).Width, 0)
      .Range(.Cells(r2, c2 + 1), .Cells(r2, c2 + 1 + intW)).MergeCells = True
      '罫線を引く
      .Range(.Cells(r2, c2), .Cells(r2, c2 + 1 + intW)).Borders.LineStyle = xlContinuous
      'セルロック解除
      .Range(.Cells(r2, c2 + 1), .Cells(r2, c2 + 1 + intW)).Locked = False
      c1 = c1 + 1 '顧客一覧の列を右に
      r2 = r2 + 2 '顧客登録の行を2つ下に
    Loop
    
    .EnableSelection = xlUnlockedCells 'ロックしていないセルのみ操作可能
    .Protect DrawingObjects:=False, Contents:=True, Scenarios:=False 'シート保護
    .Select '指定シートへ移る
    開始セル取得("顧客登録").Offset(0, 1).Select '開始位置の右横のセルを選択
  End With
  
  With ActiveWindow '現在のウインドウに対して
    .DisplayGridlines = False '枠線非表示
    .DisplayHeadings = False '見出し非表示
  End With
  
  Call マクロ終了処理
End Sub

太字が変更箇所です。


指定シートへ移動と、セル選択は、Withの中に移動しました。

大した意味はありません、コーディングの見た目くらいです。


.Unprotect

シート保護を解除します。


.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False

シートを保護します。

引数により、保護するものを指定できます。

ここでは標準の設定にしています、通常はこれで良いでしょう。

詳細については、ヘルプ等を参照して下さい、引数が多すぎて、説明しきれませんので。


.EnableSelection = xlUnlockedCells

ロック解除したセル以外は、使用不可に設定します。


With ActiveWindow '現在のウインドウに対して
  .DisplayGridlines = False '枠線非表示
  .DisplayHeadings = False '見出し非表示
End With

これは、コメント通りです。


結果は実行して確認して下さい。


なんとなくもっともらしくなったと思います。



今回はここまで。


内容は簡単ですが、操作を説明すると結構大変でしたね。



ここまでの、エクセルのサンプルファイルです。






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

第10回.コーディングとデバッグ
第11回.顧客登録より顧客一覧へ更新
第12回.最終行の判定、Rangeオブジェクトと配列、高速化の為に
第13回.コントロールのボタンを配置
第14回.オブジェクトとプロパティの真実(GW特別号No1)
第15回.記述による処理速度の違い(GW特別号No2)
第16回.処理速度の向上はどこまでやれば良い(GW特別号No3)
第17回.商品マスタを作成、2段階の可変リスト
第18回.納品書を作成、顧客情報を取得(1)
第19回.納品書を作成、顧客情報を取得(2)
第20回.納品書を作成、顧客情報を取得(3)

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

エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)
ファイルの操作|MOS VBAエキスパート対策(3月14日)

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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.とにかく書いて見よう(Sub,End Sub)|VBA入門
9.繰り返し処理(For Next)|ExcelマクロVBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • コントロールのボタンを配置

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


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





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

    本文下部へ

    ↑ PAGE TOP