投稿/コメントを表示します。

このパターンの練習不足を感じましたので、手持ちのサンプルデータで補習してみました。
顧客名が混在する日付順の販売データから特定顧客データを抜き出し、別シートにある請求書雛形に転記するという目標です。
Sub rensyhu032602()
         '販売データから指定顧客データを抜き出し請求書シートに転記する
    Dim gyo
    Dim kokyaku
    kokyaku = 12
    For gyo = 4 To 32
        If Worksheets("販売").Range("B" & gyo).Value = Worksheets("請求書雛形").Range("A6").Value Then
            Worksheets("請求書雛形").Range("A" & kokyaku).Value = Worksheets("販売").Range("A" & gyo).Value '日付
            Worksheets("請求書雛形").Range("B" & kokyaku).Value = Worksheets("販売").Range("C" & gyo).Value '商品
            Worksheets("請求書雛形").Range("C" & kokyaku).Value = Worksheets("販売").Range("D" & gyo).Value '単価
            Worksheets("請求書雛形").Range("D" & kokyaku).Value = Worksheets("販売").Range("E" & gyo).Value '数量
            Worksheets("請求書雛形").Range("E" & kokyaku).Value = Worksheets("販売").Range("F" & gyo).Value '金額
            kokyaku = kokyaku + 1   
        End If
    Next
End Sub

変数=変数+1は、 こんな使い方でokでしょうか。
販売データから顧客ごとの販売合計にもチェレンジ。
自前のマクロ請求書データと検証して、合計額が一致したときは嬉しくなりました!
数週間前、参考書のサンプルのとおりに独学で作ろうとしたときは、半分以上記録マクロでしたから、
今回一から自分で書けたことにびっくりしました。

実は、1顧客分だけ数字が合わなかったんです。
全部でなく1顧客というのはどうもおかしい。何度も検証を繰り返した結果判明したこと。
同じシートでいろいろな顧客の請求書をテストし、データをクリアせずに実行していたので
行数の多い顧客データが1行、次の顧客データを処理する時上書きされず、残っていたのです。
ワークシート関数ですと必ず範囲指定があるので、こういうミスは起こりませんが、
マクロの場合はきちんと指示しないかぎり、忠実な小人ちゃんは前のデータを消してくれませんから
カウント変数の初期化に限らず、何かの処理を繰り返す際のリセットを忘れてはならないと
学びました。
たくさん失敗から学ばなくてはなりません・・・・(笑)
by gooska
2016/03/26 22:31