ワークシートに収集したデータが1つの列に非常にうまく収まる場合があります。たとえば、名前のリストがあり、それらはすべてワークシートの列Aに含まれている場合があります。ワークシートを印刷することを選択すると、かなりの数のページが消費される可能性があり、各ページの左側に名前が含まれ、右側に空白が含まれるため、すべてがほぼ空白になります。

このタイプのインスタンスでは、単一の列を複数の列であるかのように印刷すると便利です。そうすれば、印刷ジョブで使用する各印刷ページを増やし、全体のページを減らすことができます。残念ながら、Excelには、データを自動的に再フォーマットして印刷を改善するための固有のコマンドや印刷設定が含まれていません。ただし、回避策があります。

見落とされがちな回避策の1つは、単一列のリストを空白のWord文書にコピーすることです。プレーンテキストとしてそこに貼り付けると、各ページを複数の列にフォーマットして、実際に情報を印刷できます。

Wordを使用したくない場合は、最初の列から他の列に情報をカットアンドペーストして、必要な数の印刷列を指定できます。もちろん、これは新しいワークシートまたはワークブックで実行して、元のデータが乱されないようにする必要があります。たとえば、元のリストに200の名前がある場合、リストから一度に40の名前を切り取り、新しいワークシートの列AからEに貼り付けることができます。このワークシートを印刷すると、元の1列のワークシートを印刷するよりも少ないページで済みます。

もちろん、このカットアンドペーストを頻繁に行う必要がある場合、雑用はすぐに面倒になる可能性があります。この例では、まったく同じことを行うマクロを使用できます。元のリストをスライスしてさいの目に切り、新しいブックのいくつかの列に貼り付けます。

Sub SingleToMultiColumn()

Dim rng As Range     Dim iCols As Integer     Dim lRows As Long     Dim iCol As Integer     Dim lRow As Long     Dim lRowSource As Long     Dim x As Long     Dim wks As Worksheet

Set rng = Application.InputBox _       (prompt:="Select the range to convert", _       Type:=8)

iCols = InputBox("How many columns do you want?")

lRowSource = rng.Rows.Count     lRows = lRowSource / iCols     If lRows * iCols <> lRowSource Then lRows = lRows + 1

Set wks = Worksheets.Add     lRow = 1     x = 1     For iCol = 1 To iCols         Do While x <= lRows And lRow <= lRowSource             Cells(x, iCol) = rng.Cells(lRow, 1)

x = x + 1             lRow = lRow + 1         Loop         x = 1     Next End Sub

このマクロを実行すると、変換する範囲を選択するように求められ、次に、再フォーマットする列の数を指定するように求められます。現在のワークブックに新しいワークシートを作成し、元のワークシートから指定した数の列に情報をコピーします。

この問題を解決するための追加のリソースについては、次のWebサイトを参照してください。

http://www.ozgrid.com/VBA/MiscVBA.htm#Print http://www.mvps.org/dmcritchie/excel/snakecol.htm

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2219)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excelribbon-Printing_a_Single_Column_in_Multiple_Columns [単一の列を複数の列に印刷する]