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

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

 

販売管理システムの作成を通してエクセルを学んでいくことを目指したシリーズです。

前回は、とうとう新規登録画面の完成までこぎつけました。

前回記事

みなさん、こんにちはケンケンです。   エクセルを駆使して販売管理システムを作るシリーズを紹介しています。 機能やフォームが複数あるものを作り上げるのは根気がいりますが、じっくり基礎を固めてアウトプットすれば恐れ[…]

今回は、一回登録されたデータを修正削除する方法をみなさんと勉強していきたいと思います。

あと数回で見積システムは完成させる予定ですのでもう少しお付き合い下さい。

では、いってみましょう。

 

必要なフォームを追加する

修正削除を可能にするためにまずフォームを必要な分だけ作成します。

コントロールの配置とオブジェクト名とCaptionはフォーム作成と同時に行うことを忘れないようにしましょう。

修正削除用フォームを作成しよう

まず、修正削除用のフォームを作成しましょう。

方法は簡単です。

以前作った期間指定用のフォームをそのままコピーして使っちゃえば良いです。

これが以前作ったフォームです。

このフォームをコピーして以下のように加工します。

VBE画面から「挿入」→「ユーザーフォーム」を選択しフォームを作成し、上図のコントロール全体を指定して

新しいフォームに貼り付けてください。

フォーム名を「frmMitumoriDelete」としてCaptionは「見積データ一覧」としました。

変更するのは下の3つのコマンドボタンだけです。

Captionをそれぞれ上図のとおり変更し、オブジェクト名を左から以下のようにしましょう。

これで、修正削除用のフォームは完成です。簡単ですね。

 

データ修正専用のフォームを作ろう

このフォームもコピーで済ませます。

以前作った上図の修正用フォームをコピーします。

先ほどと同じようにユーザーフォームを追加作成し、オブジェクト名を「frmSyusei2」としました。

コントローラーの配置とオブジェクト名やCaptionはまったく以前と同様です。

フォームを呼び出すフォームを作成しよう

上記のフォームを呼び出す専用のフォームを作成しましょう。

各コントロールのオブジェクト名とCaptionは上図を参考にしてください。

 

追加したフォームに機能を実装する

それでは、追加したフォームに機能を実装していきますよ。

シート一括削除機能の実装

シート一括削除機能から実装していきますが、実はこれ以前にほとんど作ってしまっていました。

メインメニューの修正削除ボタンに実装していたのですが覚えていますか?

 

その機能を新たに作った修正削除フォームの、シート一括削除機能に移動します。

Private Sub cmbMsyusei_Click()
    Application.DisplayAlerts = False
    Dim sCnt
    For sCnt = Sheets.Count To 9 Step -1
        Sheets(sCnt).Delete
    Next
    Application.DisplayAlerts = True
End Sub

上記のコードを修正削除フォームのシート一括削除ボタンに実装します。

Private Sub cmbSheetikkatu_Click()
    Dim res
    Dim title
    Dim msg
    
    msg = "シートをすべて削除します。よろしいですか?"
    title = "確認"
    res = MsgBox(msg, vbYesNo + vbInformation, title)
    If res = vbNo Then
        Exit Sub
    End If
    
    Application.DisplayAlerts = False
    Dim sCnt
    For sCnt = Sheets.Count To 9 Step -1
        Sheets(sCnt).Delete
    Next
    Application.DisplayAlerts = True
    
    MsgBox "削除終了しました。"
End Sub

クリックイベントプロシージャにコードを上記のようにします。

追加したコードはメッセージボックスを表示するものです。

削除するときにはきっちり注意を促すメッセージを発信するのが基本でしたね。

すでに既出のものなので細かい説明は割愛しますが、メッセージボックスを使って注意を促す方法は

寝ていても気づくように習慣づけておきましょう。

最終行で削除終了のメッセージを追加しています。こういうこころ使いはユーザーにとって親切ですね。

フォームを連携させよう

作ったフォームを既存のフォームに連携させておきましょう。

メインメニューと修正削除メニューを連携させる

メインメニューの「修正・削除」ボタンをクリックすると「修正削除メニュー」フォームが起動するようにしましょう。

「修正・削除」ボタンをクリックし、コードを書きます。

Private Sub cmbMsyusei_Click()
    frmDeleteMenu.Show
End Sub

これで、両フォームが連携されました。

 

修正削除メニューと見積データ一覧フォームを連携させる

続いて修正削除メニューの「一部修正・削除」ボタンと見積データ一覧フォームを連携させます。

Private Sub cmbMsakujo_Click()
    frmMitumoriDelete.Show
End Sub

見積データ一覧フォームと修正フォーム(frmSyusei2)を連携させる

最後に見積データ一覧フォームと修正用のフォームを連携させます。

Private Sub cmbSyusei_Click()
    frmSyusei2.Show
End Sub

これで、すべてのフォームを連携可能にできました。

 

初期値を設定しよう

作成したフォームに初期値(Initialize)を設定していきましょう。

見積データ一覧フォームの初期値設定

まずは、見積データ一覧フォーム(frmMitumoriDelete)から始めましょう。

上図のようにプロシージャを生成し、コードを書きますが、これも以前まで使ったコードを使い回します。

Private Sub UserForm_Initialize()
    With lstMitumori'①
        .ColumnCount = 3
        .ColumnWidths = "50;100;100"
        .TextAlign = fmTextAlignLeft
    End With
    
    With lstMeisai'②
        .ColumnCount = 7
        .ColumnWidths = "80;36;60;60;60;60;60"
        .TextAlign = fmTextAlignCenter
    End With
        
    Dim Lrow'③
    Lrow = Sheets("見積データ一覧").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("見積データ一覧").Activate
    Sheets("見積データ一覧").Range("O2:P2").Value = ""
    Sheets("見積データ一覧").Range("A1:M" & Lrow).AdvancedFilter Action:=xlFilterCopy, _
        criteriarange:=Range("O1:P2"), copytorange:=Range("O4:AA4"), Unique:=True
        
     With lstMitumori'④
        .Clear
        Lrow = Sheets("見積データ一覧").Range("O" & Rows.Count).End(xlUp).Row
        Dim cnt
        For cnt = 5 To Lrow
            If Sheets("見積データ一覧").Range("O" & cnt).Value <> Sheets("見積データ一覧").Range("O" & cnt + 1).Value Then
                .AddItem Format(Range("O" & cnt).Value, "00000")
                .List(.ListCount - 1, 1) = Range("P" & cnt).Value
                .List(.ListCount - 1, 2) = Range("Q" & cnt).Value
            End If
        Next
     End With
End Sub

コードの解説

①と②はリストボックスの初期値を設定するコードでしたね。

リストボックス参考記事

みなさん、こんにちはケンケンです。   今回は、ユーザーフォームのリストボックスをご紹介します。 リストボックスはフォーム上にデータリストを表示したり選択することが出来ます。   資料は以前[…]

 

③見積データ一覧シートでフィルタオプションを設定するコードでしたね。

今回は、 「Sheets(“見積データ一覧”).Range(“O2:P2”).Value = “”」の箇所で、セルを空白にしてフィルターをかけています。

つまり、見積データのすべてを転記しています。

そして、④ですべてのデータをフォーム起動時に表示しています。

フィルタオプションとAddItem参考記事

みなさん、こんにちはケンケンです。   販売管理システムをエクセルのみで作成するというチャレンジシリーズになります。 前回は見積書作成コードのカスタマイズをすることでいろいろ修正を加えていきましたが、 今回[…]

 

データの修正フォーム(frmSyusei2)の初期値設定

続いて、データの修正フォーム(frmSyusei2)の初期値の設定です。

これは、frmSyuseiのときと同じなのでコピペでOKです。

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=前回の復習 […]

 

コマンドボタンクリック時の設定をしよう

初期値の設定が終わったら、コマンドボタンクリック時のアクションを設定していきましょう。

見積データ一覧フォーム(frmMitumoriDelete)の選択行修正ボタンをクリックしたとき

まず、見積データ一覧フォーム(frmMitumoriDelete)の選択行修正ボタンをクリックしたときのアクションを設定します。

先ほど作ったcmbSyusei_Clickプロシージャに追記します。

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

上記のようにコードを書いてください。

コードの解説

①まず、下のリストボックスからデータを選択していない時はメッセージボックスで注意喚起してプロシージャを離脱します。

 

②見積Noと見積日と得意先名の情報をデータの修正フォーム(frmSyusei2)へ転記しています。

 

③下のリストボックスで選択された行数を変数selectRow2に格納します。

selectRow2はPublic変数として標準モジュールに宣言します。

Public selectRow
Public selectRow2'③

(注意:標準モジュールの先頭で宣言しましょう。)

Public変数復習記事

みなさん、こんにちはケンケンです。   エクセルを駆使して販売管理システムを作るシリーズを紹介しています。 機能やフォームが複数あるものを作り上げるのは根気がいりますが、じっくり基礎を固めてアウトプットすれば恐れ[…]

 

データの修正(frmSyusei2)の商品コンボボックスをクリックしたとき

こちらもfrmSyuseiのコピーで済ましちゃいましょう。

Dim tanni

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

ひとつだけ注意点があります。

変数tanniはモジュールの最上部に宣言することを忘れないようにしてください。

変数tanniの復習記事

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

データの修正(frmSyusei2)の数量テキストボックスを操作した時のアクション

数量テキストボックスがアップデートされたときと0から9以外の数値が入力された時のアクションを以下のコードで表現します。

これも以前書いたコードの使い回しです。

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
    cmbSyusei.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
AfterUpdateの復習記事

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

 

KeyPressの復習記事

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

修正実行ボタンをクリックしたときのアクション

今日のメインイベントです。

といってもこれもほぼコピペですが。

それでは、まずコードを書きましょう。

Private Sub cmbSyusei_Click()
    With frmMitumoriDelete.lstMeisai'①
        .List(selectRow2, 0) = txtSyouhin.Text
        .List(selectRow2, 1) = txtSuryou.Text
        .List(selectRow2, 2) = tanni
        .List(selectRow2, 3) = txtTanka.Text
        .List(selectRow2, 4) = txtKingaku.Text
        .List(selectRow2, 5) = txtTax.Text
        .List(selectRow2, 6) = txtZeikomi.Text
    End With
    
    Dim cnt'②
    Dim Lrow
    Dim targetrow
    Lrow = Sheets("見積データ一覧").Range("A" & Rows.Count).End(xlUp).Row
    
    For cnt = 2 To Lrow
        If Format(Sheets("見積データ一覧").Range("A" & cnt).Value, "00000") = txtMitumoriNo.Text Then
            targetrow = cnt
            Exit For
        End If
    Next
    targetrow = targetrow + selectRow2
    
    Sheets("見積データ一覧").Range("D" & targetrow).Value = txtSyouhin.Text
    Sheets("見積データ一覧").Range("F" & targetrow).Value = txtSuryou.Text
    Sheets("見積データ一覧").Range("G" & targetrow).Value = tanni
    Sheets("見積データ一覧").Range("H" & targetrow).Value = txtTanka.Text
    Sheets("見積データ一覧").Range("I" & targetrow).Value = txtKingaku.Text
    Sheets("見積データ一覧").Range("J" & targetrow).Value = txtTax.Text
    Unload Me
End Sub

①データの修正フォーム(frmSyusei2)のデータをリストボックスに転記します。つまり、リストボックスのデータを修正します。

先ほど宣言したselectRow2が活躍していることを確認してください。

Public変数復習記事

みなさん、こんにちはケンケンです。   エクセルを駆使して販売管理システムを作るシリーズを紹介しています。 機能やフォームが複数あるものを作り上げるのは根気がいりますが、じっくり基礎を固めてアウトプットすれば恐れ[…]

②以降で修正したデータをエクセルシートに転記しています。

変数targetrowとselectRow2をうまく使ってエクセルシートの転記先行を取得していることを確認しておいてください。

 

まとめ

いかがでしたか。

といっても今回は前回までのコピペがほとんどでした。

とはいえ、一度作ったコードをコピペすると機能を拡張する際に便利であるということはご理解いただけたのではないでしょうか。

次回は、削除機能の実装をしていきます。

少し工夫をする箇所がでてきて面白いと思いますのでお楽しみに。

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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