実用に耐えるユーザーフォーム作成のコツは具体的実例を教科書に

3tendenusereyecatch

今回は第5回目の「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」についての記事です。

ユーザーフォームつまりUIを使って、エクセルソフトをコントロール出来るようにする方法についてです。

こんにちは、じゅんぱ店長(@junpa33)です。

 

ユーザーフォームはUIです。

VBAコードのバグ修正の様に何度も仕様変更はできません。

この問題解決の最速は、実例を教科書にすることです。

利用者側からの使いやすさやデザインや仕様は必須です。

 

ユーザーフォームと一言で言っても、安直にボタンや入力ボックスを配置するだけではいけません。

何かの練習のために作るのではなく、「とりあえず試しに作ります。」と言っても、

実際にそれを仕事で使っていこうとするなら、

その利便性、使いやすさ、実用に耐えるものにしなければ意味がありません。

 

その前に前回の記事を読み直すにはこちら↓になります。

Excel帳票のデータ保存はVBA誤動作の対策を必ずしよう。

3denpyohozoneyecatchExcel帳票のデータ保存はVBA誤動作の対策を必ずしよう。

 

見積納品請求3点伝票作成ソフト作成一覧
santenden_tempeyecatch
これからスタートするテーマです。販売に関しての伝票(見積書、納品書、請求書)を、自動で作成するソフトをエクセルVBAベースで作成していきます。 今回は第1回目として、そこに利用する伝票のテンプレートを、エクセルのシートに作成していきます。 ...
続きを読む
santenden_tyoueyecatch
先回から販売の帳票(見積書、納品書、請求書)を自動で作成するエクセルソフトを作っています。 今回は第2回目、必要なデータをテンプレートに移し、計算し、帳票を仕上げていきます。 こんにちは、じゅんぱ店長(@junpa33)です。 帳票のデータ ...
続きを読む
hyohyoineyecatch
引き続き販売に関する帳票(見積書、納品書、請求書)を自動で作成するエクセルソフトの組み立てについてです。 今回は第3回目、先回仕上げた帳票をプリントアウトできるように設定していきます。 こんにちは、じゅんぱ店長(@junpa33)です。 苦 ...
続きを読む
3denpyohozoneyecatch
販売帳票(見積書、納品書、請求書)を自動で作成するエクセルソフトの組み立てです。 今回は第4回目です。完成した帳票をファイル名を付けて、所定の別フォルダーに保存できるようにします。 こんにちは、じゅんぱ店長(@junpa33)です。 Exc ...
続きを読む
3tendenusereyecatch
今回は第5回目の「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」についての記事です。 ユーザーフォームつまりUIを使って、エクセルソフトをコントロール出来るようにする方法についてです。 こんにちは、じゅんぱ店長(@junpa3 ...
続きを読む
3tendenhaneyecatch
今回は第6回目の「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」についての記事になります。 こんにちは、じゅんぱ店長(@junpa33)です。 官公庁で求められる3点セット伝票は、市販の売上管理ソフトでもうまく作れません。 た ...
続きを読む
3tentorisetueyecatch
今回は「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」の操作方法についての記事です。 こんにちは、じゅんぱ店長(@junpa33)です。 6回に渡り行ってきました、販売の3点伝票を作成するエクセルソフトの使い方を最初から通して ...
続きを読む
3tendenmatomeyecatch
見積書、納品書、請求書を同一書式で作成するエクセルVBAソフトを使うことで、大幅な事務効率化を図ることが出来ます。 こんにちは、じゅんぱ店長(@junpa33)です。 官公庁や公共団体などへ納品・納材する中で必要とされる帳票があります。 見 ...
続きを読む

 

 

 

実用的なVBAユーザーフォームを作成したい

 

「ユーザーフォーム」はエクセルVBAを触りだすと、誰しも使い手になりたい(?)と思うVBAの機能ではないでしょうか。

「やった!できた!」と言っても、利用する側から見れば、単に

「ボタンを押せば答えが出る」とか「記入欄に項目内容を入れれば住所録ができる」とか

「何か楽になった」というほどの印象かもしれません。

それでいいでしょうか?

ホントはもっと、実用的に上手く使える「うん これはいい!」と言われるようなTechを持ちたいなぁと思っているのではないですか。

 

ユーザーフォームに配置したボタンがイマイチ動かない

 

また、こういうこともよく起こります。

ユーザーフォームを作ろうと、コントロールのボタンを配置しました。でも全く無反応、イマイチ動かない。

動いたと思ったらなぜかエラーストップ。これの繰り返し、ストップが連発。

どうして?を調べるのに、まず最初にエクセルVBAの解説書、参考書のユーザーフォームの章を読むでしょう。

さらに「ユーザーフォーム・・・」でググって、Webで色々当たってみたりはするものの、

「うーん!」イマイチ分からないなぁ。

ユーザーフォームの仕上がりも見栄えがイマイチだし、思うように動かないし、どうすればいい?

どこを見ても、ピタッとした解決案が見つからないし。

 

ユーザーフォームの(ツールボックスの)各パーツの機能説明とか、プロパティ項目の説明とかはもういいし、

それより解決策を教えてほしいと思いますよね。

悩める君

あぁ~こうして時間だけが過ぎて行く・・・

 

これを、今その場で出来る解決策は2つ。

  • Q&Aサイトに嵐のような質問
  • 使用実例を載せているサイトをひたすら探し知識を頂く

何れかです。

 

そういったことに対して、この記事は

実際の使用例から、何かのインスピレーションで、解決の糸口を掴んでしてもらえるかもしれない人のための記事でもあります。

実際、自分もこのような方法である程度理解できて、使えるようにもなりましたし。

 

使えるユーザーフォーム作成のコツは、実例を教科書に

 

繰り返しますが、お悩み解決の方法として、お勧めできるのは実例を教科書にするということです。

何がいいのかと言えば、

VBAコードの実行で、どのように動作が進んでいくかを知ることが出来るというところです。(デバッグが大変参考になります。)

 

今回のテーマ「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」についてもユーザーフォームを使っていますので、

実例としてあなたの問題の参考にしていただけると幸いです。

 

このブログで、この記事以外にも、実際に幾つかユーザーフォームを使ったエクセルVBAを紹介しています。こちらも参考にしてください。

バックナンバーの検索ツール。VBAユーザーフォームの使い方を解説

エクセルで領収書、ユーザーフォームのVBAで印刷をコントロール

ExcelVBAをユーザーフォームからコントロール!「雑誌と書籍の在庫表」編

ゆうちょ振替決済。振込用紙の印字用に口座入力シートを作成します。

エクセルだけで16種類の封筒に宛名印刷ができる。住所録転用可能!

封筒宛名を印刷するエクセルVBAの作り方。基本操作部分編

マルチページを使ったエクセル封筒印字ソフトの作成!宛名リスト編

セルサイズの変更で自由に最適印刷!変数を利用。宛名印字編

エクセルVBAアクティブセルの利用。印刷の範囲を指定!封筒宛名印刷

簡単に!差出人を封筒に印刷する。エクセルVBAコード設定

1クリック!エクセルVBAで同一データを複数セルに簡単入力する

複数セルに簡単に入力できる「データスタンプVBAソフト」の作り方

エクセルVBAマルチページ作成。秘密鍵コードで非表示化!

エクセルVBA Gotoで移動!シート非表示ソフトのコード解説

 

実例 このテーマの実際のユーザーフォーム

 

「操作パネル(ユーザーフォーム)」のビジュアル

sousapaneru003a

 

ビジュアル上でまず一番に重要なもの

実際に使うユーザーフォームのサイズは、まず

基本的に、背後に表示される(データの表示された)シートの邪魔にならないような大きさに設定しましょう。

VBA解説書にあるような ”バカデカいボタンや、フォームサイズ” では、全く実用には使えないです。背後にあるシートのデータの修正が必要な時に、前面にあるフォームが邪魔になります。そこの説明にある大きさは全て解説のための大きさです。

写真画像を参考にいただいて、セルのサイズから大きさを判断してください。出来るだけコンパクトにすることです。

 

表示文字は視認性のいいサイズと色でカラフルにせずシンプルにデザインしましょう。

色替えは同系濃淡色、フォントサイズは12~14 が見易いです。

 

次に重要なのは操作順にコントロールを配列

ユーザーが設定する必要がある項目は、実操作の流れ順に上下左右・右往左往しないように配置しましょう。

あと、よく忘れがちなセットアップで、「タブ順」設定を忘れないようにしましょう。

sousapaneru004a

 

ユーザーフォームのベース部分でマウスを右クリック→メニューから「タブオーダー」を選択します。

sousapaneru005a

 

タブオーダーのリストの項目を上下させて順番を整頓します。

MEMO
キーボードの「Tabボタン」で、カーソル(セル)を動かし、順に入力欄を移動していくには「タブオーダーの整頓」が必須です。

 

コントロールの配置とプロパティ

 

ラベル

「見積書納品書請求書3点伝票作成コントロール」・「*********************************************」・「電子印鑑」・「顧客番号」・「発行年月日」・「フォントの選択」・「フォントサイズ変更」・「品名欄」・「顧客名」

オブジェクト名は変更しません。

Captionをそれぞれの名前に変更します。

 

チェックボックス、コマンドボタン、テキストボックス、コンボボックス

オブジェクト名とCaption を確認します。

フォントカラーなどは適宜です。

チェックボックスコマンドボタンテキストボックス
CheckBox2テンプレ作成する顧客番号
押印をするテンプレ作成
sousapaneru006sousapaneru007sousapaneru008

 

テキストボックスコマンドボタンチェックボックス
発行年月日データ連携するCheckBox1
データ連携ソリマチ販売王連携
sousapaneru009sousapaneru010sousapaneru011

 

コンボボックステキストボックステキストボックス
ComboBox1品名F顧客F
sousapaneru012sousapaneru013sousapaneru014

 

コマンドボタンコマンドボタンコマンドボタン
伝票作成する帳票印刷する帳票保存する
帳票作成帳票印刷帳票保存
sousapaneru015sousapaneru016sousapaneru017

 

コマンドボタンチェックボックス
シートクリアするCheckBox3
シートクリア(初期化)印刷時自動保存
sousapaneru018sousapaneru019

 

ユーザーフォームモジュールへのコード記述

 

Private Sub テンプレ作成する_Click()
Module1.テンプレ作成2
End Sub


Private Sub データ連携する_Click()

 

End Sub


Private Sub UserForm_Initialize()
With ComboBox1
.AddItem “MS Pゴシック”
.AddItem “MS P明朝”
.AddItem “游ゴシック”
.AddItem “”
End With
End Sub


Private Sub 伝票作成する_Click()

Dim Res As Variant
If 操作パネル.顧客番号.Value = “” Then
MsgBox “顧客番号が入力されていません。”
Exit Sub
End If

Module5.テンプレ作成1

End Sub


Private Sub 帳票印刷する_Click()
Module3.印刷設定
End Sub


Private Sub 伝票保存する_Click()
Module4.伝票保存
End Sub


Private Sub シートクリアする_Click()
Module5.Clearする
End Sub

 

テンプレ作成する_Click()

モジュール1の「テンプレ作成2」プロシージャーを起動する。

 

データ連携する_Click()

日々の売り上げ管理ソフトの販売王の利用者用の機能です。(利用者のみ)

販売王から出力された日々の販売データを読み込み、帳票作成のデータとします。

 

UserForm_Initialize()

ユーザーフォームのコンボボックスの表示項目を設定します。

コンボボックスは後で項目をその都度追加できるようにも出来ます。が、

無規則で追加されると思わぬトラブルもあるかもしれませんので、ここは、初期設定で固定しています。

フォント種を増やしたいときは、「.AddItem “〇〇〇”」としてコードを付け加えてください。

 

伝票作成する_Click()

モジュール5の「テンプレ作成1」プロシージャーを起動しますが、その前にユーザーフォームモジュールで

ユーザーフォームの顧客番号が入力されていないときは、プロシージャーを起動しないように条件分岐しています。

 

帳票印刷する_Click()

モジュール3の「印刷設定」プロシージャーを起動する。

 

 伝票保存する_Click()

モジュール4の「伝票保存」プロシージャーを起動する。

 

 シートクリアする_Click()

モジュール5の「clearする」プロシージャーを起動する。

 

ユーザーフォーム連携で標準モジュールのコードを一部修正

 

MEMO

With ~ End Withについてはこちらを参考にしてください。

vbawithstateeyecatchWith~End Withの使い方。VBAコードを簡潔に記述する

 

Module1.テンプレ作成2

 

ユーザーフォームのコントロール「テンプレ作成ボタン」との連携で、Sub テンプレ作成2()のコードを少々加筆します。

1.コード全体をFor~Nextで囲み、各シート毎の処理を一度に行います。

Sub テンプレ作成2()

 

 For a = 2 To 4           ‘操作パネルデータを使用で変更

 

 Worksheets(a).Select

   With ActiveSheet

   ’一旦初期化
     .Cells.ClearFormats
・・・・・(途中省略)

      Worksheets(“見積書”).Range(“F5”).ClearFormats
     End If
   End If

  End With
 Next a

End Sub

2.電子印鑑の押印を選択できるようにする

ユーザーフォームで電子印鑑のチェックが入った場合に押印を行う設定

「チェックボックスがチェックされた」の判定は「= True」で判断します。

‘帳票別設定

    If ActiveSheet.Name = “請求書” Then
      .Range(“D1”) = “請 求 書”

・・・・・(途中省略)

      .Range(“B9”).VerticalAlignment = xlBottom
      If 操作パネル.CheckBox2 = True Then      ‘操作パネルデータを使用で変更
        Worksheets(“電子印鑑の登録”).Range(“B13”).Copy Worksheets(“請求書”).Range(“F5”)
        Worksheets(“請求書”).Range(“F5”).ClearFormats
      End If
    End If

    If ActiveSheet.Name = “納品書” Then
      .Range(“D1”) = “納 品 書”

・・・・・(途中省略

      .Range(“B9”).VerticalAlignment = xlBottom
      If 操作パネル.CheckBox2 = True Then      ‘操作パネルデータを使用で変更
        Worksheets(“電子印鑑の登録”).Range(“B13”).Copy Worksheets(“納品書”).Range(“F5”)
        Worksheets(“納品書”).Range(“F5”).ClearFormats
      End If
    End If

    If ActiveSheet.Name = “見積書” Then
      .Range(“D1”) = “見 積 書”

・・・・・(途中省略)

      .Range(“B9”).VerticalAlignment = xlBottom
      If 操作パネル.CheckBox2 = True Then      ‘操作パネルデータを使用で変更
        Worksheets(“電子印鑑の登録”).Range(“B13”).Copy Worksheets(“見積書”).Range(“F5”)
        Worksheets(“見積書”).Range(“F5”).ClearFormats
      End If
    End If
  End With
 Next a
End Sub

 

Module2.帳票作成()

 

ユーザーフォームのコントロール「帳票作成ボタン」、「発行年月日」、「フォントサイズ変更」との連携で、Sub テンプレ作成2()のコードを少々削除と加筆します。

1.「Module1.テンプレ作成2」       →→→→→ 削除

2.「.Range(“F3”).Font.Size = 10」    →→→→→ Module1.テンプレ作成2に移動

「 .Range(“F3”) = “令和  年  月  日”」→→→ Module1.テンプレ作成2に移動

3.ユーザーフォームのフォントサイズ変更で「’品名のフォント」と「’顧客名のフォント」のコードを設置します。

4.ユーザーフォームの発行年月日をデータ挿入

 

1.「Module1.テンプレ作成2」「.Range(“F3”).Font.Size = 10」「 .Range(“F3”) = “令和  年  月  日”」を削除する

‘請求納品見積へテンプレート再構築
  For a = 2 To 4

 

    Worksheets(a).Select
    Module1.テンプレ作成2             ‘削除

    With Worksheets(a)
        .Range(“A13:G” & KeRow).Borders.LineStyle = xlContinuous
        .Range(“B14:B” & KeRow).Font.Size = 10 ‘品名のフォントサイズ
        .Range(“B13:B” & KeRow).WrapText = True
        .Range(“C13:D” & KeRow).HorizontalAlignment = xlCenter
        .Range(“E13:F” & KeRow).NumberFormatLocal = “\ #,##0”
        .Range(“F3”).Font.Size = 10       ‘削除
        .Range(“F3”) = “令和  年  月  日” ‘削除 

 

2.Module1.テンプレ作成2に移動

‘罫線の設定 と ’項目の入力 の間に ’日付の表記 を差し込みます。

  ‘日付の表記
.Range(“F3”).Font.Size = 10
.Range(“F3”).Value = “令和  年  月  日”

 

3.「’品名のフォント」と「’顧客名のフォント」のコードを設置
4.ユーザーフォームの発行年月日をデータ挿入

3.と4.を一度に説明します。

3.について、それぞれのフォントの数値は変数としてプロシージャーの最初に宣言をします。

Dim a As Long, m As Long, N As Long
Dim SaRow As Long, KeRow As Long
Dim Fsa As Variant, Fsb As Variant

 

‘請求納品見積へテンプレート再構築 と ’請求納品見積シートへデータ転記 の間にコードを差し込みます。

ユーザーフォームのフォント入力欄が空白の場合は、

  • 品名のフォントは10
  • 顧客名のフォントは13

に、デフォルト設定しています。

発行年月日の方はユーザーフォームに入力された値を変数化せず直接セルに代入しています。

値の取り方は、= 操作パネル.発行年月日.Valueとして入手することが出来ます。無記入の場合は空白になります。

・・・・・(途中省略)

‘請求納品見積へテンプレート再構築
  For a = 2 To 4

 

    Worksheets(a).Select

    With Worksheets(a)
        .Range(“A13:G” & KeRow).Borders.LineStyle = xlContinuous
        .Range(“B14:B” & KeRow).Font.Size = 10 ‘品名のフォントサイズ
        .Range(“B13:B” & KeRow).WrapText = True
        .Range(“C13:D” & KeRow).HorizontalAlignment = xlCenter
        .Range(“E13:F” & KeRow).NumberFormatLocal = “\ #,##0”

 

‘品名のフォント
    Fsa = 操作パネル.品名F.Value          ‘操作パネルデータを使用
    If Fsa = Null Or Fsa = “” Then
        Fsa = 10
    Else
        .Range(Cells(14, 2), Cells(KeRow, 2)).Font.Size = Fsa
    End If

‘顧客名のフォント
    Fsb = 操作パネル.顧客F.Value          ‘操作パネルデータを使用
    If Fsb = Null Or Fsb = “” Then
        Fsb = 13
    Else
        .Range(“B6”).Font.Size = Fsb
    End If

    End With

      Range(“F3”) = 操作パネル.発行年月日.Value  ‘操作パネルデータを使用
      Range(“F3”).Font.Size = 10

  Next a

‘請求納品見積シートへデータ転記
  For N = 2 To SaRow

・・・・・(途中省略)

 

Module2.宛名設定()

 

ユーザーフォームの顧客番号のVBAコード反映の部分になります。この番号で、宛先(発行先)の自動入力を行いますので、このソフトの重要部分でもあります。

‘仮のコードです のところのVBAコードはほぼ全て再編成していきます。

顧客番号の変数CosNoは「仮のコード」ではインプットボックスからとっていましたが、今回はユーザーフォームからになります。

入力された顧客番号を「宛名の登録」シートのデータとマッチングして、宛先を帳票に表示します。

もし見当たらない場合は、訂正入力するか。空欄で終了するかを選択します。

「宛名設定」改定の全コードです。

Sub 宛名設定()

 

Dim Res As Variant, CosNo As Long
Dim Ybn, Jus, Ate

 

  Res = 0
  Workbooks(“見納請3点伝票作成.xlsm”).Activate
  Worksheets(“宛名の登録”).Select

‘操作パネルのデータより

  CosNo = 操作パネル.顧客番号.Value
stepB:

  If CosNo = Null Then
    MsgBox “顧客番号が入力されていません。”
    Exit Sub
  Else

    On Error GoTo 0
    On Error Resume Next
    Res = WorksheetFunction.Match(CosNo, Range(“B:B”), 0)
    If Res = 0 Then GoTo stepA
  End If

 

  Ybn = Range(“D” & Res).Value         ‘郵便番号
  Jus = Range(“E” & Res).Value          ‘住所
  Ate = Range(“C” & Res).Value          ‘宛名

  For a = 2 To 4
    With Worksheets(a)
        .Range(“B3”) = Ybn
        .Range(“B4”) = Jus
        .Range(“B6”) = Ate & “  様”
    End With
  Next a
stepA:
  If Res = 0 Then
    Ans = MsgBox(“一致する顧客番号はありません。” & vbCrLf & “正しい番号を入力しますか?” _
    , vbYesNo + vbQuestion, “チェック”)
    If Ans = vbYes Then
      CosNo = InputBox(Prompt:=”半角数字で顧客番号を” & vbCrLf & “入力してください。”)
      操作パネル.顧客番号.Value = CosNo
      GoTo stepB
    Else
      MsgBox “宛名空欄で終了します”
      Exit Sub
    End If
  End If

End Sub

 

MEMO

Match関数についてはこちらを参考にしてください。

vbamatcheyecatch001エクセルVBAで使うMatch関数 活用度アップでテッパン関数に!

メッセージボックスについてはこちらを参考にしてください。

vbamsgboxeyecatchメッセージボックス MsgBox実際の使い方を最速に理解

Gotoステートメントについてはこちらを参考にしてください。

VBAGotoeyecatch001Gotoステートメントの利用法を最速に理解。毒コードと薬コード

 

Module3.印刷設定()

 

印刷設定プロシージャーでもユーザーフォームで入力したフォントサイズが利用できるようにします。

フォントの数値を変数としてプロシージャーの最初に宣言をします。

Sub 印刷設定()

 

Dim SaRow As Long, KeRow As Long, NRow As Long
Dim a As Long, s As Long, b As Long
Dim Fsa As Variant, Fsb As Variant 

 

「Module2.宛名設定」の時と同じように ’品名のフォント と ’顧客名のフォント のコードを設置します。

‘固定のフォントサイズ(品名以外)
.Range(Cells(14, 3), Cells(KeRow, 7)).Font.Size = 11
.Range(Cells(14, 1), Cells(KeRow, 1)).Font.Size = 10

‘品名のフォント
    Fsa = 操作パネル.品名F.Value         ‘操作パネルデータを使用
    If Fsa = Null Or Fsa = “” Then
      Fsa = 10
    Else
      .Range(Cells(14, 2), Cells(KeRow, 2)).Font.Size = Fsa
    End If

 

‘顧客名のフォント
    Fsb = 操作パネル.顧客F.Value         ‘操作パネルデータを使用
    If Fsb = Null Or Fsb = “” Then
      Fsb = 13
    Else
      .Range(“B6”).Font.Size = Fsb
    End If

  End With

 

‘注記・項目のフォントサイズ

・・・・・(途中省略)

 

印刷時にユーザーフォームで選択したフォント種を設定します。

・・・・・(途中省略)

‘注記・項目のフォントサイズ
For s = 14 To KeRow
If Cells(s, 2) = “税込合計” Or Cells(s, 2) = “以下余白” Then
Cells(s, 2).Font.Size = 11
End If
Next s

 

‘フォント種選択(ユーザーフォームから選択)
  If 操作パネル.ComboBox1.ListIndex = 0 Then
    Cells.Font.Name = “MS Pゴシック”
  ElseIf 操作パネル.ComboBox1.ListIndex = 1 Then
    Cells.Font.Name = “MS P明朝”
  ElseIf 操作パネル.ComboBox1.ListIndex = 2 Then
    Cells.Font.Name = “游ゴシック”
  Else
    Cells.Font.Name = “MS Pゴシック”
  End If
Next a

・・・・・(途中省略)

 

印刷時自動保存のチェックボックスがチェックされた時の設定を行います。

印刷設定プロシージャーの最後に ’自動保存設定 のコードを設置します。

・・・・・(途中省略)

‘自動保存設定
  If 操作パネル.CheckBox3 = True Then       ‘操作パネルデータを使用
Module4.伝票保存
End If

End Sub

 

Module4.伝票保存()

 

印刷時自動保存のチェックボックスがチェックされていた時は、

ユーザーフォームのこの「帳票保存ボタン」が無効になるように設定します。(重複保存を避けるため)

伝票保存プロシージャーの変数の宣言の次に「このチェックのコード」を設置します。

‘自動保存チェック
If 操作パネル.CheckBox3 = True Then       ‘操作パネルデータを使用
Exit Sub
End If

 

Module5.テンプレ作成1()

 

モジュール5を挿入して記述します。

ユーザーフォームの「帳票作成ボタン」とリンクしています。

全体のコードはこのようになっています。

顧客番号を「宛名の登録」シートのデータとマッチさせるために、ここでA・B列のセルの表示設定を「数値」にセットしています。

Sub テンプレ作成1()

 

Worksheets(“宛名の登録”).Select
Range(“A:B”).NumberFormatLocal = “0_ “

 

Module1.テンプレ作成2
Module2.帳票作成

 

Worksheets(“請求書”).Select
Range(“A1”).Select

 

End Sub

 

Module5.Clearする()

 

ユーザーフォームの「シートクリアボタン」とリンクしているコードです。

今開いているシートを初期表示状態にクリアします。

本当に初期状態に戻すかを確認するメッセージが表示されるようにしています。

 

MEMO

シートのクリアのためのエクセルVBAコードの作り方については、この記事が参考になります。

vbacleareyecatchエクセルVBA シートのクリアーを目的のメソッド別に最速理解

 

Sub Clearする()

 

  Answ = MsgBox(“実行するとシートが初期化されます。” & vbCrLf & “実行しますか?” _
    , vbYesNo + vbQuestion, “チェック”)
  If Answ = vbYes Then
    With ActiveSheet
        .Cells.ClearFormats
        .Cells.ClearContents
        .Cells.UseStandardHeight = True
        .Cells.UseStandardWidth = True
        .DrawingObjects.Delete
    End With
  Else
    Exit Sub
  End If

End Sub

 

ユーザーフォームの表示スイッチ ブックとシートモジュール

 

ブックモジュール

 

このブックモジュールにユーザーフォームの表示スイッチコードを記述します。

Private Sub Workbook_Open()


操作パネル.Show vbModeless


End Sub

 

シートモジュール

 

作業シートのシートモジュールにユーザーフォームの表示スイッチコードを記述します。

Private Sub Worksheet_Activate()


操作パネル.Show vbModeless


End Sub

 

ユーザーフォーム作成習得のまとめ

 

ユーザーフォームは、基本的にデータ入力装置であってプログラム起動装置です。

ですので、各モジュールのVBAコードとの連携無くしては、全く機能することはありません。

ユーザーモジュールを幾ら時間をかけて研究しても、それのみで動くことはないのです。

一方、モジュールのVBAコードも、ユーザーフォームから呼び出される仕組みのコードや

入力データに応答するコードを仕込まないと反応することもありません。

 

この記事でご覧いただけましたように、

ベースとなるモジュールのVBAコードがあって(まず組み立てて)、

その後、コントロールを設置したユーザーフォームを作成して、

そして、そのコントロールとモジュールのVBAをつなぐVBAコードを組み立てて接続する。

その時に大変参考になるのが、教科書的な解説書よりは ”実際に使っているVBAコードを持った具体的事例”になるわけです。

これからは、事例を参考にしながら発展してオリジナルな個性的なコードを作れるようにしていきましょう。

このブログでも、いくつかの参考事例(全て実際に使っているものばかり)がありますので、是非、回遊してみてください。

 

「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」はここまでで一応完了になります。 が、

更に利便性を高めるために、自店で使っている日々の販売売上管理ソフト「販売王」と、データ連携を図れるように付加機能を付けることが出来ます。

「販売王」を利用していない会社やお店は直接的には使えませんが、

次回はそのオプション機能の解説記事を紹介します。

販売管理ソフトを探している会社やお店は、この記事を是非参考にしてみてください。

次の記事に進むにはこちら↓から

販売王のデータ出力で3点セット帳票をエクセルで簡単に作る

3tendenhaneyecatch販売王のデータ出力で3点セット帳票をエクセルで簡単に作る

 

大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方
初めてのVBAの勉強、構えなくても気軽に始められる。
vbastudy020a
vbastudy021a

電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる

(著者)大村あつし
(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)

学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。

 

最後までお読みいただき有難うございました。

 

エクセルVBAを使って業務効率を上げて行くのに、始めのうちに知っておくといい内容を纏めてみました。

vbaintfixeyecatch
エクセルVBA関数で、数値の整数部分だけを分離します。 整数値取得のFix関数でなくInt関数の使用の場合でも、 他の関数との組み合わせで解決することが出来ます。 こんにちは、じゅんぱ店長(@junpa33)です。 今回のテーマは、数値の整 ...
続きを読む
vbarndeyecatch
エクセルVBAのRnd関数で乱数を取得します。 実用のためにはコードに簡単な加工をする必要があります。特に乱数値の整数化とRandomizeは必須です。 6.5兆通りのパスコードの生成方法も解説しています。 こんにちは、じゅんぱ店長(@ju ...
続きを読む
vbaroundupdowneyecatch
エクセルVBA 数値の切り上げ、切り捨てをするときには注意しなければいけません。 RoundUp関数とRoundDown関数を使う時に負の数が混在していると、そのままだと誤った計算結果になることがあります。 こんにちは、じゅんぱ店長(@ju ...
続きを読む
vbaroundeyecatch
エクセルVBAでも数値を四捨五入したい時は、Round関数を利用することが多いです。 Round関数の使い方はワークシートと同様ですが、ただ大きな注意点があります。 ここではその注意点も含めて使い方の説明を行います。 こんにちは、じゅんぱ店 ...
続きを読む
vbamaxminaveeyecatch
エクセルVBAで、ワークシート関数 Max・Min・Averageを利用して最大値・最小値・平均を求めます。 「簡単で短いエクセルVBAコード組み立て」を目指す上では、ワークシート関数は強い味方です。 こんにちは、じゅんぱ店長(@junpa ...
続きを読む
vbainsteeyecatch
InStr関数・InStrRev関数は、文字列操作系の関数の中でも最重要です。 この関数により指定の文字(列)の存在位置が取得できます。 そしてそれを目盛基準として、文字列操作をすることもできます。 こんにちは、じゅんぱ店長(@junpa3 ...
続きを読む
vbareplaceeyecatch
エクセルVBAで使える関数にReplace関数があります。 Replace関数は検索の文字列を指定の文字列に置換したり、削除したり出来ます。 利用価値の高い関数です。使い慣れておきましょう。 こんにちは、じゅんぱ店長(@junpa33)です ...
続きを読む
vbaselectcaseeyecatch
エクセルVBAで、必須の条件文。 その中の一つで、Select Case 条件分岐 ステートメントの使い方を説明します。 簡単なコード、可読性の向上が特徴のステートメントです。是非、知っておきましょう。 こんにちは、じゅんぱ店長(@junp ...
続きを読む
VBAValeyecatch
エクセルVBAのVal関数の使い方についてです。 「値を文字列型から数値型へ変換する」という機能があります。 データ型が不一致の場合、プログラムエラーでコード停止が発生することが良くあります。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
VBAStringeyecatch
エクセルVBA String関数の使い方についてです。 「文字を指定した数だけ並べることが出来る」という機能の関数です。 この関数を使えば簡潔なコード記述で実行することが出来ます。 こんにちは、じゅんぱ店長(@junpa33)です。 今回は ...
続きを読む
vbajoineyecatch
エクセルVBAでJoin関数の使い方について説明します。 文字列を接続する関数ですが、 配列変数で文字列を要素化した時にはこれを使います。 また「区切り文字」も自由に設定できます。 こんにちは、じゅんぱ店長(@junpa33)です。 今回は ...
続きを読む
vbamideyecstch
エクセルVBAで文字列操作は、コード作成の中でも重要な部分です。 Mid・Right・Left関数は、その操作の中で重要な働きをする関数です。 文字列を切り出すこの関数の基本部分を説明します。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
vbatrimeyecatch
Trim・RTrim・LTrimは文字列の端にあるスペースを取り除きます。 ちょっとのことですが、取り込みデータにスペースが付いていることでのエラーは発見修正が結構厄介です。 注意が必要です。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
vbastrcstreyecatch
エクセルVBAで、Str関数とCStr関数に使い方とその違いについて説明します。 戻り値にちょっとした違いがあります。 使い方の違いでその後のコードの進行に影響が出ることがあり、なおざりにはできません。 こんにちは、じゅんぱ店長(@junp ...
続きを読む
vbaleneyecatch
Len関数の使い方ついて説明します。 エクセルVBAでプログラミングを行う時に、テキストデータを加工処理するには必須の関数です。 非常に有用な関数ですので、是非使えるようになっておきましょう。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
VBACheckBoxeyecatch
エクセルシートで使う場合の、2種類あるチェックボックスの設置と使い方の違いを解説します。 一見簡単そうですが、 単純でない使い方をしたい時は、設置方法と設定方法を工夫する必要があります。 こんにちは、じゅんぱ店長(@junpa33)です。 ...
続きを読む
VBAOptionbuttoneyecatch
エクセルで書類を作成する時、項目を選択できるようにするのがオプションボタンです。 これには2種類あり、使い方にかかわる違いもあります。 詳しいオプションボタン設置方法と使い方のコツを解説します。 こんにちは、じゅんぱ店長(@junpa33) ...
続きを読む
vbamojisousaeyecatch
エクセルVBAコードで、ファイルの保存時に名前を付けて保存について、その時の年月日を付けたい時の設定方法についてです。 保存されたファイルがたくさん増えて行く中で、ファイルの判別で年月日を付けている(付けたいと思っている)人も多いでしょう。 ...
続きを読む
vbajyufukueyecatch
今回は、同じ項目を一つにまとめるためのエクセルVBAコードを紹介します。 多数銘柄の商品を複数の店で扱っている場合、商品銘柄集計表を作るには、商品銘柄の種類だけをリストにしないといけません。 こんにちは、じゅんぱ店長(@junpa33)です ...
続きを読む
vbafolderdeleteeyecatch
今回は、不要なフォルダをサクッと削除するエクセルVBAコードを紹介します。 削除の仕方は2つあります。VBA自身の機能を使うことと、FSOの機能を使うことの2つです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAで、不 ...
続きを読む
vbadirkilleyecatch
今回は、フォルダに保存されている要らないファイルを削除するエクセルVBAコードを紹介します。 フォルダを開いて一つずつファイル名を確認して、ではなくて、コード実行一発でササッと完了します。 こんにちは、じゅんぱ店長(@junpa33)です。 ...
続きを読む
vbachdireyecatch
エクセルVBAのステートメントで「ChDir(チェインジディレクトリ)」というのがあります。 少々地味感のあるステートメントですが、この使い方のポイントを説明いたします。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAの ...
続きを読む
vbafindeyecatch001
今回は、データの検索方法で、エクセルVBAでできるメソッドについてです。 「FindとFindNextメソッド」の使い方と最速理解のコードの組み立て方を説明したいと思います。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルの検 ...
続きを読む
今回も、エクセルVBAで利用できるワークシート関数についてがテーマです。 この記事では、データナンバーなどから、その必要な値や数値を抽出する「Vloolup関数」について使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です ...
続きを読む
vbaindexeyecatch001
今回も、エクセルVBAで利用できるワークシート関数についてがテーマです。 この記事では、データリストから必要な値や数値を取り出してくる「Index関数」について使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセ ...
続きを読む
vbamatcheyecatch001
エクセルVBAで利用できる関数についてがテーマです。 今回は、データリストから必要な値や数値を取り出してくる「Match関数」について、使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAでよく使うワーク ...
続きを読む
vbahairetu3eyecatch
エクセルVBAで変数を利用するとき、二次元配列変数を知っていれば何かと便利なことがあります。 今回はそんな配列変数をより実際に近い例題で説明していきます。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAのプログラムでは、 ...
続きを読む
vbahairetu2eyecatch
エクセルVBAで配列を利用する時、それに関わる関数やステートメントを利用すれば、 より簡潔にコードを作成することが出来ます。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBA 配列を扱うときに利用できる関数とステートメント ...
続きを読む
vbahairetueyecatch
エクセルVBAで変数を利用するとき、複数の同じ型で変数を設定したいときがあります。 そんな時、出番となるのが配列変数ということです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAの1次元配列変数の使い方を説明します。 ...
続きを読む
vbabuttoneyecatch
エクセルVBAのプログラムを実行するのに、ワークシート上に設置したボタンのクリックでワンポチっとで行いたい。 そんなボタンの簡単設置方法を紹介します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAで、シートにマクロ(プ ...
続きを読む
vbasumeyecatch
エクセルVBAで、羅列された数値の集計作業をパパッと熟していきたいときがありますよね。 それを簡単に行える方法としてSUM関数があります。今回はこのSUM関数の使い方についてです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセ ...
続きを読む
vbainputboxeyecatch
エクセルVBAのプログラムで、利用者からの入力データを取り込んでコードを実行していくことがあります。 その簡潔な方法としてInputBoxがあります。今回はこのInputBoxの使い方についてです。 こんにちは、じゅんぱ店長(@junpa3 ...
続きを読む
vbalastcelleyecatch
エクセルVBAのプログラム作成で、入力データをその都度蓄積していく場合など、 既にデータの入っている最終セルの位置を調べたいという時が多くあります。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAのコード組み立てで、デー ...
続きを読む
vbawithstateeyecatch
エクセルVBAのコードの組み立てでは、視認性や可読性を上げるためにできるだけ記述を簡潔にしたいところです。 Withステートメントは、そういったコード記述を簡潔にする役割があります。 こんにちは、じゅんぱ店長(@junpa33)です。 エク ...
続きを読む
vbacleareyecatch
エクセルVBAでシートを再利用するために、一度内容すべてをクリアしたい時があります。 普通は、Clearメソッドを使ってクリア操作を行いますが・・・ こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAを組み上げる中で、シート ...
続きを読む
vbaoffseteyecatch
エクセルVBAで、セルやセルの選択範囲を移動させるのにOffsetプロパティがあります。 今回の「VBA最速で理解」は、この便利な「Offsetプロパティ」の使い方について説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エ ...
続きを読む
vbanameeyecatch
エクセルVBAで、アクティブセル、アクティブシート、アクティブブックという「現在参照中の・・・」というオブジェクトがあります。 今回の「VBA最速で理解」は、この「ActiveWorkbook」「ActiveSheet」「ActiveCel ...
続きを読む
vbaselacteyecatch
エクセルVBAで、そのコードを実行する先のオブジェクトに、フォーカスするためのメソッドに、「Select」と「Activate」があります。 今回は、このよく似た「Select」と「Activate」について説明します。 こんにちは、じゅん ...
続きを読む
vbavbekidoeyecatch
エクセルVBAを始めようとしたときに一番最初に戸惑うのが、「どうしたらVBAコードを書く表示画面になるのか?」だと思います。 今回は、この「どうしたら、その画面になるんだろう?」についての方法を説明します。 こんにちは、じゅんぱ店長(@ju ...
続きを読む
vbamsgboxeyecatch
エクセルVBAでユーザーフォームを使わなくても、簡単なユーザーとのやり取りならメッセージボックスでも可能です。 今回は、この「ユーザーへのメッセージや選択肢を提示する」ユーザーフォームについての説明をします。 こんにちは、じゅんぱ店長(@j ...
続きを読む
vbadoloopeyecatch
以前の記事でも書いたように、エクセルを使った業務で、「ループの処理」コードは重要な実行処理部分です。 今回は、このもう一つの「ループの処理」である「実行回数が限定されないループ処理」を行うコードについて説明します。 こんにちは、じゅんぱ店長 ...
続きを読む
vbafoldereyecatch
エクセルを使った業務で、「作成したファイルの保存」は作業の最後に必ず必要な部分です。 今回は、この「作成したファイルの保存」を行うための重要部分。保存先フォルダをVBAで指定する方法を説明します。 こんにちは、じゅんぱ店長(@junpa33 ...
続きを読む
vbasengeneyecatch
エクセルVBAのコード組み立てで使う変数。「この変数を使いますよ!」というのが「変数の宣言」です。 今回は、この変数の宣言についてです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBA のコード組立ての中で、変数の宣言は ...
続きを読む
vbaifjyokeneyecatch
エクセルVBAのコード組み立てで最も必要な、最もよく使うメソッドの1つで「If~Then~Else」があります。 今回はこの「If~Then~Else」メソッドについて設定条件の絞り方のポイントを説明します。 こんにちは、じゅんぱ店長(@j ...
続きを読む
VBACopyeyecatch
エクセルVBAのコード組み立てで、よく使うメソッドの1つで「Copy」メソッドがあります。 今回はこの「Copy」メソッドの使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAで、ワークシートのコピーをを ...
続きを読む
VBAGotoeyecatch001
エクセルVBAのコードで、Gotoステートメントは嫌われ系のグループにはいっています。 それでも、GotoがあるのでVBAコード組み立てがスムーズに、楽に、なる事も多いと言うのも事実です。 こんにちは、じゅんぱ店長(@junpa33)です。 ...
続きを読む
fornextirekoeyecatch
エクセルVBAのコード組み立てで、非常によく使うステートメントの一つにFor~Nextでのループ処理があります。 今回はこのFor~Nextステートメントの使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルV ...
続きを読む

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません