OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

エクセルデータの印刷方法について

  • 困ってます
  • 質問No.178530
  • 閲覧数123
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 46% (34/73)

エクセルのデータがA・B列のみに入力されており、このデータをA4縦の用紙にプリントアウトしたいのです。列幅がそんなに広くないので通常の設定だと用紙の左端の部分にしか印刷されないようになってしまい、右側は余白となってしまいます。1枚の用紙に3列(3段組?)プリントしたいのですが、どこで設定すればいいのでしょうか?カット&ペーストでやろうとすればできるのですが、行数が多いものですからこんな方法では大変です。基本的なことで申し訳ないのですが、よろしくお願いいたします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 68% (791/1163)

以前、同様の質問に回答したことがあります。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
お礼コメント
golman

お礼率 46% (34/73)

早速ご回答いただきありがとうございます。
おかげさまで3列づつ印刷することができました。
今までマクロを使うようなデータ処理をすることがなかったので、これから勉強しようと思っています。
どうもありがとうございました。
投稿日時 - 2001-12-03 02:37:33
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ