ビジネスに役立つ講座や交流会を開催
社長・個人事業主からサラリーマン・主婦まで、どなたでも
アベノ塾

ホーム  会場案内  お問合せ

〒545-0052
大阪市阿倍野区阿倍野筋3-12-2
あべのクオレ1F
(ナガセキャリアプラザ アベノ校)
TEL 06-6647-5571

(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