- ベストアンサー
エクセルデータの印刷方法について
エクセルのデータがA・B列のみに入力されており、このデータをA4縦の用紙にプリントアウトしたいのです。列幅がそんなに広くないので通常の設定だと用紙の左端の部分にしか印刷されないようになってしまい、右側は余白となってしまいます。1枚の用紙に3列(3段組?)プリントしたいのですが、どこで設定すればいいのでしょうか?カット&ペーストでやろうとすればできるのですが、行数が多いものですからこんな方法では大変です。基本的なことで申し訳ないのですが、よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
以前、同様の質問に回答したことがあります。Excelでは面倒かもしれません。 『エクセルで縦長のデータを紙の無駄なく印刷』 http://www.okweb.ne.jp/kotaeru.php3?q=65628 今回は視点を変えて、手作業で行われているだろう『カット&ペースト』をマクロにしてみました。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入し、そこに下記コードを貼り付けます。 質問にあるA、B列が3個並んだカタチになります。 編集したいシートを選択してマクロを実行します。(ツール→マクロ→マクロ→下記を選択→実行) 編集したいシートのコピーを作り、実行してみてください。1ページの行数はpageModeで指定してください。 なお、1行目は表題、2行目からデータがあるとしています。2行目以降を印刷範囲の設定を行い、1行目を行タイトルに設定します。この辺りはアレンジして下さい。 『最初のデータの位置』を変更すれば、A列以外からの処理、複数タイトル行に対応できます。 Public Sub makePrintForm() '2列を3組の2列に編集しなおすマクロ Dim syoriKubun As Integer '処理区分 Dim cutArea As Range '移動する元のセル範囲 Dim topCell As Range '移動する元のセル範囲の左上先頭セル Dim topCellAddress As String '移動する元のセル範囲の左上先頭セル番地 Dim cutRows As Long '移動する行数 Const pageMode = 60 '1ページの行数 *** これを指定します *** Application.ScreenUpdating = False '表題をコピー Set topCell = ActiveSheet.Range("A2") '*** 最初のデータの位置を指定します *** With topCell .Offset(-1, 3) = .Offset(-1, 0): .Offset(-1, 4) = .Offset(-1, 1) .Offset(-1, 6) = .Offset(-1, 0): .Offset(-1, 7) = .Offset(-1, 1) End With 'データを分割 Set topCell = ActiveSheet.Range("A2").Offset(pageMode, 0) If topCell.Offset(1, 0) = "" Then cutRows = 1 'データ数が1ページの行数+1の時 ElseIf topCell.End(xlDown).Row = ActiveSheet.Rows.Count Then Exit Sub 'データ数が1ページの行数までの場合は終了 Else cutRows = topCell.End(xlDown).Row - pageMode - 1 End If 'データがあるだけ繰り返す While cutRows > 0 Set cutArea = topCell.Resize(cutRows, 2) Select Case syoriKubun 'データを移す場所の計算 Case 0, 1: Set topCell = topCell.Offset(-pageMode, 3) Case 2: Set topCell = topCell.Offset(0, -6) End Select 'CutするのでtopCellの番地を覚えておく topCellAddress = topCell.Address 'データを移動 cutArea.Select: Selection.Cut 'カット topCell.Select: ActiveSheet.Paste 'ペースト '次の処理 syoriKubun = syoriKubun + 1: If syoriKubun > 2 Then syoriKubun = 0 Set topCell = Range(topCellAddress).Offset(pageMode, 0) cutRows = cutRows - pageMode Wend Application.ScreenUpdating = True Range("A1").Select End Sub
お礼
早速ご回答いただきありがとうございます。 おかげさまで3列づつ印刷することができました。 今までマクロを使うようなデータ処理をすることがなかったので、これから勉強しようと思っています。 どうもありがとうございました。