- ベストアンサー
マクロを使って特定シートから値を抽出し、別シートへ反映して印刷する方法
- 質問者は、特定のシートから値を抽出し、別のシートに反映し、さらに印刷したいと考えています。
- 質問者が試したマクロではうまく動作しなかったため、修正方法を求めています。
- 質問者のマクロでは、データベースシートの特定の行にフラグを立て、通知書シートの特定のセルにその行の社員番号を反映させて印刷する処理を行っていました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どういう動作をしてしまっているのかが書かれていないので判らないです。 強いて言うならここかもです。 ↓なにがアクティブなシートなのか不明 lastrow = ActiveSheet.Range("A65536").End(xlUp).Row '最終行を取得する シートを指定すると、どうでしょうか? lastrow = Worksheets("データベース").Range("A65536").End(xlUp).Row '最終行を取得する
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
【手直しマクロ】 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)」などのようにして,少し待ちを入れた方が良い事もあります。