在excel里處理數(shù)據(jù)的VBA代碼
有時候在處理excel的數(shù)據(jù)時,其實有很多自己的想法在excel上無法得到實現(xiàn),這就需要用到VBA編程了,從而實現(xiàn)按自己需求進(jìn)行定制化開發(fā)。
VBA(Visual Basic for Applications)是一種編程語言,它是基于 Microsoft Visual Basic 開發(fā)的,可以在 Microsoft Office 套件中的許多應(yīng)用程序中使用,包括
Microsoft Excel
Microsoft Word
Microsoft PowerPoint
Microsoft Access
Microsoft Outlook
Microsoft Project
Microsoft Visio
使用 VBA,可以執(zhí)行以下操作:
編寫自定義宏:VBA 可以在 Microsoft Office 應(yīng)用程序中創(chuàng)建自定義宏,以自動執(zhí)行一系列任務(wù)。
自動化重復(fù)性任務(wù):使用 VBA,可以編寫腳本來自動執(zhí)行繁瑣的、重復(fù)性的任務(wù),從而提高工作效率。
增強(qiáng)功能:VBA 可以擴(kuò)展 Microsoft Office 應(yīng)用程序的功能,使其能夠執(zhí)行更多操作。
自定義用戶界面:使用 VBA,可以創(chuàng)建自定義對話框和用戶界面,以便更好地與用戶交互。
VBA 是一種功能強(qiáng)大的編程語言,但需要一定的編程經(jīng)驗和技能才能充分利用其功能。
我遇到的問題是需要對原word內(nèi)的數(shù)據(jù)進(jìn)行清洗,然后遍歷所有數(shù)據(jù)從而實現(xiàn)提取所需要數(shù)據(jù)的功能。
這里舉例一個表格,如下圖所示:

需要提取這個表格內(nèi)的需要單元格,例如:”抗震設(shè)防類別”, “結(jié)構(gòu)體系”, “建筑功能”等。
當(dāng)在Excel中寫VBA代碼時,可以通過以下步驟在一個區(qū)域內(nèi)查找多個單元格,并將匹配的單元格及其之后的數(shù)據(jù)輸出到電腦桌面的Excel文件中:
打開Excel文件并按下”Alt + F11″,進(jìn)入Visual Basic for Applications (VBA)編輯器。
在VBA編輯器中,點(diǎn)擊”插入”,然后選擇”模塊”,在新的模塊中編寫以下VBA代碼:
Sub 導(dǎo)出匹配單元格及數(shù)據(jù)到Excel()
Dim sourceRange As Range
Dim searchValues() As Variant
Dim foundRows As Collection
Dim i As Long, j As Long
Dim desktopPath As String
' 填入要查找的單元格的區(qū)域
Set sourceRange = Range("A2:D9")
' 填入要查找的單元格值,可以添加更多值
searchValues = Array("抗震設(shè)防類別", "結(jié)構(gòu)體系", "建筑功能")
' 初始化集合以保存查找到的行
Set foundRows = New Collection
' 遍歷源區(qū)域查找匹配的單元格
For i = 1 To sourceRange.Rows.Count
For j = 1 To sourceRange.Columns.Count
If IsInArray(sourceRange.Cells(i, j).Value, searchValues) Then
' 將匹配的單元格及其之后的數(shù)據(jù)添加到集合中
foundRows.Add sourceRange.Cells(i, j).Resize(1, sourceRange.Columns.Count - j + 1)
Exit For ' 停止查找當(dāng)前行
End If
Next j
Next i
' 初始化新的Excel工作簿
Dim excelApp As Object
Dim excelWorkbook As Object
Dim excelWorksheet As Object
Set excelApp = CreateObject("Excel.Application")
excelApp.Visible = False ' 設(shè)置為True可見,設(shè)置為False不可見
Set excelWorkbook = excelApp.Workbooks.Add
Set excelWorksheet = excelWorkbook.Sheets(1)
' 輸出匹配的單元格及其之后的數(shù)據(jù)到新的Excel工作簿
Dim rowIndex As Long, colIndex As Long
rowIndex = 1
For Each Rng In foundRows
colIndex = 1
For Each cell In Rng.Cells
excelWorksheet.Cells(rowIndex, colIndex).Value = cell.Value
colIndex = colIndex + 1
Next cell
rowIndex = rowIndex + 1
Next Rng
' 獲取電腦桌面路徑
desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
' 保存Excel文件到桌面
excelWorkbook.SaveAs desktopPath & "\匹配單元格及數(shù)據(jù).xlsx"
' 釋放Excel對象
excelWorkbook.Close SaveChanges:=False
Set excelWorkbook = Nothing
excelApp.Quit
Set excelApp = Nothing
MsgBox "匹配單元格及數(shù)據(jù)已導(dǎo)出到桌面的Excel文件!"
End Sub
Function IsInArray(valToBeFound As Variant, arr As Variant) As Boolean
Dim element As Variant
On Error Resume Next
IsInArray = (UBound(Filter(arr, valToBeFound)) > -1)
On Error GoTo 0
End Function
輸入代碼中的
Array(
)內(nèi)的實際值。關(guān)閉VBA編輯器。
在Excel中,運(yùn)行宏:按下”Alt + F8″,選擇”導(dǎo)出匹配單元格及數(shù)據(jù)到Excel”并點(diǎn)擊”運(yùn)行”。
這樣,VBA代碼將在指定的區(qū)域內(nèi)查找多個單元格并將匹配的單元格及其之后的數(shù)據(jù)輸出到新創(chuàng)建的Excel文件中,該Excel文件將保存在電腦桌面上,并以”匹配單元格及數(shù)據(jù).xlsx”為文件名。
這里我做個截圖,以方便查看(注意:VBA在WPS里同樣可以使用,快捷鍵為alt+F11操作和界面通office一樣):

這時候直接關(guān)閉這個窗口即可,在表格內(nèi)按下Alt+F8執(zhí)行這一條宏(看到宏這個字是不是想到了魔獸世界里的按鍵宏,這突然勾起我wow獵人一鍵宏的回憶了ヾ(≧▽≦*)o),如下圖:

執(zhí)行完畢后會有窗口提示:

這樣就直接輸出到自己電腦桌面上一個xls文件,打開看一下:

靈活運(yùn)用就能夠使得處理大量數(shù)據(jù)并輸出到另外一個表格內(nèi)了,實現(xiàn)了自動化辦公。