天天看点

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

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

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

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

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

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

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

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

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

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

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

先设计如下的表格:

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

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

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

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

核心判断逻辑:

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

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

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

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

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

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

其中行序数【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)。

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

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

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

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

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

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

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

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

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

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

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

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

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