(3)売上伝票(照会)
伝票明細は行毎に記入されています。
伝票Noでまとめて検索してとりだしています。
10000件のデータでは1秒もかかりません。
通常データベースはインデクスキーを使って高速検索を使いますがパソコンの性能が上がっていますので使わなくても十分です。
標準モジュールに伝票照会フォームが開くプロシージャを記述します。
Sub 伝票照会()
frmSyoukai.Show
End Sub
伝票照会フォーム
伝票照会は伝票Noを入力してOKボタンをクリックするか、リストボックスから照会したい伝票Noをダブルクリックして伝票No のテキストボックスに伝票No を入力してOKボタンをクリックします。
該当する伝票が表示されます。
伝票照会フォームのオブジェクト名一覧
フォームのオブジェクト名で伝票照会フォームを作成します。
照会伝票Noを検索するために売上明細を伝票Noで集約したシートを準備しておきます。
伝票が追加・訂正・削除されるたびに変更しますので、伝票一覧更新ボタンで最新の伝票ヘッダーシートを作成します。
ポイントは売上明細の繰り返しの条件文で次の行との伝票NOの比較をし異なれば伝票が変わったと判断し伝票ヘッダーに記入します。
その時に金額の合計計算をしています。
そして再度リストボックスに表示しています。
10000件のデータで3秒かかります。十分使えると思います。
フォームモジュールに記述しています。
Private Sub cmdSakusei_Click()
Dim i As Long
Dim j As Long
Dim lastrow As Long
Dim kei As Long
lastrow = Worksheets("伝票ヘッダー").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastrow
For j = 1 To 5
Worksheets("伝票ヘッダー").Cells(i, j) = ""
Next
Next
lastrow = Worksheets("売上明細").Cells(Rows.Count, 1).End(xlUp).Row
j = 2
For i = 2 To lastrow
kei = kei + Worksheets("売上明細").Cells(i, 9)
If Worksheets("売上明細").Cells(i, 1) <> Worksheets("売上明細").Cells(i + 1, 1) Then
Worksheets("伝票ヘッダー").Cells(j, 1) = Worksheets("売上明細").Cells(i, 1)
Worksheets("伝票ヘッダー").Cells(j, 2) = Worksheets("売上明細").Cells(i, 2)
Worksheets("伝票ヘッダー").Cells(j, 3) = Worksheets("売上明細").Cells(i, 3)
Worksheets("伝票ヘッダー").Cells(j, 4) = Worksheets("売上明細").Cells(i, 4)
Worksheets("伝票ヘッダー").Cells(j, 5) = kei
j = j + 1
kei = 0
End If
Next
lastrow = Worksheets("伝票ヘッダー").Cells(Rows.Count, 1).End(xlUp).Row
lstDenpyou.ColumnCount = 5
For i = 2 To lastrow
With lstDenpyou
.Clear
End With
Next
For i = 2 To lastrow
With lstDenpyou
.AddItem
.List(i - 2, 0) = Worksheets("伝票ヘッダー").Cells(i, 1)
.List(i - 2, 1) = Worksheets("伝票ヘッダー").Cells(i, 2)
.List(i - 2, 2) = Worksheets("伝票ヘッダー").Cells(i, 3)
.List(i - 2, 3) = Worksheets("伝票ヘッダー").Cells(i, 4)
.List(i - 2, 4) = Worksheets("伝票ヘッダー").Cells(i, 5)
End With
Next
End Sub
フォームが開いたときにリストボックスに伝票ヘッダーのデータを取り込みます。
Private Sub UserForm_Initialize()
Dim lastrow As Long
Dim i As Long
lastrow = Worksheets("伝票ヘッダー").Cells(Rows.Count, 1).End(xlUp).Row
lstDenpyou.ColumnCount = 5
For i = 2 To lastrow
With lstDenpyou
.AddItem
.List(i - 2, 0) = Worksheets("伝票ヘッダー").Cells(i, 1)
.List(i - 2, 1) = Worksheets("伝票ヘッダー").Cells(i, 2)
.List(i - 2, 2) = Worksheets("伝票ヘッダー").Cells(i, 3)
.List(i - 2, 3) = Worksheets("伝票ヘッダー").Cells(i, 4)
.List(i - 2, 4) = Worksheets("伝票ヘッダー").Cells(i, 5)
End With
Next
End Sub
伝票ヘッダーのリストボックスでデータをダブルクリックした時の処理
Private Sub lstDenpyou_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
txtDenno.Text = lstDenpyou.Text
End Sub
OKボタンをクリックした時
1)売上伝票照会シートの内容をクリアします。
2)売上伝票明細から指定した売上伝票を表示します
繰り返しの条件は売上明細の伝票NOテキストボックス売上伝票Noが一致したデータを抽出して売上伝票照会シートにコピーします。
3)合計・消費税・税込の計算をします。
Private Sub cmdOk_Click()
Dim i As Long
Dim j As Long
Dim lastrow As Long
Dim kingaku As Long
'売上伝票照会クリア
Worksheets("売上伝票照会").Cells(1, 5) = ""
Worksheets("売上伝票照会").Cells(2, 5) = ""
Worksheets("売上伝票照会").Cells(4, 5) = ""
Worksheets("売上伝票照会").Cells(5, 5) = ""
For i = 1 To 4
Worksheets("売上伝票照会").Cells(7 + i, 2) = ""
Worksheets("売上伝票照会").Cells(7 + i, 3) = ""
Worksheets("売上伝票照会").Cells(7 + i, 4) = ""
Worksheets("売上伝票照会").Cells(7 + i, 5) = ""
Worksheets("売上伝票照会").Cells(7 + i, 6) = ""
Next
Worksheets("売上伝票照会").Cells(12, 6) = ""
Worksheets("売上伝票照会").Cells(13, 6) = ""
Worksheets("売上伝票照会").Cells(14, 6) = ""
'売上伝票明細から指定した売上伝票を表示
lastrow = Worksheets("売上明細").Cells(Rows.Count, 1).End(xlUp).Row
j = 1
For i = 2 To lastrow
If Worksheets("売上明細").Cells(i, 1) = txtDenno.Text Then
Worksheets("売上伝票照会").Cells(1, 5) = Worksheets("売上明細").Cells(i, 1)
Worksheets("売上伝票照会").Cells(2, 5) = Worksheets("売上明細").Cells(i, 2)
Worksheets("売上伝票照会").Cells(4, 5) = Worksheets("売上明細").Cells(i, 3)
Worksheets("売上伝票照会").Cells(5, 5) = Worksheets("売上明細").Cells(i, 4)
Worksheets("売上伝票照会").Cells(7 + j, 2) = Worksheets("売上明細").Cells(i, 5)
Worksheets("売上伝票照会").Cells(7 + j, 3) = Worksheets("売上明細").Cells(i, 6)
Worksheets("売上伝票照会").Cells(7 + j, 4) = Worksheets("売上明細").Cells(i, 7)
Worksheets("売上伝票照会").Cells(7 + j, 5) = Worksheets("売上明細").Cells(i, 8)
Worksheets("売上伝票照会").Cells(7 + j, 6) = Worksheets("売上明細").Cells(i, 9)
j = j + 1
End If
Next
'合計計算
For i = 8 To 11
kingaku = kingaku + Worksheets("売上伝票照会").Cells(i, 6)
Next
Worksheets("売上伝票照会").Cells(12, 6) = kingaku
Worksheets("売上伝票照会").Cells(13, 6) = kingaku * 0.05
Worksheets("売上伝票照会").Cells(14, 6) = kingaku * 1.05
Unload Me
Worksheets("売上伝票照会").Select
End Sub
Private Sub cmdCancel_Click()
Unload Me
End Sub
売上伝票照会シート
Sub 伝票印刷()
Worksheets("売上伝票").PrintPreview
End Sub
Sub メニュー()
Dim i As Long
Cells(1, 5) = ""
Cells(2, 5) = ""
Cells(4, 5) = ""
Cells(5, 5) = ""
For i = 1 To 4
Cells(7 + i, 2) = ""
Cells(7 + i, 3) = ""
Cells(7 + i, 4) = ""
Cells(7 + i, 5) = ""
Cells(7 + i, 6) = ""
Next
Cells(12, 6) = ""
Cells(13, 6) = ""
Cells(14, 6) = ""
Worksheets("メニュー").Select
End Sub