この人頭いいなと思ったエピソード

【マクロ】特定シートから値を抽出し、別シートへ反映して印刷

このようなマクロを組みたいです。
作成しましたがうまく動きません。
どなたか修正していただけませんか?

【やりたいこと】
シート名1『データベース』
シート名2『通知書』


(1)『データベース』
 4行目からデータベースが作成された表
 C列は社員番号の列

(2)『データベース』シートのA列に『1』のフラグを立てる

(3)『通知書』のセルB1に自動的に(2)で立てた行のC列の社員番号が反映され
 同時に通知書シートを印刷をする。


【組んでみたマクロ】
Dim i As Integer 'カウント用変数
Dim lastrow As Integer '最終行が入る変数

i = 4 '最初に始まる行数を指定

lastrow = ActiveSheet.Range("A65536").End(xlUp).Row '最終行を取得する

For i = 4 To lastrow '最終行まで繰り返す

If Worksheets("データベース").Range("A" & i & "") = 1 Then 'A列に「1」があったものは以下の処理をする

'別シートの特定セルを取得する
Worksheets("通知書").Range("B1") = "=INDIRECT(""データベース!""&""C" & i & """)" '社員番号

'印刷する
Sheets("通知書").PrintOut

Else 'A列に「1」がなかったら以下の処理をする
End If 'A列に何かあるかの判別終了
Next i '繰り返しの終わり。i(カウント用変数)に1を足す
End Sub

A 回答 (2件)

どういう動作をしてしまっているのかが書かれていないので判らないです。



強いて言うならここかもです。
↓なにがアクティブなシートなのか不明
lastrow = ActiveSheet.Range("A65536").End(xlUp).Row '最終行を取得する

シートを指定すると、どうでしょうか?
lastrow = Worksheets("データベース").Range("A65536").End(xlUp).Row '最終行を取得する
    • good
    • 0

【手直しマクロ】


sub macro1r1()
 ’「行番号」の最大値はIntegerの上限値を超える可能性があるので直すこと
 Dim i As Long
 Dim lastrow As Long

 ’「現在のシート」がデータベースではないと失敗するので直すこと
 lastrow = worksheets("データベース").Range("A65536").End(xlUp).Row

 ’「For i =」でiは初期化されるので,事前に初期値をセットする必要はない
 For i = 4 To lastrow '最終行まで繰り返す

  ’簡素化
  If Worksheets("データベース").Range("A" & i) = 1 Then

   ’適正化および簡素化
   Worksheets("通知書").Range("B1").value = worksheets("データベース").range("C" & i).value

   ’念のため
   worksheets("通知書").calculate
   Sheets("通知書").PrintOut

  ’簡素化
  End If
 Next i
End Sub


以上のように直した方が良い箇所は幾つか見受けられますが,致命的にマクロが間違っている箇所は(Integerを除いて)ありません。

肝心の
>うまく動きません。

の具体的な症状,いったいこのマクロでどうあるべき所がどうなってしまって何が問題になっているのか,ご相談にしっかりと明記するようにしてください。

●通知書の印刷結果が全く間違えている
 単純にこのマクロに関係なく,シートに投入してある数式等が間違っている場合もよくあります。
 マクロ以前に手動で通知書の所定のセルにデータを記入し,数式等が正しく計算結果を出すことを再確認してください。

●通知書の印刷結果が時々更新されていない
 この手のマクロにすると,画面の更新が間に合わないまま印刷に走ってしまい印刷結果が適正でなくなる場合があります。
 手直し例ではシートの再計算を明示的に行わせましたが,場合によっては更に「application.wait now + timeserial(0,0,3)」などのようにして,少し待ちを入れた方が良い事もあります。
    • good
    • 0

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