问题描述
不少软件都带有一键导出为excel文件或者csv文件的功能,有时候导出的数据列数比较少,但是有很多行。为了方便查看或者节约打印的纸张,需要尽量将整列的长数据平均拆成短数据。如下图:
将1列100行的数据拆成5列20行。
思路
这个需求,其实比较简单就可以实现。
1、从起始行开始遍历,每隔20行就将遍历的内容复制(或者剪切)一遍。
2、将复制(或者剪切)的内容粘贴到选定的列,下一个20行的内容则复制在下一列。
核心代码如下:
Sub cfdl()
flag = 0 '用来标记是否到20行
hang = 2 '数据起始列
lie = 4 '数据起始列
For i = 2 To 101 '数据从2行到101行
Range("A" & i).Copy Cells(hang, lie)'复制单元格内容
hang = hang + 1
flag = flag + 1
If flag = 20 Then'如果数据是否遍历了20行,是则将数据粘贴到下一列
flag = 0
lie = lie + 2
hang = 2
End If
Next
效果演示
问题扩展
上面是单列数据的情况,如果是有多列,比如3列150行的数据,那么就要注意修改以下几个地方:
1、粘贴数据的位置,这里我设置从2行5列单元格开始
hang = 2 '数据起始列
lie = 5 '数据起始列
2、总共数据的行数,这里修改为150行
For i = 2 To 151 '数据从2行到151行,一共150行
3、原数据的列数,本例是有3列,那么rang()函数需要加上C列。
Range("A" & i,"C" & i).Copy Cells(hang, lie)
'3列数据就是Range("A" & i,"C" & i),4列就是Range("A" & i,"D" & i),以此类推
4、粘贴数据的列数
lie = lie + 3 '这里有3列数据要复制,5列就改为+5
效果演示
如果需要源文件的话,后台回复「平均拆分」即可。其他VBA实例,可以在公号里「精华整理」-「VBA实例」进行查看。
如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。
微信公众号:永恒君的百宝箱
个人博客:www.yhjbox.com