- 締切済み
【VBA】数値を入力して特定のセルを転記・印刷する
VBA初心者です。よろしくお願いします。 データの転記について伺います。 名簿シートに入力された情報を申請書シートに転記し、さらに印刷したいのですが このとき転記する範囲をセルに直接入力して指定することはできますでしょうか。 イメージとしては以下のような感じです。 「No2からNo4の人の氏名、住所、備考を転記したい」 【名簿シート】 A B C D E ____________________ 1│No 氏名 住所 性別 備考 2│1 鈴木 東京 男性 継続契約 3│2 田中 大阪 女性 電話無 4│3 荻 愛知 男性 眼鏡有 5│4 矢作 青森 男性 眼鏡有 ・ ・ ・ 【申請書シート】 ○○様 以下のとおり申請します。 ──────────── │氏名 │住所 │備考 │ ──────────── │田中 │大阪 │電話無 │ ──────────── │荻 │愛知 │眼鏡有 │ ──────────── │矢作 │青森 │眼鏡有 │ ──────────── 【印刷範囲指定シート】 Noを入力して指定 ─── ─── │ 2 │ - │ 4 │ ─── ─── ── │印刷│ ── ※マクロボタン↑ ※これを押すと指定範囲が印刷される アドバイスよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- FEX2053
- ベストアンサー率37% (7991/21373)
多分、ほかの回答者はもっとカッコいいコードを書くでしょうし、 基本中の基本である「宣言」をあえてすべて省略した不完全な コードですが、質問者さんが「VBA初心者」ということなので、 「F8」トレースでの動きがわかりやすいコードを書いてみました。 前提条件 1.元データはSheet1のA1から3項目、縦に並んでいる 2.印刷範囲はSheet2のA1にfrom、A2にtoが設定されている 3.コピー先はSheet3のA1から順 Sub Macro1() D_FROM = Sheets("Sheet2").Range("A1").Value D_To = Sheets("Sheet2").Range("A2").Value 'ここで印刷範囲を取得しておく Sheets("Sheet1").Activate Range("A1").Select Sheets("Sheet3").Activate Range("A1").Select 'コピー元とコピー先の範囲を先に選択しておく 'シートを選択し直しても、選択セルが動かないことを使う Sheets("Sheet1").Activate Do Until Selection.Value = D_FROM Selection.Offset(1).Select Loop '印刷範囲の先頭が出てくるまで選択セルを逐次ずらす Do Selection.Resize(1, 3).Copy Sheets("Sheet3").Activate ActiveSheet.Paste '印刷範囲のコピーを行う Selection.Offset(1).Select '印刷範囲のセル選択位置を一つずらす Sheets("sheet1").Activate If Selection.Value = D_To Then Exit Do '印刷範囲の終了が出てくるとループを飛び出す Selection.Resize(1, 1).Offset(1).Select Loop '元データのセルも選択し直してひとつずらす Sheets("sheet3").Activate ActiveWindow.SelectedSheets.PrintOut Copies:=1 'コピーが終わったので印刷する End Sub メチャかっこ悪いですが、VBAのコードは「後でメンテをするときに わかりやすい簡単なコード」というのが私の考え方なので。