有时,您在工作表中收集的数据非常适合放在一列中。例如,您可能有一个名称列表,它们都包含在工作表的A列中。当您选择打印工作表时,它会占用相当多的页面,所有页面几乎都空白,因为每页的左侧都包含一个名称,而右侧则包含空白。

在这种类型的实例中,最好将单列显示为多列。这样一来,您可以在每个打印页面中使用更多的页面,而在打印作业中使用更少的整体页面。不幸的是,Excel不包含任何固有命令或打印设置,使您可以自动重新设置数据格式,以便更好地打印。但是,有解决方法。

一个经常被忽略的解决方法是将单列列表复制到空白的Word文档中。如果将其粘贴为纯文本格式,则可以将每一页格式化为多列,并实际打印信息。

如果您不想使用Word,则可以将信息从第一列剪切并粘贴到其他列中,以提供所需的打印列数。当然,这应该在新的工作表或工作簿中完成,这样原始数据就不会受到干扰。例如,如果原始列表中有200个名称,则可以一次从列表中剪切40个名称,然后将它们粘贴到新工作表的A到E列中。与打印原始单列工作表相比,打印此工作表所需的页面更少。

当然,如果您必须经常执行剪切和粘贴操作,那么杂务会很快变得很烦人。在这种情况下,您可以使用具有完全相同功能的宏:它将原始列表切成薄片并将其切成小块,然后将其粘贴到新工作簿上的许多列中。

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

当您运行此宏时,要求您选择要转换的范围,然后要求您指定要将其重新格式化为的列数。它在当前工作簿中创建一个新的工作表,并将信息从原始工作表复制到您指定的尽可能多的列中。

有关解决此问题的其他资源,请访问以下网站:

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

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2219)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: