Excel 根據條件合並幾行


又是使用excel的一天,因為我是編程嬰兒,所以能用excel解決的問題我盡量還是希望使用excel解決。男朋友總是有莫名其妙的需求,逼我成長為excel中學生。

今天他去學校拷貝數據,不知道是因為數據本身爛,還是他腦子出問題,數據保存為txt文件后,亂做一團,我根本看不出來這個表的結構,還以為是天女散花。他說他要再進去重新拷的時候,警察不讓進了。他就讓我整理。

先看看這個表的表頭:

 

 可怕嗎?我崩潰了,這什么?而且數據還很大,幾百M。直接打txt還打不開,這個界面,還是我導入python之后才得到的。

看到這樣的數據我絕望了,我說我弄不了。男朋友說,給我200,我說給200也不干。他激我,說給你兩萬,我當時正在氣頭上,而且前面經過一番嘗試,覺得真的做不了,就說給兩萬也做不了,氣呼呼地說誰缺你這兩萬。

我一干活真的容易生氣。尤其看到這種稀爛的數據,表頭就亂死了,我都不知道有多少個變量。就算忽略表頭,后面的數據也對不齊,無論用什么分隔符,python都分割不成稍微結構化一點的數據,只能是一列。

后來男朋友說他把數據導入acces里,就變成表了,只是比較亂,可需要整理。 

 

他說很簡單,你就看第一列有沒有日期,有日期的就是一條記錄,就把一坨一坨合並到一個格子里就好了,去做吧。

我煩躁死了,我印象中,總覺得我做過類似的工作,但是也不記得怎么做的,好像沒有這么麻煩。錯誤分行的數據怎么弄,我一下還真沒想到辦法,但是從直覺上不想用python解決這個問題。即使這個數據有18萬行,我還是硬着頭皮用excel做吧。很卡。

合並兩列的數據還是挺簡單的,就直接:A1&A2就好了。空格就是" "。

1.去除全部記錄都是空值的空行

 先用一個函數 :=counta() 計算這一行有幾個值,這樣值為0的,就是純空行。或者isblank()可以判斷是否是空值。

然后篩選,把值為0的篩選出來,然后選中,刪掉。這個地方其實應該用定位(ctrl+G),定位可見行,然后刪除。但是由於數據太大了,一定位就死機,而且會把第一行也刪掉,所以我只能手動選中。

這里學到一個小技巧,點住單元格,然后ctrl+shift+↓,可以快速選中這里往下所有的數據,其他方向同理。偶爾有幾次會失靈,跑到整個excel的邊界,不知道為什么,還沒找到規律。

空白行刪掉之后,

十八萬條數據,變成十萬條,操作起來順暢很多。數據變成這樣:

 

 

 

 

接下來的任務是把一坨一坨分行的數據,合並成一格一格。比如C3單元格的里,應該填AFF RWS MRK,這三行其實屬於一條記錄,是導入數據的時候識別錯了。、

 

2.怎樣把單元格里的值作為行號寫到公式里

C3單元格的值應該是合並C3:C5,我先添加了一列序號,然后通過公式:=IF(ISBLANK(B3),"",A3),和=IF(ISBLANK(B3),"",A3-1),把日期對應的行號和下一行日期之前的行號記下來。

這里其實不用加這一列數,用公式=ROW()就可以得到某個單元格的行號,=column()可以得到列號。

這兩列表示合並范圍的數記下來之后,先對齊,然后去空行,把日期去空行放在第一列。

 

 

 

 

我最后是用這個公式:=TEXTJOIN(" ",1,INDIRECT("C"&I3&":C"&J3)),得到我想要的數據的,后面幾列一樣的。

 

INDIRECT("C"&I3&":C"&J3)  這部分很重要,這樣寫就可以把兩列數,變成行號去引用了。這個部分的意思是表示:C3(3來自I3):C5(5來自J3)。

列名字母要用英文雙引號" "框起來,和選取的單元格的索引用“ & ” 連接,冒號也要寫到雙引號里面,這里面小符號太多,總容易寫錯,我對照着寫了好幾遍,總是出錯,都看不出哪兒錯,煩。

 

=TEXTJOIN(“分隔符”,跳過空值,范圍)這個公式是用來合並幾個單元格的內容的,比&和 =CONCATENATE()好的地方是,這個函數可以寫范圍,那兩個不行。

 

最后就得到了長這樣的數據:

 

3.今天用到的一些小功能

分列:選中一列,搜索excel里的分列功能,可以選分隔符或者固定寬度分。

countif(范圍,值):檢查一個值在不在一個范圍里

=IF(ISNUMBER(FIND("RDS",B2)),1,0):這個字符在不在某個單元格中,應該是FIND("RDS",B2)返回一個位置或false,ISNUMBER()來判斷,然后if。沒細研究,應該是。

還有什么不記得了,

 

 

現在寫起來其實步驟不多,而且也不難,但是剛開始做的時候我真的不知道怎么做。也許我的辦法是笨辦法,無論是excel還是python都有更簡單的辦法做,但是我水平就到這了。

用excel這么折騰的原因是,我實在懶得想怎么編程,其實我覺得應該好編,但是我不想去動那個腦子。做事情就是這樣,偷懶不用腦,就是要耗時間,而且費勁。寫幾個for,while,if,應該就解決了。

今天還做了不少手動重復性的工作,原因就是懶得動腦,不想想怎樣編程。

這里我要說一句金句:勤快就是懶,懶就是勤快。

我要是編程水平更高一些就好了,我就不會這么害怕編程,最后又能好好處理數據,還能增長編程技能。

 

累個半死,還一直在罵人。得到男朋友給的一些錢財,氣還順了一些。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM