[[20091222113511]] 『店コード別に印刷』(初心者マーク) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『店コード別に印刷』(初心者マーク)

教えて下さい。

シート名:CSV のA列に通し番号 1,2,3,4・・・・ B列に店コード 101,102,103,104・・・・(※店コードは重複しています。101が10件のレコードだったり、102は3件だったり・・・) E列に商品名  ***、×××、○○○・・・・

とデータがあります。
このデータを シート名:PRINT2 に店コードを
=JIS(OFFSET(CSV!A2,MAIN!$D$5-1+MAIN!$D$4,MAIN!$D$4))で参照しています。
また、商品名を =JIS(OFFSET(CSV!D2,MAIN!$D$5-1+MAIN!$D$4,MAIN!$D$4))
で参照しています。
PRINT2では、一度に7件分のデータを表示しています。

現状、下記のVBAで印刷をすると店コードに関係なく通し番号順に印刷されてしまいます。
そこで、店コード別に印刷する方法をご教授下さい。

(Windows2000,Excel2003です)

Sub PRINT2()

    Dim CSV_Count As Variant                    'CSV Record Count
'    Dim PRN_Count As Variant                    'Print Count

        CSV_Count = Worksheets("MAIN").Cells(3, 4).Value
'        PRN_Count = Worksheets("MAIN").Cells(5, 4).Value

        Do

          PRN_Count = Worksheets("MAIN").Cells(5, 4).Value
          Sheets("PRINT2").Select
          ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
          Worksheets("MAIN").Cells(5, 4).Value = Worksheets("MAIN").Cells(5, 4).Value + 7

        Loop Until CSV_Count < Worksheets("MAIN").Cells(5, 4).Value + 1

        Worksheets("MAIN").Cells(5, 4).Value = 0
    Sheets("CSV").Select
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True
    Cells.Select
    Sheets("CSV").Select

    Selection.ClearContents
    Sheets("MAIN").Select

End Sub


 現在やって居られる方法から
 結構作り直す必要が有ると思うので
 詳細を書いておかれるのが良いと思います。

 PRINT2 シートには、商品名だけが表示されれば良いのか。
 7行分のデータは、どのセルにどの様に表示されれば良いのか。
 印刷は、範囲を指定して行うのか 全て印刷出来れば良いのか。
 CSV シートのデータは、何順に並んでいるのか。

 また、MAINシートのD3,D4,D5セル以外は何かに使用して居ますか?
 どの範囲を使用していますか?
  (どの範囲なら、マクロが使用しても構いませんか?)

 (HANA)


スイマセン。詳細をお伝えします。

MAINシートのD3,D4,D5セル以外は何も使用していません。

PRINT2 シートの A9に店コード D9に商品名 、A15に店コード D15に商品 、A21に店コード D21に商品名 、A27に店コード D27に商品名 、A33に店コード D33に商品名 、A39に店コード D39に商品名 、A45に店コード D45に商品名
と計7行にデータを表示させ、全部印刷したいです。

CSV シートのデータは 店コード順(昇順)に並んでいます。

宜しくお願いします。

(初心者マーク)


 遅くなりました、済みません。
 以下のようにしてみます。

 マクロはMAINシートの B2:C8セルに店コード毎の7個ずつデータを書き出し
 PRINT2シートの印刷を実行します。
  以下のコードはテストコードなので、プリントプレビューをします。
  プレビューが表示されたら「閉じる(C)」で閉じてください。次へ進みます。

 マクロは、PRINT2シートの所定の位置へデータをセットしませんので
 MAINシートの各セルのデータを参照して下さい。

 MAINシートのイメージは
	[A]	[B]	[C]
[1]	No	店コード	商品名
[2]	1		
[3]	2		
[4]	3		
[5]	4		
[6]	5		
[7]	6		
[8]	7		
 この様にして有りますので、例えば
 >A9に店コード
 =IF(MAIN!B2="","",JIS(MAIN!B2))

 >D9に商品名
 =IF(MAIN!C2="","",JIS(MAIN!C2))

 と言った感じで数式で参照する様にしておいて下さい。

 コードは以下です。

 '------
Sub 印刷()
Dim myRow As Long, myCount As Long
Sheets("MAIN").Select
myRow = 1
    With Sheets("CSV")
        Do
            Do
                myRow = myRow + 1
                myCount = myCount + 1
                Range("B" & myCount + 1).Value = .Range("B" & myRow).Value
                Range("C" & myCount + 1).Value = .Range("E" & myRow).Value
            Loop Until myCount = 7 Or .Range("B" & myRow + 1).Value <> .Range("B" & myRow).Value
            Sheets("PRINT2").PrintPreview
'            Sheets("PRINT2").PrintOut Copies:=1, Collate:=True
            Range("B2:C8").ClearContents
            myCount = 0
        Loop Until .Range("A" & myRow + 1).Value = ""
    End With
End Sub
 '------

 大きなループとして、CSVシートのA列のセルの値が「""」になる迄ループをします。
 その中のループでは
    B2:C8に CSVシートのデータを書き出して行きますが
  カウント数が7になるか
  B列の一つ下の行のセルの値が現在の行の値と異なった時(新しいコードに成ったとき)
  ループを終わります。
 中のループが終わるたびに、印刷をし B2:C8セルのクリアと、カウントのリセットを行います。

 (HANA) 

HANA 様

ありがとうございました!希望通りの印刷が出来ました。

分かり易い解説も嬉しいです!!

ループ処理について、とても勉強になりました!

(初心者マーク)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.