こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

より単純なマクロにしたいのですが・・・

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の数字は入り印刷というマクロになっています。実際に動かしてみると
非常に重いため、よりスマートにできるようなコードを考えているのですがこれが私の限界です。どこでも良いので、簡潔にできる所があればアドバイスをいただけると幸いです。

投稿日時 - 2012-03-09 18:56:50

QNo.7352391

すぐに回答ほしいです

質問者が選んだベストアンサー

コンパイルエラーにならないコードをアップしてください。

一応
> Range("HD2").Value = 2 Then
 ElseIf Range("HD2").Value = 2 Then

> Sheets(Array("表面, "裏面")).Select
 Sheets(Array("表面", "裏面")).Select
であるとして

Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim i As Long, j As Long
Set Ws1 = Worksheets("名簿")
Set Ws2 = Worksheets("表面")
For i = Ws1.Range("B2").Value To Ws1.Range("B4").Value
  With Ws2
    .Range("HA2") = i
    For j = 1 To .Range("HD2").Value
      .Range("HG2") = j
      Worksheets(Array("表面", "裏面")).PrintOut
    Next
  End With
Next
Sheets("名簿").Select
  ・・・

これで如何でしょうか?

投稿日時 - 2012-03-10 01:35:24

お礼

エラーの出るコードを記載してしまいました。大変お手数おかけいたしました。
無事教えていただいたコードで印刷も早くできるようになり、大変感謝致します。
ありがとうございました<(_ _)>

投稿日時 - 2012-03-12 20:32:33

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問