エクセル顧客管理
コントロールのボタンを配置

Excelマクロを駆使したカスタマイズ可能なエクセル顧客管理、エクセルVBAの学習教材
公開日:2013年5月以前 最終更新日:2021-02-12

第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 btn一覧へ_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のように、定数が容易されています。

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


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


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



続いて、

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


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)


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

ブール型(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)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




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


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


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