使用VBA宏实现Excel工作表的行列转换

使用VBA宏实现Excel工作表的行列转换

文章图片

使用VBA宏实现Excel工作表的行列转换

文章图片

Excel工作表中的行列转换是日常操作比较多的一项工作 , 对于高版本的Excel或WPS Office可以使用Tocol函数轻松解决 。 如果手头没有这些高版本的EXCEL , 我们仍然可以使用内置的VBA宏来解决 , 也非常的方便 。 假设有如下图所示的Excel工作表(共19列) , 人员信息横向排列 , 下面我们使用VBA宏将数据转换成单列纵向排列 。

VBA宏的基本思路是:(1)首先获得数据的总行数lastRow与列数lastColumn;(2)插入一个新的工作表 , 命名为“转换后的表\";(3)通过循环 , 依次将原工作表中每一列中lastRow行单元格复制到剪贴板 , 然后再将剪贴板中的数据粘贴到目标工作表的第1列(A列) 。
按【Alt+F11】组合键进入到VBA宏代码编辑窗口 , 然后单击【插入\\模块】菜单项 , 进入到通用模块编写窗口 , 然后输入如下图所示的VBA宏代码:

根据上述VBA宏的编制思路 , 编写了名为myTocol的宏 。 VBA宏首先获取数据行数和列数 , 使用End方法配合xlUp和xlToLeft查找最后一行和最后一列 。 这里没有使用UsedRange属性来获取行数与列数 , 因为如果工作表中有大量空白区域 , 那么使用UsedRange可能会很慢 。 因此 , 上面的方法更为精确 , 因为它只查找实际包含数据的行和列 。 宏代码编写完成后 , 返回到工作表窗口 , 按【Alt+F8】组合键调出【宏】对话框窗口 , 在窗口中选择myTocol宏 , 然后单击【执行】按钮 , 即可自动执行上述宏代码 , 转换后的数据表如下图示:

可以看到:原来横向排列的人员信息已转换成了1列纵向排列了 。 VBA宏代码短小、高效 。
【使用VBA宏实现Excel工作表的行列转换】
下面给出VBA宏代码文本(可复制):
Sub myTocol()Dim src_ws As Worksheet dest_ws As WorksheetDim lastRow As Long lastColumn As Long k As IntegerSet src_ws = ActiveSheet'数据行数lastRow = src_ws.Cells(src_ws.Rows.Count \"A\").End(xlUp).Row'数据列数lastColumn = src_ws.Cells(1 src_ws.Columns.Count).End(xlToLeft).Column'添加新工作表ThisWorkbook.Worksheets.Add after:=src_wsSet dest_ws = ActiveSheetdest_ws.Name = \"转换后的表\"With src_ws'将每列lastRow行单元格区域数据复制到目标工作表的A列For k = 1 To lastColumn.Range(.Cells(1 k) .Cells(lastRow k)).Copydest_ws.Range(\"A\" & (1 + (k - 1) * lastRow)).PasteSpecial Paste:=xlPasteAllNextEnd WithEnd Sub我是鉴水鱼老师 , 关注我 , 持续分享更多的Excel知识与操作技巧 。

    推荐阅读