- ベストアンサー
選択したデータだけ印刷するには?
例えばシート1のB列に顧客番号・C列に住所・D列に氏名のデータが入っていて、選択した顧客番号のデータのみを、タッグシールに印刷したいのです。 印刷したいデータの選択は、A列に顧客番号の横にチェックを直接入力します。 タッグシールはA4に10枚あります。 初心者で、本を読んでみたりしたのですが、どうしても分かりません。 具体的に教えていただくと助かります。よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
良く見ると、項目の並びは質問と違うが辛抱してください。こちらの方が常識的では。 (1)下記のプログラムの終わり近くに「STOP」の行があるがそのままにして、(2)の列幅等が固まるまで、1ページだけ、しばらく試し打ちで実行のこと。 本番ではSTOPの前に「’」(アポストロフィ)を入れると、無いものと 同じになる(注釈化)。 シートのミシン線に薄く鉛筆で線を入れA4コピーを10枚ぐらい取り、そのコピー用紙で試し印刷すること。 (2)列幅・行高・フォントサイズを適当にして、2列6枚が上手く収まる (ミシン線を跨がない)が出来るかどうか、試行錯誤すること。必ず出来るかどうか私は確信が持てないですが、修正が必要な時、新しい要望が出たとき、プログラムのどこを、どのように直せば良いか、判るでしょうか。出来るだけ初等的なコーヂングにしていますけれど。 (4)毎回試し打ちする時、sheet2は手動でクリアして実行すること。 (本番ではプログラムでクリアします) (5)何列のシールか何人分のシールかなど書いてないので、手探りに なっています。直し方が判るでしょうか。 難しいと思えば、フリーソフトの利用をお勧めします。 Sub test01() ' Sheet1でA列出状サイン、B列社名、C列郵便番号、D列住所1、E列住所2 ' F列顧客番号とする。 Dim sh1 As Worksheet '会社住所禄 Dim sh2 As Worksheet 'シール印刷画面 Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") d = sh1.Range("a1").CurrentRegion.Rows.Count ' sh2.Cells.Clear i = 0 '----------シール1枚分項目セット p05: For j = 1 To 6 * 7 Step 7 '6人x2列でシール1枚とする p01: i = i + 1 '次の行へ If sh1.Cells(i, 1) <> 1 Then GoTo p02 'サイン1は印刷しない If i > d Then GoTo owari '最下行を過ぎたか GoTo p01 p02: '--左列 sh2.Cells(j + 1, 2) = sh1.Cells(i, 3) '郵便番号 sh2.Cells(j + 2, 3) = sh1.Cells(i, 4) '住所1 sh2.Cells(j + 3, 3) = sh1.Cells(i, 5) '住所2 sh2.Cells(j + 4, 4) = sh1.Cells(i, 2) & "御中" '会社名 sh2.Cells(j + 5, 5) = sh1.Cells(i, 6) '顧客番号 p03: i = i + 1 If sh1.Cells(i, 1) <> 1 Then GoTo p04 'サイン1は印刷しない If i > d Then GoTo owari '最下行を過ぎたか GoTo p03 p04: '--右列 sh2.Cells(j + 1, 8 + 2) = sh1.Cells(i, 3) '郵便番号 sh2.Cells(j + 2, 8 + 3) = sh1.Cells(i, 4) '住所1 sh2.Cells(j + 3, 8 + 3) = sh1.Cells(i, 5) '住所2 sh2.Cells(j + 4, 8 + 4) = sh1.Cells(i, 2) & "御中" '会社名 sh2.Cells(j + 5, 8 + 5) = sh1.Cells(i, 6) '顧客番号 Next j sh2.Range("a1:m50").PrintOut Stop 'シール印刷 sh2.Range("a1:m50").Clear '印刷エリアクリア GoTo p05 '次のシール印刷準備へ '---------------- owari: sh2.Range("a1:m50").PrintOut ' 最終分印刷 End Sub OK-WEB横の文字数制限のため無理やり改行されている「コメント」の部分は、1行に直して下さいね。
その他の回答 (2)
- o_w_nakazaki
- ベストアンサー率43% (20/46)
マクロを使用しても良いということですので、 質問の内容に基づき、以下にサンプルを転載します。 必要な部分を抜き出して使用してください。 Sub Test() Dim BeginRow As Long '繰返処理の開始値 Dim LimitRow As Long '繰返処理の終了値 Dim CountRow As Long '作業用 BeginRow = 1 '開始値を指定 LimitRow = Sheets("Sheet1").Cells(65536, 1).End(xlUp).Row '終了値を求める Sheets("Sheet2").Select 'Sheet2を表示 Sheets("Sheet2").Cells.ClearContents 'Sheet2の入力を消去する Sheets("Sheet2").Cells(1, 1).Activate 'Sheet2の開始セルを選択 For CountRow = BeginRow To LimitRow '繰返処理開始 If Sheets("Sheet1").Cells(CountRow, 1).Value <> "" Then 'Sheet1の各行A列に入力があれば、 Cells(ActiveCell.Row, 1).Value = Sheets("Sheet1").Cells(CountRow, 1) Cells(ActiveCell.Row, 2).Value = Sheets("Sheet1").Cells(CountRow, 2) Cells(ActiveCell.Row, 3).Value = Sheets("Sheet1").Cells(CountRow, 3) Cells(ActiveCell.Row, 4).Value = Sheets("Sheet1").Cells(CountRow, 4) Cells(ActiveCell.Row + 1, 1).Activate End If Next Sheets("Sheet2").Cells(1, 1).Activate ActiveWindow.SelectedSheets.PrintPreview 'プレビュー 'ActiveWindow.SelectedSheets.PrintOut 'プレビュー End Sub ソースに不具合とございましたら申し訳ございません。
お礼
ありがとうございました。 「LimitRow = Sheets("Sheet1").Cells(65536, 1).End(xlUp).Row '終了値を求める」というのが、すごく便利でした。
- taknt
- ベストアンサー率19% (1556/7783)
Excelで 選択範囲のみ印刷するには、 まず、印刷したい範囲を選択して、それから ファイル→印刷範囲→印刷範囲の設定 で 印刷したらいいと思います。 タックシートがどうのこうのというのは、ちょっとわかりませんが・・・。
補足
早速ありがとうございました。説明が足りずすみませんでした。 タックシールは、よく宛名ラベル(宛名シール)に使われている長方形のシールのことです。 エクセルでボタンを押せば自動的に選択したデータの印刷を行うプログラムを組みたいのです。(マクロって言うんでしょうか・・・?) 選択したデータのみの宛名ラベルを作りたいのです。シート1で選択したデータを シート2にとりこみ(移して?)シート2を印刷したいのです。例えば、1~50 までの顧客番号があって、1・3・6~10・18・27・29~31の12件の 宛名ラベルを作りたいときに、1シートの10件分印刷が終わったら、2シートめを2件分印刷して終了としたいのです。
お礼
この二週間、マニュアル本とヘルプを使い、一生懸命ひもといて みました。うっすらとですが見えかけてきました。 もちろんまだまだ道のりはと~お~いですが・・・ お陰様で無事思い通りのプログラムが 組めました。ありがとうございました。