今回は、前回までに作成した「顧客情報入力」フォームに「顧客分類」項目を追加し、顧客分類シートに事前登録した顧客分類をリスト選択入力できるよう機能追加し、「顧客検索」フォームも「顧客分類」で抽出できるよう機能追加する手順を紹介します。
<機能追加手順>
●第4回 フォームを使った顧客管理の作成 [名前定義の利用] で作成したファイルを開き、
シート「Sheet2」を「顧客分類」に名前の変更をし、「顧客分類」シートのセル「A1」に「顧客分類」と入力します。
「顧客情報」シートのG列に顧客分類用の列を挿入します。
セル「G1」を選択した状態で「名前の定義」ウィンドウを表示して、名前「顧客分類列」を追加します。(挿入したG列以降の名前定義のセル位置は自動変更されます)
●「Visual Basic Editor」を起動し、「frm顧客情報入力」フォームにラベルとコンボボックス(オブジェクト名:cmb顧客分類)を追加します。
入力順番の変更は、フォーム上を右クリックしてショートカットメニューの「タブオーダー」から設定します。
「frm顧客情報入力」フォームの処理を追加・変更します。
Private Sub UserForm_Initialize()
Me.lbl行番号.Caption = Worksheets("顧客情報").Range("A1").CurrentRegion.Rows.Count + 1
Call SetBunruiList
End Sub
Private Sub SetBunruiList() '←顧客分類コンボボックスに顧客分類リストをセットする処理
Dim wRow As Long
Me.cmb顧客分類.Clear
For wRow = 2 To Worksheets("顧客分類").Range("A1").CurrentRegion.Rows.Count
Me.cmb顧客分類.AddItem Worksheets("顧客分類").Cells(wRow, 1)
Next
End Sub
Private Sub cmd先頭移動_Click()
Call DspDataSet(2)
End Sub
Private Sub cmd前移動_Click()
If Me.lbl行番号 > 1 Then
Call DspDataSet(Me.lbl行番号 - 1)
Else
Call DspDataSet(1)
End If
End Sub
Private Sub cmd次移動_Click()
Dim wMaxRow As Long
wMaxRow = Worksheets("顧客情報").Range("A1").CurrentRegion.Rows.Count
If Me.lbl行番号 < wMaxRow Then
Call DspDataSet(Me.lbl行番号 + 1)
Else
Call DspDataSet(wMaxRow)
End If
End Sub
Private Sub cmd最終移動_Click()
Dim wMaxRow As Long
wMaxRow = Worksheets("顧客情報").Range("A1").CurrentRegion.Rows.Count
Call DspDataSet(wMaxRow)
End Sub
Private Sub cmd新規_Click()
Call DspDataSet(0)
End Sub
Private Sub cmd検索_Click()
frm顧客検索.Show vbModal
If rtnNo > 1 Then
Call DspDataSet(rtnNo)
End If
End Sub
Private Sub txt顧客名_AfterUpdate()
If Me.txt顧客名 <> "" Then
If Me.txtフリガナ = "" Then
Me.txtフリガナ = StrConv(Application.GetPhonetic(Me.txt顧客名), vbNarrow)
End If
End If
End Sub
Private Sub cmd登録_Click()
Dim wRow As Long
If Me.txt顧客番号 = "" Then
MsgBox "顧客番号を入力してください。", vbExclamation + vbOKOnly, "入力エラー"
Exit Sub
End If
If Me.txt顧客名 = "" Then
MsgBox "顧客名を入力してください。", vbExclamation + vbOKOnly, "入力エラー"
Exit Sub
End If
With Worksheets("顧客情報")
wRow = Me.lbl行番号.Caption
.Cells(wRow, .Range("顧客番号列").Column) = Me.txt顧客番号
.Cells(wRow, .Range("顧客名列").Column) = Me.txt顧客名
.Cells(wRow, .Range("フリガナ列").Column) = Me.txtフリガナ
.Cells(wRow, .Range("郵便番号列").Column) = Me.txt郵便番号
.Cells(wRow, .Range("住所列").Column) = Me.txt住所
.Cells(wRow, .Range("電話番号列").Column) = Me.txt電話番号
.Cells(wRow, .Range("顧客分類列").Column) = Me.cmb顧客分類
.Cells(wRow, .Range("備考列").Column) = Me.txt備考
End With
MsgBox "登録しました。", vbInformation + vbOKOnly, "Information"
End Sub
Private Sub DspDataSet(prmNo)
With Worksheets("顧客情報")
If prmNo > 1 Then
Me.lbl行番号.Caption = prmNo
Me.txt顧客番号 = .Cells(prmNo, .Range("顧客番号列").Column)
Me.txt顧客名 = .Cells(prmNo, .Range("顧客名列").Column)
Me.txtフリガナ = .Cells(prmNo, .Range("フリガナ列").Column)
Me.txt郵便番号 = .Cells(prmNo, .Range("郵便番号列").Column)
Me.txt住所 = .Cells(prmNo, .Range("住所列").Column)
Me.txt電話番号 = .Cells(prmNo, .Range("電話番号列").Column)
Me.cmb顧客分類 = .Cells(prmNo, .Range("顧客分類列").Column)
Me.txt備考 = .Cells(prmNo, .Range("備考列").Column)
Else
Me.lbl行番号.Caption = .Range("A1").CurrentRegion.Rows.Count + 1
Me.txt顧客番号 = ""
Me.txt顧客名 = ""
Me.txtフリガナ = ""
Me.txt郵便番号 = ""
Me.txt住所 = ""
Me.txt電話番号 = ""
Me.cmb顧客分類 = ""
Me.txt備考 = ""
End If
End With
Me.txt顧客番号.SetFocus
End Sub
●次に、「顧客検索」フォームに顧客分類での抽出機能を追加します。
「frm顧客情報入力」フォームと同じように「frm顧客検索」フォームへラベルとコンボボックス(オブジェクト名:cmb顧客分類)を追加します。
「frm顧客検索」フォームの処理を追加・変更します。
Private Sub UserForm_Initialize()
rtnNo = 0
Call SetBunruiList
Call SetListBox
End Sub
Private Sub SetBunruiList() '←顧客分類コンボボックスに顧客分類リストをセットする処理
Dim wRow As Long
Me.cmb顧客分類.Clear
For wRow = 2 To Worksheets("顧客分類").Range("A1").CurrentRegion.Rows.Count
Me.cmb顧客分類.AddItem Worksheets("顧客分類").Cells(wRow, 1)
Next
End Sub
Private Sub txt顧客名_Change()
Call SetListBox
End Sub
Private Sub cmb顧客分類_Change() '← 検索する顧客分類を選択した時の処理追加
Call SetListBox
End Sub
Private Sub lst顧客リスト_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
rtnNo = Me.lst顧客リスト.Text
Unload Me
End Sub
Private Sub SetListBox() '←リストボックスに表示する処理
Dim wRow As Long
Dim wLstRow As Long
Dim wHitFlg As Boolean
Me.lst顧客リスト.Clear
wLstRow = 0
With Worksheets("顧客情報")
For wRow = 2 To .Range("A1").CurrentRegion.Rows.Count
wHitFlg = True
If Me.txt顧客名 <> "" Then
If InStr(1, .Cells(wRow, .Range("顧客名列").Column), Me.txt顧客名, vbTextCompare) = 0 Then
wHitFlg = False
End If
End If
If Me.cmb顧客分類 <> "" Then
If .Cells(wRow, .Range("顧客分類列").Column) <> Me.cmb顧客分類 Then
wHitFlg = False
End If
End If
If wHitFlg = True Then
Me.lst顧客リスト.AddItem ""
Me.lst顧客リスト.List(wLstRow, 0) = wRow
Me.lst顧客リスト.List(wLstRow, 1) = Worksheets("顧客情報").Cells(wRow, 2)
wLstRow = wLstRow + 1
End If
Next
End With
End Sub
<完成>
「顧客情報入力」フォームへ顧客分類項目が追加され、顧客分類シートに事前登録した顧客分類をリスト選択入力でき、「顧客検索」フォームも顧客分類で抽出できるようになりました。
次回は、今回作成したフォームに「生年月日」項目と年齢欄を追加し、年齢を自動計算表示するよう機能追加する手順を紹介します。
第6回 フォームを使った顧客管理の作成 [生年月日の追加]