Excel

シート上の値をもとに別シートのデータを抽出する

例:「在庫管理」から「棚卸管理」または「貸出管理」のデータを抽出し表示させる。

シートは3つ

  • 在庫
  • 棚卸
  • 貸出

在庫台帳のデータ「管理番号」をもとに、「棚卸管理」または「貸出管理」で該当の管理番号を抽出します。

抽出するためのフォームを使った方法で説明します。

作成するもとになった管理台帳

1つのワークシート上に複数の外部媒体管理一覧があり、棚卸記録は列方向に追加する方法でした。説明するまでもなく、この方法は非常に見にくいです。

貸出台帳は別シートにあり、管理台帳と貸出台帳はそれぞれ更新する必要がありました。

改善した台帳の使い方

シート「在庫」を基準に動作します。

(1)抽出したい管理番号を選択します。→ B列「管理番号」

(2)シート上のコマンドボタン「フォーム」をクリックし、フォームを表示します。管理番号はフォーム上に表示します。

(3)フォーム上のシート「棚卸」または「貸出」を選択し、コマンドボタン「表示」をクリックします。

 棚卸を選択した場合です。

台帳作成方法

シートとフォームを作成します。

シート

3つのワークシートを作成します。

  • 在庫
  • 棚卸
  • 貸出

シート「在庫」です。

シート「棚卸」です。

シート「貸出」です。

フォーム

出来上がりです。

フォームにラベル、フレーム、フレーム内にオプションボタン2個、コマンドボタン2個を作成します。

種類オブジェクト名
フォームUserForm1
フレームFrame1
ラベルlb_name
オプション「棚卸」op_1
オプション「貸出」op_2
コマンドボタン「表示」cmd_hyoji
コマンドボタン「キャンセル」cmd_cancel
オブジェクト名一覧

サンプルコード

コマンドボタン「表示」のコードです。

Private Sub cmd_hyoji_Click()
    Dim mName As String
    
    mName = lb_name.Caption
    
    Select Case True
        Case Me.op_1.Value
           Worksheets("棚卸").Select
           Range("A1").AutoFilter 2, mName
        Case Me.op_2.Value
           Worksheets("貸出").Select
           Range("A1").AutoFilter 2, mName
    End Select
    
    Unload UserForm1

End Sub

コマンドボタン「キャンセル」のコードです。

Private Sub cmd_cancel_Click()
    Unload UserForm1
End Sub




標準モジュールにフォームを表示した後のコードを作成します。

Sub uf_show()
    Dim cNo As Long:
    cNo = ActiveCell.Column
    
    Load UserForm1
    
    With UserForm1
        .op_1.Value = True
        .lb_name.Caption = ActiveCell.Value
        
        If .lb_name.Caption = "" Or cNo <> 2 Then
            MsgBox "管理番号を選択してください", vbExclamation
            Exit Sub
        End If
    End With
    
    UserForm1.Show
    
End Sub

説明

  • 3行目:シート「管理」で選択した番号を変数「cNo」に格納します。
  • 8行目:オプション「棚卸」をデフォルトにする。
  • 9行目:フォームのラベルに管理番号をひょうじする。
  • 11~14行目:シート「管理」で管理番号以外を選択した場合、処理を中断します。
  • 17行目:フォームを表示します。

シート「管理」上にコマンドボタンを設置し、「uf_show」をマクロ登録します。

-Excel
-