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



最終更新日:2014-12-15

第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

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


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


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



今回はここまで。


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



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






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

第14回.オブジェクトとプロパティの真実(GW特別号No1)
第15回.記述による処理速度の違い(GW特別号No2)
第16回.処理速度の向上はどこまでやれば良い(GW特別号No3)
第17回.商品マスタを作成、2段階の可変リスト
第18回.納品書を作成、顧客情報を取得(1)
第19回.納品書を作成、顧客情報を取得(2)
第20回.納品書を作成、顧客情報を取得(3)

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

データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
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日)

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

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



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

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


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

    ↑ PAGE TOP