プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=65628
    • good
    • 0
この回答へのお礼

早速ご回答いただきありがとうございます。
おかげさまで3列づつ印刷することができました。
今までマクロを使うようなデータ処理をすることがなかったので、これから勉強しようと思っています。
どうもありがとうございました。

お礼日時:2001/12/03 02:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!