如果将数据列表导入Excel,则在A列中包含大量数据是很平常的。实际上,在任何其他列中都没有任何内容并不稀奇。 (当然,这完全取决于您要导入的数据的性质。)作为在Excel中使用数据的一部分,您可能希望“重新组织”数据,以便将其拉到比A列更多的列中。

例如,假设您导入了数据,并且最终占据了列A的第1到212行。您真正想要的是数据占据列A到F的列,但是要保留数据需要很多行。因此,需要将A2移动到B1,从A3移动到C1,从A4移动到D1,从A5移动到E1,从A6移动到F1,然后从A7移动到A2,从A8移动到B2,等等。

要以这种方式重组数据,可以使用以下宏。

选择要重组的数据,然后运行宏。询问您要在重组数据中有几列,然后开始数据转移。

Sub CompressData()

Dim rSource As Range     Dim rTarget As Range     Dim iWriteRow As Integer     Dim iWriteCol As Integer     Dim iColCount As Integer     Dim iTargetCols As Integer     Dim J As Integer

iTargetCols = Val(InputBox("How many columns?"))

If iTargetCols > 1 Then         Set rSource = ActiveSheet.Range(ActiveWindow.Selection.Address)

If rSource.Columns.Count > 1 Then Exit Sub

iWriteRow = rSource.Row + (rSource.Cells.Count / iTargetCols)

iWriteCol = rSource.Column + iTargetCols - 1         Set rTarget = Range(Cells(rSource.Row, rSource.Column), _           Cells(iWriteRow, iWriteCol))



For J = 1 To rSource.Cells.Count             rTarget.Cells(J) = rSource.Cells(J)

If J > (rSource.Cells.Count / iTargetCols) Then _               rSource.Cells(J).Clear         Next J     End If End Sub

宏通过定义两个范围来传输信息:运行宏时选择的源范围和目标范围,目标范围由基于所需列数的计算大小定义。源范围由rSource变量对象表示,目标范围由rTarget表示。 For …​ Next循环用于实际传输值。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

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

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

链接:/ excelribbon-Reorganizing_Data [重组数据]。