より単純なマクロにしたいのですが・・・
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の数字は入り印刷というマクロになっています。実際に動かしてみると
非常に重いため、よりスマートにできるようなコードを考えているのですがこれが私の限界です。どこでも良いので、簡潔にできる所があればアドバイスをいただけると幸いです。
お礼
回答ありがとうございます。 お礼が遅くなってすみません。 No.3にも回答頂いていますが、こちらにまとめてお礼いたします。 『(経過)時間』とわけのわからん書き方をしていた、セルに表示される値ですが、 例) 赤坂さん(仮):8時00分00秒~8時00分01秒まで勤務 ⇒ B4には"00:00:01" 井上さん(仮):8時20分00秒~8時52分54秒まで勤務 ⇒ B5には"00:32:54" 植村さん(仮):8時00分10秒~10時33分22秒まで勤務 ⇒ B6には"02:33:12" とそれぞれ表示されます。B7には3人の平均勤務時間"01:02:02"が表示されます。 のでB4~B6の値は24時間を超えることはないです。 その日一日の勤務時間累積といった意味合いで使っていました。 『(経過)時間』と略さずにちゃんと書かないとだめですよね、すみません。 改良していただいたソース、コピペで動きました。 ありがとうございます。 ソースの内容ですが、『For Each ○○ In △△』を見たのは初めてなので 勉強しながら理解していこうと思います。 (今はまだ何が起こっているかわからない状態なので…) 色々と時間を割いて頂き、本当にありがとうございました。 また機会がありましたらよろしくお願いします(ペコリ)。