【販売管理システム作成】登録済みのデータにさらにデータを追加する方法【見積編ラス前】

みなさん、こんにちはケンケンです。

 

エクセルを駆使して販売管理システムを作るシリーズをお送りしています。

前回は、登録済みのデータを削除する方法をご紹介しました。

フラグを立てる工夫は応用が効く論点なので覚えておきましょう。

前回記事

みなさん、こんにちはケンケンです。   販売管理システムをエクセルを使い倒して作っちゃおうというシリーズをお伝えしています。 前回は、登録済みのデータを修正する方法をご紹介しました。 [sitecard s[…]

 

今回は、登録済みのデータにさらにデータを追加する方法をご紹介します。

前回までの知識でほとんどすべてをまかなえますので、難しく考えずに早速見ていきましょう。

 

追加登録機能を実装しよう

これから追加登録機能を実装しますが、コードを書く前に

まずは、今回必要になる処理の手順を確認しましょう。

手順を確認しよう

  1. フォームに追加ボタンを追加する
  2. 追加登録用のフォームを作る
  3. 追加ボタンと新しいフォームを連携させる
  4. 取り消しボタンをクリックすると閉じる
  5. 追加登録用フォームの初期値を設定する
  6. 商品コンボボックスが選択された時の処理
  7. 数量テキストボックスが入力された時の処理
  8. 追加実行ボタンをクリックしたときの処理

上記の順番で実装していきます。

では、今日もがんばっていきましょう。

フォームに追加ボタンを追加する

まずは、見積データ一覧フォーム(frmMitumoriDelete)にコマンドボタンを追加します。

ツールボックスからコマンドボタンを選択するかフォームにすでに配置済みのコマンドボタンをコピーして使ってください。

 

▶新しいコマンドボタン

  • オブジェクト名・・・cmbTuika
  • Caption・・・行追加

 

追加登録用のフォームを作る

続いて追加専用のフォームを作ります。

VBE画面から「挿入」から「ユーザーフォーム」を選択しフォームを作成してください。

▶新しいフォーム

  • オブジェクト名・・・frmTuika
  • Caption・・・見積データ追加

 

データの修正フォーム(frmSyusei2)をコピーして使います。

コピーできたら新しく作成したフォームに移動します。

張り付けられたら以下のようにコントロールの変更をお願いします。

▶修正実行ボタンの修正

  • オブジェクト名・・・cmbTuika
  • Caption・・・追加実行

追加ボタンと新しいフォームを連携させる

上記で作ったボタンを連携してみましょう。

見積データ一覧フォームの行追加ボタンをクリックすると見積データ追加フォームに飛ぶようにコードを書きます。

VBE画面で見積データ一覧フォームの行追加ボタンをダブルクリックしてクリックイベントプロシージャを作ります。

そこにコードを書きましょう。

Private Sub cmbTuika_Click()
    If lstMitumori.ListIndex = -1 Then
        MsgBox "データ一覧リストから選択してください。"
        Exit Sub
    End If
    frmTuika.txtMitumoriNo.Text = lstMitumori.List(lstMitumori.ListIndex, 0)
    frmTuika.txtMhiduke.Text = lstMitumori.List(lstMitumori.ListIndex, 1)
    frmTuika.txtTokuisaki.Text = lstMitumori.List(lstMitumori.ListIndex, 2)
    selectRow2 = lstMeisai.ListIndex
    frmTuika.Show
End Sub

連携するコード自体は最後の行だけですが、それ以外はリストボックスで選択したデータのうち

見積もりNo等を次のフォーム(frmTuika)に転記するコードです。

コードの内容自体は以前に解説済みなので以下で復習しておきましょう。

復習記事

みなさん、こんにちはケンケンです。   販売管理システムの作成を通してエクセルを学んでいくことを目指したシリーズです。 前回は、とうとう新規登録画面の完成までこぎつけました。 [sitecard subti[…]

取り消しボタンをクリックすると閉じる

新しいフォームの取り消しボタンをクリックすると閉じるコードを書きましょう。

もうだいぶ慣れてきたんじゃないでしょうか。

Private Sub cmbTorikesi_Click()
    Unload Me
End Sub

 

追加登録用フォームの初期値を設定する

追加登録用フォームの商品コンボボックスについて初期値(Initialize)を設定します。

Initialize用のプロシージャを作成し、以下のようにコードを書きましょう。

Private Sub UserForm_Initialize()
    Dim Lrow
    Dim cnt
    
    Lrow = Sheets("商品一覧").Range("A" & Rows.Count).End(xlUp).Row '商品コンボボックス初期値
    With cboSyouhin
        .ColumnCount = 2
        .ColumnWidths = "30;150;0;0"
        .ListWidth = 180
        
        For cnt = 2 To Lrow
            .AddItem Sheets("商品一覧").Range("A" & cnt).Value
            .List(.ListCount - 1, 1) = Sheets("商品一覧").Range("B" & cnt).Value
            .List(.ListCount - 1, 2) = Sheets("商品一覧").Range("C" & cnt).Value
            .List(.ListCount - 1, 3) = Sheets("商品一覧").Range("D" & cnt).Value
        Next
    End With
End Sub

コンボボックスの活用方法は以下の記事にまとめてありますのでそちらを参考にしてください。

コンボボックス活用例

みなさん、こんにちはケンケンです。   販売管理システム作成をシリーズでお伝えしています。 前回は、見積データの新規登録用フォームを作り初期値を設定しました。 [sitecard subtitle=前回の復習 […]

 

商品コンボボックスが選択された時と数量テキストボックスが入力された時の処理

ここも復習です。

以下のコードを新しいフォームに追加しておきましょう。

復習は以下の記事でお願いします。

KeyPressの復習

みなさん、こんにちはケンケンです。   販売管理システムを自前で作るシリーズをお伝えしています。 前回は、見積データ新規登録用フォームをコンボボックスを中心にご紹介しました。 [sitecard subti[…]

cboSyouhin_ChangeとAfterUpdateの復習

みなさん、こんにちはケンケンです。   販売管理システム作成をシリーズでお伝えしています。 前回は、見積データの新規登録用フォームを作り初期値を設定しました。 [sitecard subtitle=前回の復習 […]

Private Sub cboSyouhin_Change()
    With cboSyouhin
        If .ListIndex = -1 Then
            Exit Sub
        End If
    txtSyouhin.Text = cboSyouhin.List(cboSyouhin.ListIndex, 1)
    txtSyouhin.BackColor = &H80000005
    txtTanka.Text = Format(cboSyouhin.List(cboSyouhin.ListIndex, 2), "#,###")
    txtTanka.BackColor = &H80000005
    tanni = cboSyouhin.List(cboSyouhin.ListIndex, 3)
    End With
End Sub
Private Sub txtSuryou_AfterUpdate()
    If txtSyouhin.Text = "" Then
        Exit Sub
    End If

    txtKingaku.Text = Format(txtSuryou.Text * txtTanka, "#,###")
    If txtKingaku.Text = "" Then
        txtTax.Text = ""
        txtZeikomi.Text = ""
        Exit Sub
    End If
    txtTax.Text = Format(txtKingaku.Text * 0.08, "#,###")
    txtZeikomi.Text = Format(txtKingaku.Text * 1.08, "#,###")
    txtKingaku.BackColor = &H80000005
    txtTax.BackColor = &H80000005
    txtZeikomi.BackColor = &H80000005
    cmbTuika.Enabled = True
End Sub
Private Sub txtSuryou_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then
        KeyAscii = 0
    End If
End Sub

 

追加実行ボタンをクリックしたときの処理

最後に追加実行ボタンをクリックしたときの処理をまとめておきましょう。

先にコードの入力をお願いします。

Private Sub cmbTuika_Click()
    Dim res
    res = MsgBox("登録します。よろしいですか?", vbYesNo + vbInformation, "確認")
    If res = vbNo Then
        Exit Sub
    End If
    
    Dim Lrow
    Lrow = Sheets("見積データ一覧").Range("A" & Rows.Count).End(xlUp).Row + 1
    
    Sheets("見積データ一覧").Range("A" & Lrow).Value = txtMitumoriNo.Text
    Sheets("見積データ一覧").Range("B" & Lrow).Value = Format(txtMhiduke, "yyyy/mm/dd")
    Sheets("見積データ一覧").Range("C" & Lrow).Value = txtTokuisaki
    Sheets("見積データ一覧").Range("D" & Lrow).Value = txtSyouhin.Text
    Sheets("見積データ一覧").Range("F" & Lrow).Value = txtSuryou.Text
    Sheets("見積データ一覧").Range("G" & Lrow).Value = tanni
    Sheets("見積データ一覧").Range("H" & Lrow).Value = txtTanka.Text
    Sheets("見積データ一覧").Range("I" & Lrow).Value = txtKingaku.Text
    Sheets("見積データ一覧").Range("J" & Lrow).Value = txtTax.Text
    
    Worksheets("見積データ一覧").Range("A1:N1").AutoFilter 'このタイミングでソートをかける
    ActiveWorkbook.Worksheets("見積データ一覧").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("見積データ一覧").AutoFilter.Sort.SortFields.Add Key:= _
        Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("見積データ一覧").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("見積データ一覧").Range("A1:N1").AutoFilter
    
    Lrow = Sheets("見積データ一覧").Range("A" & Rows.Count).End(xlUp).Row 'フィルタオプションを実行する
    Sheets("見積データ一覧").Activate
    Range("Q2").Value = ""
    Range("Q2").Value = txtMitumoriNo.Text
    Sheets("見積データ一覧").Range("A1:N" & Lrow).AdvancedFilter Action:=xlFilterCopy, _
        criteriarange:=Range("O1:Q2"), copytorange:=Range("O4:AB4")
        
     With frmMitumoriDelete.lstMeisai
        .Clear
        Lrow = Sheets("見積データ一覧").Range("O" & Rows.Count).End(xlUp).Row
        Dim cnt
        For cnt = 5 To Lrow
            If Range("AB" & cnt).Value <> "d" Then
                .AddItem Range("R" & cnt).Value
                .List(.ListCount - 1, 1) = Range("T" & cnt).Value
                .List(.ListCount - 1, 2) = Range("U" & cnt).Value
                .List(.ListCount - 1, 3) = Format(Range("V" & cnt).Value, "#,###")
                .List(.ListCount - 1, 4) = Format(Range("W" & cnt).Value, "#,###")
                .List(.ListCount - 1, 5) = Format(Range("X" & cnt).Value, "#,###")
                .List(.ListCount - 1, 6) = Format(Range("AA" & cnt).Value, "#,###")
            End If
        Next
     End With
End Sub

すべて今まで書いてきたコードを使いまわしたものですが、ポイントがあります。

データを追加すると

エクセルシートに書き出した後にすぐシートのソートをしてフィルタオプションを実行しています。

こうすることで「追加」即リストボックスに反映が可能です。

コードを実行して確かめてみましょう。

 

 

上記のようにすべて連携されていれば成功です。

 

まとめ

以上となります。

これで、登録済みのデータに対する追加機能も実装できました。

次回は、まだ実装できていないコマンドボタンに機能を実装したり、細かい設定をしたりバグがないか確認して

見積機能については最終回となります。

 

大変長くなってしまってみなさんには負担をかけているかもしれません。

みなさんがVBAを使って業務中に何か作るときはもっとシンプルなものを作るほうが得策でしょう。

たくさん時間をかけられる方は、今回のシリーズのように機能を充実させた作品を作ってみてください。

いずれにせよたくさん書いてたくさん失敗して、そこから学んでください。

僕の記事で少しでもみなさんの手助けになっていれば幸いです。

 

それでは、また次回お会いしましょう。

 

販売管理システム作成記事一覧~見積編~

エクセルを駆使して販売管理システムを作ってみる【元データの取り扱い方】

【販売管理システム作成】見積書を自動作成する方法①

【販売管理システム作成】見積書を自動作成する方法②

【販売管理システム作成】見積書を期間指定して作成する方法①【コードのカスタマイズ】

【販売管理システム作成】見積書を期間指定して作成する方法②【リストボックス作成】

【販売管理システム作成】見積書を期間指定して作成する方法③【リストボックス作成その2】

【販売管理システム作成】見積データ登録用のフォームを作ろう①【フォームの設定】

【販売管理システム作成】見積データ登録用のフォームを作ろう②【コンボボックスの活用】

【販売管理システム作成】見積データ登録用のフォームを作ろう③【リストボックスの活用】

【販売管理システム作成】見積データ登録用のフォームを作ろう④【エクセルシートに登録】

【販売管理システム作成】見積データ登録用のフォームを作ろう⑤【修正削除機能の実装】

【販売管理システム作成】登録済みのデータを修正削除する方法【見積システム完成編】

【販売管理システム作成】登録済みのデータを削除する方法【削除フラグの立て方】

【販売管理システム作成】登録済みのデータにさらにデータを追加する方法【見積編ラス前】