陣列之間的匹配 vlookup函式在陣列中的使用

前景提要

之前我們學習了陣列中運用函式match來進行資料的匹配,雖然說我們上一節學習的是判斷是否存在,其實在某種程度上來說,也算是資料的匹配,不過說到資料的匹配,大家一定會首先想到函式中的vlookup,那麼萬能的vlookup函式,是否能夠用在VBA的陣列中呢?

當然可以的,當我們在利用vba的陣列的時候,其實也是可以利用Excel的函式進行資料的匹配的,話不多說,上案例

場景模擬

陣列之間的匹配 vlookup函式在陣列中的使用

這個是我們今天的模擬資料,我們假設左邊兩行都是成績表,我們現在需要用VBA陣列的方式來獲得F列這些學生的成績

其實這樣的場景,用vlookup函式絕對是最簡單的,但是考慮到我們實際的操作中環境中,是在vba,所以我們要調整下場景,看看再VBA中,如何來使用這個vlookup函式

程式碼區

Sub test()

Dim arr, arr2, arr3

arr = Range(Cells(1, 1), Cells(26, 2))

arr2 = WorksheetFunction。Transpose(Range(Cells(2, “f”), Cells(6, “f”)))

arr3 = WorksheetFunction。VLookup(arr2, arr, 2, 0)

Range(“G2:G6”) = WorksheetFunction。Transpose(arr3)

End Sub

程式碼看起來並不長,但是似乎感覺每句程式碼有很長,這其中有什麼玄機嘛?

不方,我們先來看看程式碼執行的結果

陣列之間的匹配 vlookup函式在陣列中的使用

和VLOOKUP的效果是一樣的,一番操作之後,成功的將結果匹配出來了並且填充到單元格中

程式碼解析

來看看今天的程式碼解析

我們看到程式碼中,一上來就創造了兩個陣列,arr和arr2

arr = Range(Cells(1, 1), Cells(26, 2))

arr2 = WorksheetFunction。Transpose(Range(Cells(2, “f”), Cells(6, “f”)))

arr還是很好理解的,就是直接將A、B兩列的資料直接全部裝到arr中,那麼arr2呢?

看起來似乎有一點複雜,其實我們可以拆開來理解,這裡其實執行了兩個動作,我們來看看第一個動作

動作1:將F列的資料裝入陣列arr2,對應

arr2 = Range(Cells(2, “f”), Cells(6, “f”))

那麼這樣看來,多出來的那一堆程式碼就是動作二了

動作2:將二維陣列轉化成為一維陣列

WorksheetFunction。Transpose

這一點程式碼執行的就是這個效果,

那麼這裡大家肯定會問,為什麼要多此一舉,將二維轉化成為一維陣列的目的又是什麼?

先跳過,我們直接來到下一句程式碼,就是vlookup函式這裡

在陣列中,如果使用vlookup函式的話,那麼有幾點要求留意

資料來源必須要二維陣列

所謂的資料來源,就是AB兩列的資料,如果你只有一列資料,那麼只有一列在陣列中也是一個二維陣列

2。匹配值必須是一維陣列

這就是上面我們為什麼要將二維轉化成為一維的原因,因為匹配值必須是一個一維陣列,在陣列的概念中,一列資料裝到陣列中,哪怕只是一列,也是一個二維陣列,需要利用WorksheetFunction。Transpose將它轉化成為一維陣列,我們可以看看arr2在轉置前後有什麼不同

陣列之間的匹配 vlookup函式在陣列中的使用

我們將兩個步驟分開來,對應的結果是不同的,arr22是一維陣列,而arr2則是二維陣列,留意到他們的座標會有不同,有兩個數字的,很明顯是一個二維陣列

瞭解了這一點之後,後面的就是vlookup函式的匹配了,這點對大家來說就很簡單了。