より単純なマクロにしたいのですが・・・
Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim i As Long
Set Ws1 = Worksheets("名簿")
Set Ws2 = Worksheets("表面")
For i = Ws1.Range("B2").Value To Ws1.Range("B4").Value
Ws2.Range("HA2").Value = i
Ws2.Select
If Range("HD2").Value = 1 Then
Range("HG2").Select
ActiveCell.FormulaR1C1 = "1"
Range("HD2").Value = 2 Then
Range("HG2").Select
ActiveCell.FormulaR1C1 = "1"
Sheets(Array("表面", "裏面")).Select
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Range("HG2").Select
ActiveCell.FormulaR1C1 = "2"
ElseIf Range("HD2").Value = 3 Then
Range("HG2").Select
ActiveCell.FormulaR1C1 = "1"
Sheets(Array("表面", "裏面")).Select
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Range("HG2").Select
ActiveCell.FormulaR1C1 = "2"
Sheets(Array("表面, "裏面")).Select
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Range("HG2").Select
ActiveCell.FormulaR1C1 = "3"
End If
Sheets(Array("表面", "裏面")).Select
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Next
Sheets("名簿").Select
Range("F1").Select
Range("C5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
"表面"シートのHA2に任意の印刷No.が入っていき、"表面"シートのHD2にそれぞれ任意の印刷No.に応じて1~3の数字が振られているためその割り振り数字が入っていきます。HD2の数字が1の時は、HG2セルに1の数字が順に入り印刷(表面と裏面は印刷設定で両面になっています)し、HD2の数字が2の時は、HGセルに1の数字が入り印刷、次にHGセルに2の数字が入り印刷。HD2の数字が3の時は、HGセルに1の数字が入り印刷、次にHGセルに2の数字が入り印刷、次にHGセルに3の数字は入り印刷というマクロになっています。実際に動かしてみると
非常に重いため、よりスマートにできるようなコードを考えているのですがこれが私の限界です。どこでも良いので、簡潔にできる所があればアドバイスをいただけると幸いです。
お礼
早速使わせていただきました。 ありがとうございます! これを考えていて大変時間がかかっていたので、大変助かりました。 ありがとうございました。