【Excel VBA】InputBox関数を使用して、入力したNo.と一致するデータを削除する

■概要

商品マスタデータに対して、InputBox関数を使用し、入力した商品No.と一致するデータを削除する。

対象データを削除した場合、商品No.は採番し直す。


・削除前(No.3のデータを削除)


・削除後

■フローチャート

「商品マスタデータ削除」処理のフローチャートを以下図に示す。

■プログラム仕様

「商品マスタデータ削除」処理のプログラム仕様を以下表に示す。

入力処理内容出力
「商品マスタデータ削除」処理の変数を宣言する。
・シートオブジェクト(Worksheet型)
・シート名(文字列型)
・商品No.(Integer型)
・インプットボックスのタイトル(文字列型)
・インプットボックスの本文(文字列型)
・行カウンタ(Integer型)
・No.カウンタ(Integer型)
・削除完了フラグ(Boolean型)
文字列関係の変数に初期値を設定する。
・シート名
・インプットボックスのタイトル
・インプットボックスの本文
データの開始行(3行目)をセットする。
・初期値:3
No.の初期値をセットする。
・初期値:1
削除完了フラグセットする。(OFF)
・初期値:False
「商品マスタ」シートをセットする。
【InputBox】
商品No.
●「商品マスタ」シートにフォーカス
|INPUTBOXを表示する。
|▼条件分岐:入力値
|【未入力/キャンセル/数値以外の場合】
||未記入を出力・・・①
|------
|【その他】
||■ループ:No.列の値が空になるまで
|||▼条件分岐:No.の値
|||【入力値と同じ場合】
||||対象行を削除する。
||||削除完了フラグを「True」にする。
|||▲
|||No.の値を振りなおす。・・・②
|||商品No.とデータの開始行をインクリメント
||■
|▲
|▼条件分岐:削除フラグ完了フラグ
|【Trueの場合】
||削除完了出力・・・③
|------
|【その他】
||対象データなし出力・・・④
|▲
【メッセージボックス】
①未記入
③削除完了
④対象データなし

【Excel】
②商品No.
シートオブジェクトを解放する。

■サンプルコード

Option Explicit

' 商品マスタデータ削除処理
Public Sub DelSyohinMstData()
    
    ' 変数宣言
    Dim sht_syohinmst       As Worksheet    ' シートオブジェクト
    Dim sht_name            As String       ' シート名
    Dim syohinNo            As Integer      ' 商品No.
    Dim input_title         As String       ' インプットボックスのタイトル
    Dim input_msg           As String       ' インプットボックスの本文
    Dim i_row               As Integer      ' 行カウンタ
    Dim i_No                As Integer      ' No.カウンタ
    Dim is_delete_flg       As Boolean      ' 削除完了フラグ
    
    ' エラー時の処理をセット
    On Error GoTo DelSyohinMstData_err
    
    ' 文字列関係の変数に初期値を設定
    sht_name = "商品マスタ"
    input_title = "商品マスタデータ削除"
    input_msg = "削除対象のNo.を入力してください"
    
    
    ' データの開始行(3行目)
    i_row = 3
    
    ' No.の初期値セット
    i_No = 1
    
    ' 削除完了フラグセット(OFF)
    is_delete_flg = False
    
    ' 「商品マスタ」シートをセット
    Set sht_syohinmst = ThisWorkbook.Worksheets(sht_name)
    
    ' 「商品マスタ」シートにフォーカス
    With sht_syohinmst
        
        ' INPUTBOX:削除対象No.を入力
        syohinNo = Val(InputBox(Prompt:=input_msg, Title:=input_title))
        
        ' 未入力/キャンセル/数値以外の場合
        If syohinNo = 0 Then
            MsgBox "値を入力してください"
            
            ' 終了処理へ移動
            GoTo DelSyohinMstData_exit
        
        ' 何かしら数値入力した場合
        Else
            ' No.列の値が空になるまでループ
            Do Until .Cells(i_row, 2).Value = ""
                
                ' 入力値とNo.の値が同じ場合
                If .Cells(i_row, 2).Value = syohinNo Then
                    
                    ' 対象行を削除
                    .Rows(i_row).Delete
                    
                    ' 削除完了フラグON
                    is_delete_flg = True
                                   
                End If
                
                ' No.の値を振りなおす
                .Cells(i_row, 2).Value = i_No
                    
                ' インクリメント
                i_No = i_No + 1
                i_row = i_row + 1
            
            Loop
        
        End If
        
        ' 削除フラグ完了フラグがONの場合
        If is_delete_flg Then
            
            MsgBox "削除完了"
        
        ' 削除完了フラグがOFFの場合
        Else
            MsgBox "対象データが見つかりませんでした"
        
        End If
    
    End With
    
    ' 終了処理へ移動
    GoTo DelSyohinMstData_exit

' エラー時の処理
DelSyohinMstData_err:

    ' エラー内容を出力
    MsgBox Err.Description
    
    ' 終了処理へ移動
    GoTo DelSyohinMstData_exit

' 終了処理
DelSyohinMstData_exit:

    ' シートオブジェクトを解放
    Set sht_syohinmst = Nothing

End Sub

■実行結果

「商品マスタデータ削除」処理について、対象の商品マスタが削除される正常系と、未入力・入力ミスを起因とする異常系の実行結果を示す。

▼事前準備

「商品マスタ削除」ボタンにマクロを登録する。

▼正常系

・「商品マスタ削除」ボタンを押下し、InputBoxに「3」を入力し、「OK」ボタンを押下する。


・商品コード「A-003」のデータが削除され、No.の値が採番され直す。

▼異常系

・未入力で実行

・「商品マスタ削除」ボタンを押下し、InputBoxに何も入力せず、「OK」ボタンを押下する。


・「値を入力してください」と出力する。

・存在しない番号を入力

・「商品マスタ削除」ボタンを押下し、InputBoxに「16」を入力し、「OK」ボタンを押下する。


・「対象データが見つかりませんでした」と出力する。

コメント