![](https://img.51dongshi.com/20250105/wz/18535412552.jpg)
Sub test()Dim arr() As StringDim oRegExp As ObjectDim oMatches As ObjectDim iNum As Integer'定義正則對(duì)象Set oRegExp = CreateObject("vbscript.regexp")Dim iRow As IntegeriRow = Sheets(1).UsedRange.Rows.CountFor ind = 1 To iRowarr = Split(Sheets(1).Cells(ind, 1).Value, "*")iNum = UBound(arr) - LBound(arr)For i = 0 To iNumWith oRegExp.Global = True.IgnoreCase = True.Pattern = "[0-9]+"Set oMatches = .Execute(arr(i))End WithSheets(1).Cells(ind, i + 2).Value = oMatches(0)Sheets(1).Cells(ind, 8).Value = Sheets(1).Cells(ind, 8).Value + CInt(oMatches(0))Set oMatches = NothingNextNextEnd Sub在上述代碼中,我們定義了一個(gè)名為test的子過(guò)程。通過(guò)創(chuàng)建一個(gè)正則表達(dá)式對(duì)象oRegExp,我們能夠匹配并提取字符串中的數(shù)字。首先,通過(guò)Sheets(1).UsedRange.Rows.Count獲取當(dāng)前工作表中已使用的行數(shù),然后通過(guò)For循環(huán)遍歷每一行的數(shù)據(jù)。在每次循環(huán)中,我們使用Split函數(shù)將單元格中的值按照*符號(hào)分割成數(shù)組arr。接著,我們計(jì)算數(shù)組的長(zhǎng)度iNum,并再次使用For循環(huán)遍歷數(shù)組中的每一個(gè)元素。在With語(yǔ)句塊中,我們?cè)O(shè)置正則表達(dá)式的全局匹配、忽略大小寫(xiě)和模式。模式設(shè)置為"[0-9]+",用于匹配一個(gè)或多個(gè)連續(xù)的數(shù)字。通過(guò)Execute方法,我們可以找到所有匹配的數(shù)字,并將其存儲(chǔ)在oMatches集合中。然后,我們將在單元格ind+i+2中設(shè)置匹配的第一個(gè)數(shù)字,并將該數(shù)字的整數(shù)值加到單元格ind+8的當(dāng)前值上。最后,我們清空oMatches集合。通過(guò)上述過(guò)程,我們可以從每行的字符串中提取出所有連續(xù)的數(shù)字,并進(jìn)行相應(yīng)的處理。這個(gè)子過(guò)程主要應(yīng)用于從含有星號(hào)分隔的數(shù)據(jù)中提取數(shù)字,并對(duì)這些數(shù)字進(jìn)行累加處理。在實(shí)際應(yīng)用中,你可以根據(jù)需求調(diào)整模式和處理邏輯,以滿足不同的數(shù)據(jù)處理需求。例如,如果你需要匹配特定范圍內(nèi)的數(shù)字,可以調(diào)整模式為"[1-9][0-9]{0,2}",以匹配1到999之間的數(shù)字。此外,如果你需要對(duì)提取的數(shù)字進(jìn)行其他操作,如計(jì)算平均值或統(tǒng)計(jì)數(shù)量,可以根據(jù)需要修改代碼。希望這個(gè)例子能幫助你更好地理解和使用正則表達(dá)式在VBA中的應(yīng)用。如果你在編寫(xiě)類(lèi)似代碼時(shí)遇到問(wèn)題,歡迎隨時(shí)提問(wèn)。祝你編程愉快!