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

鉴水鱼技能说 2024-09-24 17:29:07

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宏代码文本(可复制):

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知识与操作技巧。

0 阅读:14