HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > シート1のB列の数字をシート2に転記して印刷する

即効テクニック

シート操作関連のテクニック

シート1のB列の数字をシート2に転記して印刷する

(Excel 97)
シート1のA列には、印刷を実行するタイミングとなる値が入力されています。

【例】
 A列   B列
 a    静岡県静岡市
 b    東京都中央区
 b    東京都港区
 c    神奈川県小田原市
 c    神奈川県藤沢市
 c    神奈川県南足柄市

Sheet2の動きは、「静岡県静岡市」を転記して印刷する。
「東京都中央区」を転記して、その次の行に「東京都港区」を転記して印刷する。
「神奈川県小田原市」を転記して、その次の行に「神奈川県藤沢市」を転記して、その次の行に「神奈川県南足柄市」を転記して印刷する、となります。

A列の値が同じかどうかを確認しながら、1行目からシート2へ内容をコピーします。
A列の値が変わったら、PrintOutメソッドでシート2を印刷します。
下記のマクロを実行する際には、次の点に注意してください。
  1. シート2の印刷ページ設定をあらかじめ行っておく。
  2. データは2列以上用意する。
  3. A列に空白がないようにデータを入力する。
Sub TEST()

    Dim iData    As Integer
    Dim iCntSame As Integer
    Dim sChkSame As String
    Dim WS2      As Worksheet
    Dim i        As Integer

    Worksheets("Sheet1").Select
    Set WS2 = Worksheets("Sheet2")
    WS2.Cells.Clear
    iData = Cells(1, 1).End(xlDown).Row
    sChkSame = Cells(1, 1).Value
    iCntSame = 0

    For i = 1 To iData
        If Cells(i, 1).Value = sChkSame Then
            iCntSame = iCntSame + 1
            WS2.Cells(iCntSame, 1).Value = Cells(i, 2).Value
        Else
            WS2.PrintOut
            Worksheets("Sheet1").Select
            WS2.Cells.Clear
            iCntSame = 1
            WS2.Cells(1, 1).Value = Cells(i, 2).Value
            sChkSame = Cells(i, 1).Value
        End If
    Next

    WS2.PrintOut

End Sub
変数「iData」は「データ総数」、変数「iCntSame」はA列の同じデータのカウント用、変数「sChkSame」は現在処理しているA列のデータの保存に使っています。
For〜Nextステートメント内では、i行のA列データとひとつ上のA列データを比較して、同じだったらi行B列のデータをシート2に記述、違っていたらシート2のデータを印刷してクリア後、i行A列のデータをシート2に記述しています。
最後に全てのデータを印刷して終了します。