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

エクセルで一列に並んだ数字(4000行あります)を印刷範囲内で折り返しをしたいのですが簡単な方法はないでしょうか?

(例)
    A  B  C  D         A  B   C   D
1  01         →   1 01 05 09  

2  02             2 02 06 10

3  03             3 03 07 11

4  04             4 04 08 12

~                 ~ 

4000 4000

A 回答 (2件)

元のデータがA1以下にあるとします。



●決まった行数(例えば4行)毎に折り返す場合

B1セルを、
 ==IF(ROW()>4,"",OFFSET($A$1,(COLUMN()-1)*4+ROW()-1,))
として4行目までフィル⇒B1:B4を右方にフィル⇒コピー⇒値貼り付け⇒不要な行を削除

●【[印刷範囲]として設定されたセル範囲の行数】で折り返す場合

B1セルを、
 =IF(ROW()>ROWS(Print_Area),"",OFFSET($A$1,(COLUMN()-1)*ROWS(Print_Area)+ROW()-1,))
として下方・右方にフィル⇒コピー⇒値貼り付け⇒不要な行を削除

-------------------------------------------------------

もし、「1ページ目の行数を自動で判定して…」といった話であれば、
VBA(マクロ)の領域になります。
    • good
    • 0
この回答へのお礼

出来ました!ありがとうございます。

お礼日時:2008/02/17 13:26

>印刷範囲内で折り返しをしたいのですが


マクロでやってみました。最初に1頁の行数を求めて、その行数で切って3列に並べ替えます。(元のページをコピーしたシートに並べ替えた結果を出します)

以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。

Sub Macro1()
Dim pLines, ptr As Integer
Dim idx As Long
  Application.ScreenUpdating = False
  ActiveSheet.Copy Before:=ActiveSheet
  Do
    pLines = pLines + 1
  Loop Until Rows(pLines).PageBreak <> xlNone
  pLines = pLines - 1
  ptr = 1
  idx = 1
  Do While idx <= Range("A65536").End(xlUp).Row
    Cells(ptr, "A").Resize(pLines, 1).Value = Cells(idx, "A").Resize(pLines, 1).Value
    Cells(ptr, "B").Resize(pLines, 1).Value = Cells(idx + pLines, "A").Resize(pLines, 1).Value
    Cells(ptr, "C").Resize(pLines, 1).Value = Cells(idx + pLines * 2, "A").Resize(pLines, 1).Value
    ptr = ptr + pLines
    idx = idx + pLines * 3
  Loop
  Range(Cells(ptr, "A"), Range("A65536").End(xlUp)).ClearContents
  Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

出来ました!ありがとうございます。

お礼日時:2008/02/17 13:26

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