甲純們在工作中,可能會經常遇到要把多列資料,以追加的形式,湊成一列的情況。

現如今20後都跑出來了,難道還要用拷貝粘貼的原始方法?!
純老師對此研發了操作簡單、适用性好的小程式,供甲純們參考使用。
本程式主要利用到的是INDIRECT函數,可以把文本變成位址進行引用。
位址引用有2種表達形式:一種是A1形式(先列号後行号,列用字母表示),一種是R1C1形式(先行号後列号,都用數字表示)。為了友善引用的位址進行遞增和跳轉,使列号直接用數字表示不需要再轉換為字母,故本程式使用的是R1C1的形式。
應用公式=INDIRECT(“R”&x&”C”&y,0),第1參數是引用位址的文本“RxCy”,代表引用x行(Row)y列(Column)的單元格;第2參數為0,代表函數引用位址采用R1C1的形式。
解題的核心思路是通過自動改變行列的序數,來進行資料的映射追加。
先設計如下的表格:
其中行序數1和列序數5,是預先輸入的并可以修改的,代表從【R1C5】(即【E1】)單元格,開始進行資料追加。
将【資料追加】列的公式,填寫為:【A2】=INDIRECT("R"&B:B&"C"&C:C,0),該列資料變為由【行序數】和【列資料】,對應控制行号和列号的映射列。如下圖:
核心判斷邏輯:
本程式以單元格資料是否為空,作為判斷該列資料終止的條件。
最初,判斷【R1C5】(即【E1】)是否為空?不為空,則【R1C5】的資料有效并追加,然後遞增一行到【R2C5】(即【E2】),繼續判斷,以此類推。
以本表為例,當遞增到【R4C5】(即【E4】)時,【R4C5】資料為空,則該資料無效,【R4C5】需往右跳轉一列,同時行序數重置為1,即【R4C5】變為【R1C6】(即【F1】)。邏輯圖如下:
在【行序數】、【列序數】列中填寫公式,并按需複制填充。
其中行序數【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)。
引用位址【R1C5】(即【E1】),往下遞增一行變成【R2C5】(即【E2】),判斷【R2C5】的值是否為空(到達列最末行的下一行),空則列序數重置往右遞增一列變成C2+1,非空則列序數不變(等于上一次的列序數)。
為了讓小程式變得更美觀直爽,也讓甲純對追加資料在哪裡截止一目了然。可以在【資料追加】列進行空資料判斷,資料為空不顯示(顯示為空字元””)。
并增加一列判斷列,當【資料追加】列的資料為空時,顯示“【終止】”,提示追加資料到此終止。
注意:因為增加了一列,是以起始的列序數【D2】原來為5(即E列),現在應該+1(即F列開始),更改為6。
今後要使用時,隻需要将公式預先多複制一些,比如1000行或者更多,然後把要做追加的資料複制進來,追加後的資料就會自動生成了!程式示範如下:
還可以通過修改起始的行序數,自動去除标題行的影響。
上述就是多列資料追加為一列資料的小程式,該程式單獨使用應對大資料量的追加,隻需要稍作修改,就可以實作同時追加2列或者多列資料,或者把行、列對調,變成把多行資料追加為一行資料的小程式,甲純們有興趣的話,可以自行延伸擴充。
本程式是将單元格為空作為每一列資料終止的條件,可是如果确确實實存在列的中間有單元格就是為空,那怎麼辦?純老師下一期開講。