VBA與Python刪除excel單元格空格與非打印字符

Excel單元格空格的刪除是表哥表姐們?nèi)粘9ぷ髦薪?jīng)常遇到的問題,大多數(shù)人對(duì)這個(gè)問題的常規(guī)解決方法就是:
1、全選工作表,按ctrl+H鍵,彈出查找和替換工作框
2、在查找和替換工作框的“查找內(nèi)容”項(xiàng),輸入“ ”,在“替換為”項(xiàng),直接空著,什么都不用輸入


圖片.png

3、點(diǎn)擊“全部”替換項(xiàng),替換完成即可

一般情況下,以上三步即可完成工作表內(nèi)空格的刪除工作,但實(shí)際工作中,單元格內(nèi)存在的換行符,回車符這些無法打印字符是無法通過替換刪除的,如果這些字符沒有清理干凈,又會(huì)影響后續(xù)數(shù)據(jù)的處理和運(yùn)算,嚴(yán)重者,更影響數(shù)據(jù)的準(zhǔn)確與精度,所以在替換完之后,我們需要用left或right公式檢查一下單元格內(nèi)是否存在換行符或打印符;

4、對(duì)于不會(huì)vba的小伙伴來說,另一種方法是函數(shù)結(jié)合使用刪除空格與無法打印字符:
=CLEAN(SUBSTITUTE(C2," ","")),其中SUBSTITUTE(C2," ","")的作用是刪除單元格內(nèi)所有空格,CLEAN的作用是刪除單元格內(nèi)無法打印字符

5、對(duì)于多行多列的表格來說,要一列一列的輸入公式來進(jìn)行空格的清理,效率未免低下,為了提高效率,一次完成目標(biāo),可以使用VBA代碼一次完美解決這個(gè)問題,代碼如下:

Sub 刪除空格()
Dim arr, brr, crr, i, j
Application.ScreenUpdating = False  '關(guān)閉屏幕更新
tm = Timer
arr = Sheets(1).UsedRange.Value     '將第一個(gè)工作表的已用區(qū)域賦值給數(shù)組arr
ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))   '定義數(shù)組brr的行數(shù)、列數(shù)

For i = 1 To UBound(arr)            'i的值為數(shù)組arr的第一維最大下標(biāo)(即第一個(gè)工作表已用區(qū)域的行數(shù))
For j = 1 To UBound(arr, 2)         'j的值為數(shù)組arr的第二維最大下標(biāo)(即第一個(gè)工作表已用區(qū)域的列數(shù))

    a = Replace(arr(i, j), " ", "")    '替換arr(i,j)的所有空格
    brr(i, j) = Application.WorksheetFunction.Clean(a)    '用工作表函數(shù)clean處理a,將a的所有非打印字符刪除除
    
Next j
    
Next i
    

With Sheets(2):
     .UsedRange.Clear
     .[A1].Resize(UBound(brr), UBound(brr, 2)) = brr     '將數(shù)組brr輸入到sheet2的左上角為A1的單元格區(qū)域內(nèi)

End With

Application.ScreenUpdating = True    '開啟屏幕更新
MsgBox "工作完成!用時(shí)" & Timer - tm & "秒", 64, "提示"     '代碼運(yùn)行用時(shí)
End Sub

以上,即是vba實(shí)現(xiàn)刪除空格、非打印字符的vba代碼

5、在辦公現(xiàn)代化的今日,python的運(yùn)用越來越廣,那么,用python代碼應(yīng)該怎么處理這個(gè)問題呢?python代碼如下(需要用到的模塊為openpyxl,用pip方法即可安裝):

#_*_coding:utf-8_*_
from openpyxl import load_workbook


file = "五城網(wǎng)簽-200325.xlsx" #要處理的文件路徑
wb = load_workbook(file) #加載文件
ws = wb.active
for i in range(2, ws.max_row+1):
  for j in range(3, ws.max_column+1):
     old = str(ws.cell(i, j).value)
     if old is not None:

        ws.cell(i, j).value = old.strip().replace(' ', '').replace("\n", "")
        if str(ws.cell(i, j).value)[0:7] =="_x000D_" or str(ws.cell(i, j).value)[-6:len(str(ws.cell(i, j).value))] == "_x000D_":
          ws.cell(i, j).value = str(ws.cell(i, j).value)[7:len(str(ws.cell(i, j).value))-7]
        elif str(ws.cell(i, j).value)[-7:len(str(ws.cell(i, j).value))] == "_x000D_":
           ws.cell(i, j).value = str(ws.cell(i, j).value)[0:len(str(ws.cell(i, j).value)) - 7]
wb.save(file)
wb.close()
print("處理完成")

核心語句為:

ws.cell(i, j).value = old.strip().replace(' ', '').replace("\n", "")

主要作用是將單元格所有的空格,換行符替換為空,但是這一個(gè)語句的不足之處是無法將非打印字符刪除,一般情況下,這種非打印字符是回車、換行符,ASCII碼是10、13,讀者有興趣可以在單元格內(nèi)輸入=code(A1)這個(gè)公式測試一下非打印字符的ASCII碼,經(jīng)調(diào)試發(fā)現(xiàn),ASCII碼為10、13的字符在python里返回的字符形式為“x000D ”,所以替換掉空格之后,需要在后面加上兩句if判斷語句,將殘留的非打印字符繼續(xù)刪除:

if str(ws.cell(i, j).value)[0:7] =="_x000D_" or str(ws.cell(i, j).value)[-6:len(str(ws.cell(i, j).value))] == "_x000D_":
          ws.cell(i, j).value = str(ws.cell(i, j).value)[7:len(str(ws.cell(i, j).value))-7]
        elif str(ws.cell(i, j).value)[-7:len(str(ws.cell(i, j).value))] == "_x000D_":

           ws.cell(i, j).value = str(ws.cell(i, j).value)[0:len(str(ws.cell(i, j).value)) - 7]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,717評(píng)論 0 5
  • 1.1 VBA是什么 直到90年代早期,使應(yīng)用程序自動(dòng)化還是充滿挑戰(zhàn)性的領(lǐng)域.對(duì)每個(gè)需要自動(dòng)化的應(yīng)用程序,人們不得...
    浮浮塵塵閱讀 22,150評(píng)論 6 49
  • VBA訂制工具欄 http://club.excelhome.net/thread-1047254-1-1.htm...
    大海一滴寫字的地方閱讀 2,356評(píng)論 0 0
  • 自從2014年開通[完美Excel]微信公眾號(hào)以來,堅(jiān)持分享已經(jīng)學(xué)習(xí)到的Excel和VBA知識(shí)和心得,目前已分享文...
    完美Excel閱讀 8,457評(píng)論 6 69
  • 人好像越長大,就越容易被一些小事觸動(dòng)。 比如,酒醒的清晨,桌上剛好放著一碗暖胃的粥;比如,情緒崩潰的夜晚,手機(jī)里剛...
    輕塵_Ly閱讀 330評(píng)論 2 9

友情鏈接更多精彩內(nèi)容