みなさん、こんにちはケンケンです。
販売管理システムの作成を通してエクセルを学んでいくことを目指したシリーズです。
前回は、とうとう新規登録画面の完成までこぎつけました。
みなさん、こんにちはケンケンです。 エクセルを駆使して販売管理システムを作るシリーズを紹介しています。 機能やフォームが複数あるものを作り上げるのは根気がいりますが、じっくり基礎を固めてアウトプットすれば恐れ[…]
今回は、一回登録されたデータを修正削除する方法をみなさんと勉強していきたいと思います。
あと数回で見積システムは完成させる予定ですのでもう少しお付き合い下さい。
では、いってみましょう。
必要なフォームを追加する
修正削除を可能にするためにまずフォームを必要な分だけ作成します。
コントロールの配置とオブジェクト名と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 = “”」の箇所で、セルを空白にしてフィルターをかけています。
つまり、見積データのすべてを転記しています。
そして、④ですべてのデータをフォーム起動時に表示しています。
みなさん、こんにちはケンケンです。 販売管理システムをエクセルのみで作成するというチャレンジシリーズになります。 前回は見積書作成コードのカスタマイズをすることでいろいろ修正を加えていきましたが、 今回[…]
データの修正フォーム(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'③
(注意:標準モジュールの先頭で宣言しましょう。)
みなさん、こんにちはケンケンです。 エクセルを駆使して販売管理システムを作るシリーズを紹介しています。 機能やフォームが複数あるものを作り上げるのは根気がいりますが、じっくり基礎を固めてアウトプットすれば恐れ[…]
データの修正(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はモジュールの最上部に宣言することを忘れないようにしてください。
みなさん、こんにちはケンケンです。 販売管理システム作成をシリーズでお伝えしています。 前回は、見積データの新規登録用フォームを作り初期値を設定しました。 [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
みなさん、こんにちはケンケンです。 販売管理システム作成をシリーズでお伝えしています。 前回は、見積データの新規登録用フォームを作り初期値を設定しました。 [sitecard subtitle=前回の復習 […]
みなさん、こんにちはケンケンです。 販売管理システムを自前で作るシリーズをお伝えしています。 前回は、見積データ新規登録用フォームをコンボボックスを中心にご紹介しました。 [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が活躍していることを確認してください。
みなさん、こんにちはケンケンです。 エクセルを駆使して販売管理システムを作るシリーズを紹介しています。 機能やフォームが複数あるものを作り上げるのは根気がいりますが、じっくり基礎を固めてアウトプットすれば恐れ[…]
②以降で修正したデータをエクセルシートに転記しています。
変数targetrowとselectRow2をうまく使ってエクセルシートの転記先行を取得していることを確認しておいてください。
まとめ
いかがでしたか。
といっても今回は前回までのコピペがほとんどでした。
とはいえ、一度作ったコードをコピペすると機能を拡張する際に便利であるということはご理解いただけたのではないでしょうか。
次回は、削除機能の実装をしていきます。
少し工夫をする箇所がでてきて面白いと思いますのでお楽しみに。
それでは、また次回お会いしましょう。
販売管理システム作成記事一覧~見積編~
エクセルを駆使して販売管理システムを作ってみる【元データの取り扱い方】
【販売管理システム作成】見積書を期間指定して作成する方法①【コードのカスタマイズ】
【販売管理システム作成】見積書を期間指定して作成する方法②【リストボックス作成】
【販売管理システム作成】見積書を期間指定して作成する方法③【リストボックス作成その2】
【販売管理システム作成】見積データ登録用のフォームを作ろう①【フォームの設定】
【販売管理システム作成】見積データ登録用のフォームを作ろう②【コンボボックスの活用】
【販売管理システム作成】見積データ登録用のフォームを作ろう③【リストボックスの活用】
【販売管理システム作成】見積データ登録用のフォームを作ろう④【エクセルシートに登録】
【販売管理システム作成】見積データ登録用のフォームを作ろう⑤【修正削除機能の実装】
【販売管理システム作成】登録済みのデータを修正削除する方法【見積システム完成編】
【販売管理システム作成】登録済みのデータを削除する方法【削除フラグの立て方】