办理的办法有很多,我们本日就聊一聊3个比较常用的相比拟较大略的解法。
这里有一张虚拟表,A列是公司名称,C列是年份。
我们先看公式解法:
一、 公式法
1、 用TOROW函数把年份转为行,在F2单元格中输入=TOROW(C2:C4);
2、 连接公司名称列与转置后的年份行,在TOROW函数的前面选择A2:A6区域 ,再输入&,就天生了一个公司与年份的矩阵表;
3、 然后,在表面加上TOCOL函数,将矩阵表转为列;
4、 接下来便是拆分公司名称和年份,可以利用快捷键,也可以利用TEXTSPLIT函数。
本日,就说一下快捷键的方法。
在G2单元格输入“A公司”,在H2单元格输入“2020”;然后,选中G3单元格,同时按下快捷键CTRL+E,利用智能添补功能拆分出公司名,在H3单元格进行同样的操作。
5、删除F列,就搞定啦。
TextSplit函数,之前有一期视频专门讲过这个强大的拆分函数,有兴趣的朋友可以去翻翻看看,一定会对你的事情有帮助,这里就不再重复了。如果要利用TExtSplit函数拆分,在连接公司名与年份时,最好用一个字符做为连接符,比如“-”,再按这个字符拆分会比较方便。
excel 文本拆分只会分列可弗成,最牛新函数TEXTSPLIT,谁用谁知道
完全操作动画:
接下来看Power Query解法:
二、 Power Query法
1、 选中“年份”区域,点击“数据”,点击“来自表格/区域”,选择“表包含标题”,加载到PQ中;
2、 给年份添加一个自定义列,点击“添加列”,点击“自定义列”;新列名修正为“赞助列”,自定义公式的=后输入“1”,点击“确定“;
3、 点击“主页”,点击“关闭并上载”,选择“关闭并上载至”,选择“仅创建连接”;
4、 同样,选择“公司名”区域,加载到PQ中,然后给公司名添加一个自定义列,新列名也修正为“赞助列”,公式值也是“1”。
5、 然后,点击“主页”,点击“合并查询”,选择“合并查询”,选择“年份”,同时选择“公司名”的赞助列和“年份“的赞助列,点击”确定“;
6、 点击新列的右侧,展开列,选择“年份“,取消”利用原始列名作为前缀“的勾选,点击”确定“;
7、 删除“赞助列“,点击”主页“,点击”关闭并上载“,选择”关闭并上载“,选择”表“,数据的放置位置选择”现有事情表“,并选择E1单元格,点击”确定“。
完全操作动画:
三、 VBA法:
1、 打开Visual Basic,写一个SUB过程,过程名称自拟,这里就写上“笛卡尔积“;
2、 先定义2个数组arr和brr,分别用来存储公司名和年份,并把公司名和年份区域赋值给2个数组;
3、 再定义1个二维数组crr,用来存储笛卡尔积的结果。大略一些,1维根据实际情形给一个足够大的值,这里给个1 to 200;末了的结果是2列,二维给个1 to 2;
4、 再定义3个变量,i用来遍历arr数组,j用来遍历brr数组,k用来crr数组的一维下标;
5、 先遍历arr数组,再遍历brr数组,用k来计数;
6、 crr数组的k行1列,用来存储遍历出来的公司名;crr数组的k行2列,用来存储遍历出来的年份;
7、 遍历完成后,在E1:F1单元格,利用array自定义数组,写入“公司 “和”年份“;
8、 选中E2单元格,用Resize进行扩展,扩展K行2列,并把crr结果数组写入到扩展后的区域。
完全代码:
Sub 笛卡尔积() Dim arr, brr Dim crr(1 To 200, 1 To 2) arr = Range("A2:A6") brr = Range("C2:c4") Dim i, j, k For i = 1 To UBound(arr) For j = 1 To UBound(brr) k = k + 1 crr(k, 1) = arr(i, 1) crr(k, 2) = brr(j, 1) Next j Next i Range("E1:F1") = Array("公司", "年份") Range("E2").Resize(k, 2) = crrEnd Sub
完全操作动画: