つい集めてしまうものはなんですか?

下記のような簡単なマクロで、複数メンバーのタイムカードを印刷しております。
Excel Sheet 1 のセル(E4)にSheet 2のメンバーのデータから氏名が印刷されます。
この、氏名の印刷される場所のセル(E4)を(E5)に変更する場合、マクロを表示し、
編集から下記のws1.Range("E4")を(”E5")に変更しております。
このマクロの表示、編集画面を出さず、Sheet 1の任意のセルに(E4)を(E5)に変更
することで、直接マクロの表示部分を触らなくてもよい方法はありませんか。
よろしくお願いいたします。

Sub マックスタイムカード既存()
Sheets("マックスタイムカード").Select
Dim i As Long 'この行から
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("マックスタイムカード")
Set ws2 = Worksheets("メンバー")

For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row 'iはメンバーシートのデータを読み込む。

ws1.Range("E4") = ws2.Cells(i, 1) 'セルE4に氏名を入力
ws1.Range("E7") = ws2.Cells(i, 2) 'セルE7に係を入力
ws1.Range("I7") = ws2.Cells(i, 3) 'セルI7に班を入力

ws1.PrintOut
Next i
End Sub 'この行まで

質問者からの補足コメント

  • WindFaller 様
    早々の回答ありがとうございました。
    期待していた通りの結果で、とても嬉しく思います。
    セル(J1)に数値を入れ縦方向に変化する事ができました。
    そこで、あつかましお願いですが、横方向にズラス方法を教えてください。
    現在、セル(E4)ですが、EをFとかGの横方向にする方法をお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/06/17 16:14

A 回答 (2件)

>セル(J1)に数値を入れ縦方向に変化する事ができました。


>そこで、あつかましお願いですが、横方向にズラス方法を教えてください。

それで、たぶんお気づきかと思いますが、.Cells(4+j, "E").Value と書いたけれども、5 と書かずに、"E"と書いてあります。

.Cells(4+j, 5 + k ).Value

と書けば、良いわけですね。つまり、Range("E4") は、Cells(4,"E") →Cells(4,5)
Range("E7") →Cells(7, "E") → Cells(7,5)
Range("I7") →Cells(7, "I") → Cells(7,9)
と書き換えができます。これで、もう応用は出来るはずです。

'//
Sub マックスタイムカード既存Try2()
 '#9003897
 Dim ws1 As Worksheet, ws2 As Worksheet
 Dim i As Long 'ループカウンター
 Dim j As Long '代入数値(行方向)
 Dim k As Long '代入数値(列方向)
 Dim Lr As Long 'メンバーシートの最後の行
 Set ws1 = Worksheets("マックスタイムカード")
 Set ws2 = Worksheets("メンバー")
 Lr = ws2.Cells(Rows.Count, 1).End(xlUp).Row
 With ws1
  .Select
  j = .Range("J1").Value 'マックスタイムカードのJ1 に数値を入れる
  k = .Range("J2").Value 'マックスタイムカードのJ2 に数値を入れる
  For i = 2 To Lr 'iはメンバーシートのデータを読み込む。
   .Cells(4 + j, 5 + k).Value = ws2.Cells(i, 1).Value '★セルE4に氏名を入力
   .Cells(7, "E").Value = ws2.Cells(i, 2).Value 'セルE7に係を入力
   .Cells(7, "I").Value = ws2.Cells(i, 3).Value 'セルI7に班を入力
   .PrintOut 'Preview:=True 'プレビューコマンド
  Next i
 End With
End Sub
'///
    • good
    • 0
この回答へのお礼

WindFaller 様
お世話になりました。
マクロの編集画面を開かず、印刷範囲外にタテ・ヨコの位置指定をし、
非常に楽に簡単になりました。ありがとうございました。

お礼日時:2015/06/18 08:05

こんな感じになりますでしょうか?


シート「マックスタイムカード」の印刷範囲に掛からない場所の任意の場所、
「J1」セルに数値を入れることで、
マクロを動かしていない状態で、VBEditorを開かずに印刷場所をずらすことは可能です。

'//
Sub マックスタイムカード既存Try1()
 '#9003897
 Dim ws1 As Worksheet, ws2 As Worksheet
 Dim i As Long 'ループカウンター
 Dim j As Long '代入数値
 Dim Lr As Long 'メンバーシートの最後の行
 Set ws1 = Worksheets("マックスタイムカード")
 Set ws2 = Worksheets("メンバー")
 Lr = ws2.Cells(Rows.Count, 1).End(xlUp).Row
 With ws1
  .Select
  j = .Range("J1").Value 'マックスタイムカードのJ1 に数値を入れる
  For i = 2 To Lr 'iはメンバーシートのデータを読み込む。
   .Cells(4 + j, "E").Value = ws2.Cells(i, 1).Value 'セルE4に氏名を入力
   .Cells(7, "E").Value = ws2.Cells(i, 2).Value 'セルE7に係を入力
   .Cells(7, "I").Value = ws2.Cells(i, 3).Value 'セルI7に班を入力
   .PrintOut Preview:=True
  Next i
 End With
End Sub
'///

なお、私は、回答者として期待される要件には入っていません。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報