前景提要
在日常工作中,我們經常會碰到這樣的操作,一個單元格中有數字有文字等,我們需要的僅僅是其中的數據,我們需要將這些數據提取出來,然後做其他的統計或者分析,如果數據小,可以手工,但是數據量大的情況下,手工就不現實了,那麼有什麼好辦法嗎?
其實VBA作為Excel自帶的簡易程式語言,這個要求完全不在話下,今天我們就來學習一個簡易的數據提取法,為什麼說是比較簡單的分離呢?因為我們現在還處在函數篇,所有的運用都是依賴於函數進行的,所以我們還是儘量使用函數來完成,雖然這樣能夠實現的功能比較的局限,但是大家能夠更加清楚了解的到每個函數的意義和使用場景,這對於大家今後再面對更加複雜的結構的時候,才能夠得心應手。
函數說明
今天要說的這個函數是val函數,三個字母非常的簡單,也代表了他的運用場景比較的簡單,並不適合用來處理特別複雜的數據結構,他主要適應於處理數字+文字,數字+英文,這樣的組合的形式,只有一個要求,就是必須是數字在前的,其他的中文或者是英文字符都必須在後面的,這樣他才能夠將數字提取出來,我們來看看代碼
場景說明
這裡依然假設是我們各個不同的網絡商城的訂單號,從下圖中我們可以看出來,每個訂單號的結構各不相同(我編的),我們現在希望將其中的數字提取出來,作為我們登記明細的唯一標註,那麼我們要如何實現呢?
代碼區
Sub test()
Dim i%
For i = 2 To 8
Cells(i, 7).Offset(0, 1) = Val(Cells(i, 7))
Next i
End Sub
來看看效果
有些成功的提取出了數字,但是有些並沒有成功提取出來,為什麼會這樣呢?別急,聽我下面慢慢講解。
代碼解析
為什麼上面會出現一些完全不同的結果呢?我們來一個個的分析下
前面我們已經說過,val的使用場景是數字在前,中文或者英文是在後面的,val能夠提取出來的就是中文或者英文前面的這些數字
我們來看看例子,第二行66哈哈,數字+中文的組合,val應該能夠將漢字前面的數字,即66提取出來,後面的結果也正好是這樣的,再來看看第3個例子,66aa,數字+英文的組合,也正好能夠提取出英文前面的數字
在看看其他的一些反常的情況,66aa66,數字+英文+數字的組合,val能提取出來哪部分呢?很明顯,它只能夠提取出來前面的一部分,即66,無法提取出來後面的一部分,我們用下面一行的例子來驗證,val提去出來了G前面的667這三個數字,但是他沒有辦法提取出G後面的7
而最後的一個例子和最開始的一個例子,結構並不是數字開頭的,所以val並不適用於這樣的場景,自然提取出來的結果都是0.
綜合上面的幾個不同的例子,大家是否能夠理解val函數的使用場景和範圍嗎?