sqlserver 如何把一列分为一行显示_EXCEL神乎其技 多列追加为一列

甲纯们在工作中,可能会经常遇到要把多列数据,以追加的形式,凑成一列的情况。

dc634389ab8ae04c0a67b787cd0d1d42.png

现如今20后都跑出来了,难道还要用拷贝粘贴的原始方法?!

351bb43298daa7703115110b8430f6eb.gif

纯老师对此研发了操作简单、适用性好的小程序,供甲纯们参考使用。

bef14cfee4305abe03321d87b51d1cc1.png

本程序主要利用到的是INDIRECT函数,可以把文本变成地址进行引用。

地址引用有2种表达形式:一种是A1形式(先列号后行号,列用字母表示),一种是R1C1形式(先行号后列号,都用数字表示)。为了方便引用的地址进行递增和跳转,使列号直接用数字表示不需要再转换为字母,故本程序使用的是R1C1的形式。

应用公式=INDIRECT(“R”&x&”C”&y,0),第1参数是引用地址的文本“RxCy”,代表引用x行(Row)y列(Column)的单元格;第2参数为0,代表函数引用地址采用R1C1的形式。

解题的核心思路是通过自动改变行列的序数,来进行数据的映射追加。

先设计如下的表格:

5accb60b22e505fed4caeb56722fda2c.png

其中行序数1和列序数5,是预先输入的并可以修改的,代表从【R1C5】(即【E1】)单元格,开始进行数据追加。


将【数据追加】列的公式,填写为:【A2】=INDIRECT("R"&B:B&"C"&C:C,0),该列数据变为由【行序数】和【列数据】,对应控制行号和列号的映射列。如下图:

a0a0f5be9f97e9374dcb4d55d6433df4.png

核心判断逻辑:

本程序以单元格数据是否为空,作为判断该列数据终止的条件。

最初,判断【R1C5】(即【E1】)是否为空?不为空,则【R1C5】的数据有效并追加,然后递增一行到【R2C5】(即【E2】),继续判断,以此类推。

以本表为例,当递增到【R4C5】(即【E4】)时,【R4C5】数据为空,则该数据无效,【R4C5】需往右跳转一列,同时行序数重置为1,即【R4C5】变为【R1C6】(即【F1】)。逻辑图如下:

534b66ccae467c327ff397a1b3c4ff79.png

在【行序数】、【列序数】列中填写公式,并按需复制填充。

69fb9e3f84706266b3fe54a1805ad65d.png

其中行序数【B3】=IF(INDIRECT("R"&(B2+1)&"C"&C2,0)="",$B$2,B2+1)。

根据上面的逻辑解析,意思是原来行序数【B2】和列序数【C2】,组成引用地址【R1C5】(即【E1】),往下递增一行变成【R2C5】(即【E2】),判断【R2C5】的值是否为空(到达列最末行的下一行),空则行序数重置为初始值【$B$2】(注意要绝对引用,确保初始行是一致的);非空则列序数往下递增+1,变为B2+1。


同时,列序数的公式为【C3】:=IF(INDIRECT("R"&(B2+1)&"C"&C2,0)="",C2+1,C2)。

8f71f6b3cee9a95991aa14fabea2bcea.png

引用地址【R1C5】(即【E1】),往下递增一行变成【R2C5】(即【E2】),判断【R2C5】的值是否为空(到达列最末行的下一行),空则列序数重置往右递增一列变成C2+1,非空则列序数不变(等于上一次的列序数)。


为了让小程序变得更美观直爽,也让甲纯对追加数据在哪里截止一目了然。可以在【数据追加】列进行空数据判断,数据为空不显示(显示为空字符””)。

7d0e4824db200bad447cadcc05d3c283.png

并增加一列判断列,当【数据追加】列的数据为空时,显示“【终止】”,提示追加数据到此终止。

注意:因为增加了一列,所以起始的列序数【D2】原来为5(即E列),现在应该+1(即F列开始),更改为6。


今后要使用时,只需要将公式预先多复制一些,比如1000行或者更多,然后把要做追加的数据复制进来,追加后的数据就会自动生成了!程序演示如下:

1387edaa953f67af567fb4bcafc12043.gif

还可以通过修改起始的行序数,自动去除标题行的影响。

9c65b5322a56c0d683559b031d66b800.gif

上述就是多列数据追加为一列数据的小程序,该程序单独使用应对大数据量的追加,只需要稍作修改,就可以实现同时追加2列或者多列数据,或者把行、列对调,变成把多行数据追加为一行数据的小程序,甲纯们有兴趣的话,可以自行延伸扩展。

本程序是将单元格为空作为每一列数据终止的条件,可是如果确确实实存在列的中间有单元格就是为空,那怎么办?纯老师下一期开讲。

378aa3a7ed41f94b0d105e34fa961482.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值