平淡

從圖1中可以看出,左半部分每個員工的數據結構是一致的,所以我們只要在右側的單元格中通過函數對原始數據進行引用就能完成轉換。步驟如下:
1將F列設為輔助列,定位到F2單元格并輸入公式“=OFFSET(A$2,INT((ROW(A1)-1) /4),MOD(ROW(A1)-1, 4))”,下拉填充到F49單元格(即直到最后一直出現“0,0,0,0”數據為止)。這樣就會從F2單元格開始以A 2單元格中的數據作為第一個填充數據,按照從左到右再向下的順序將表格左半部分中的內容依次引用到F列中(圖2)。
公式解釋:
這里先將A $ 2(對行的絕對引用)作為OFFSET函數引用的基準,接著使用INT函數向下取整的數值作為OF FS E T函數向下偏移的行數,比如在F3單元格中取整部分的公式為“INT((ROW(A 2)-1)/4)”,計算結果是“0”,即向下偏移0行(取第二行的值)。再使用MOD函數求得的余數作為OFFSET函數向右偏移的列數,同樣在F3單元格中求余數的結果為M O D(ROW(A1)-1,4)=1,這樣會向右偏移1列,即最終數值為“張三”。
2定位到H2單元格并輸入公式“=INDEX($F$2:$F$49,IF(MOD(ROW($F2)*12,12)=0,COLUMN(A$1)+ROW($A1)*12-12))”,向下和向右填充到H5和O5單元格,這樣F列中的數據就會轉換成每個員工信息為一行的格式(圖3)。
公式解釋:
這里先將$F$2:$F$49(對數據區域的絕對引用)作為INDEX函數引用的區域,接著使用IF函數引用的數據作為引用的單元格,填充公式后即可實現從H列到O列依次引用F列中的數據。
接下來隱藏F列。通過這樣的轉換,我們再對員工信息進行排序和篩選就方便多了。

很多時候我們需要轉換的表格數據結構并不一致,比如下圖的左側是某班組的原始加班數據,現在需要轉換成右側的按照“帶班班長”順序進行排列的格式(圖4)。由于每個班組的加班人數不同,使用上述的方法無法完成轉換。
這時我們可以先為每個帶班班長添加標記,然后在Word中通過對這個標記進行分段排列的方法來完成轉換。步驟如下:
1先在Excel中插入一個A列作為標記列,定位到A2單元格并輸入公式“=IF(C2="帶班班長","a","b")”(表示使用IF函數對C列中的內容進行判斷,如果單元格值為“帶班班長”就標記為“a”,否則標記為“b”),下拉填充到A19單元格。
2在F2單元格中輸入公式“= OFFSET(A$2,INT((ROW(B1)-1) /4),MOD(ROW(B1)-1,4))”,下拉填充到F73單元格;在H2單元格中輸入公式“=INDEX($F$2:$F$73,IF(MOD(ROW($F2)*12,12)=0,COLUMN(A$1)+ROW($A1)*12-12))”,向右填充到CA2單元格。這樣原始數據就會全部填充到H2:CA2區域中了(圖5)。
3復制H2:CA 2區域,將數據以文本的方式粘貼到Word 2019的新建文檔中。接著在Word中按下“Ctrl+H”快捷鍵打開“查找和替換”窗口,在“查找內容”處輸入“a”、“替換為”處輸入“^p”,然后點擊“全部替換”按鈕(圖6)。
4再次打開“查找和替換”窗口,在“查找內容”處輸入“b ”(字母后有一個制表符,可在記事本的任意兩個字符之間按下Tab鍵,然后復制出現的空白字符并粘貼到此)、“替換為”處留空,點擊“全部替換”按鈕。完成替換后每個段落中的內容就會全部以“xx 帶班班長”開頭,每個班組為一個獨立的段落進行顯示了(圖7)。
5復制整理后的所有數據,再將其粘貼到Excel文檔中,即可實現如圖所示的效果(圖8)。