![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_1_20240524074854770.jpeg) VIP学员的问题,左边是原始数据,实际有800多条记录,每2行复制,转置成右边的效果。也就是说,需要操作400多次才能实现全部转换,想想都是一件吃力不讨好的事情。![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_2_20240524074854848.png) 记住一句话,重复的事情,交给循环语句For Next去做,我们只需教她操作一遍即可。来,跟卢子一起看看。点开发工具,录制宏,选择区域B3:G4,复制,点I3,右键,转置,停止录制。![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_3_20240524074854958.gif) 点开发工具,VB,模块1,就可以看到刚刚录制的宏。![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_4_20240524074855442.png) 先在代码前后加上循环语句For Next,VBA的变量i可以从0开始。![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_5_20240524074855677.png) 这里是每2行,操作一遍,因此不需要进行判断。怎么表示区域向下0行、2行、4行等等?Excel里面的函数Offset可以向下,向右得到对应的值,其实VBA里面也支持这个函数。Range("B3:G4").Offset(2 * i, 0)就代表区域向下0行、2行、4行。![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_6_20240524074855786.png) 同理,第一次从单元格I3开始转置,第二次就得从I9开始,第三次就得从I15开始,也就是隔着6行,也就是Range("I3").Offset(6 * i, 0)。![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_7_20240524074855958.png)
![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_8_2024052407485683.gif) 当然,你也可以对代码进行再一步简化,前提是你有一定的VBA基础。如果不熟悉,这一步可以省略,别弄巧成拙。Sub 批量转置() For i = 0 To 2 Range("B3:G4").Offset(2 * i, 0).Copy Range("I3").Offset(6 * i, 0).PasteSpecial Transpose:=True Next End Sub
链接:https://pan.baidu.com/s/1fitYWMcuUIMVAVXxFCatww?pwd=n4my 提取码:n4my 陪你学Excel,一生够不够? 一次报名成为VIP会员,所有课程永久免费学,永久答疑,仅需 1500 元,待你加入。报名后加卢子微信chenxilu2019,发送报名截图邀请进群。![](http://image109.360doc.com/DownloadImg/2024/05/2407/284005651_10_20240524074856442.png)
|