Excel·VBA自定义函数扩展VLOOKUP
生活随笔
收集整理的這篇文章主要介紹了
Excel·VBA自定义函数扩展VLOOKUP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VLOOKUP函數功能是按列查找、最終返回該列所需查詢所對應的值,是Excel中廣泛應用的查找、核對的函數
目錄
- 1,VLOOKUP_INDEX查找指定的第N個值
- 舉例
- 2,VLOOKUP_ALL查找所有符合條件的值
- 舉例
1,VLOOKUP_INDEX查找指定的第N個值
VLOOKUP函數,只能返回匹配到第1個值,如果需要返回指定第N個值,就需要編寫自定義函數進行擴展
Function VLOOKUP_INDEX(lookup_value As String, table_array As Range, Optional col_index As Integer = 2, Optional index As Integer = 1) As String'函數定義VLOOKUP_INDEX(要查找的值,查找區域,匹配值所在列數,需要返回第幾個匹配的值)返回與要查找的值匹配的結果Dim i As Long, find_cell As Range, cell_address As StringWith table_array.Columns(1)'如果區域第1個單元格等于查找的值,則將該單元格賦值cell;否則使用find查找,將單元格賦值cellIf .Cells(1) = lookup_value Then 'range.find方法不是從第1個開始查找Set find_cell = .Cells(1)Else'按值查找xlValues,完全匹配xlWholeSet find_cell = .Find(lookup_value, LookIn:=xlValues, lookat:=xlWhole)End IfIf Not find_cell Is Nothing Then '未發現匹配項時,find方法返回 Nothingcell_address = find_cell.Address '記錄單元格地址Doi = i + 1If i = index Then '如果是需要返回的index,則返回對應的匹配值VLOOKUP_INDEX = find_cell.Offset(0, col_index - 1)Exit FunctionElseSet find_cell = .Find(lookup_value, find_cell, LookIn:=xlValues, lookat:=xlWhole) '查找下一個End IfLoop While Not find_cell Is Nothing And find_cell.Address <> cell_addressElseVLOOKUP_INDEX = "#無匹配值"End IfEnd WithEnd FunctionSub VLOOKUP_INDEX幫助信息()'運行一次后該幫助信息生效Dim 函數名稱 As String '函數名稱Dim 函數描述 As String '函數描述Dim 參數個數(0 To 3) As String '函數參數描述 數組 個數函數名稱 = "VLOOKUP_INDEX"函數描述 = "擴展VLOOKUP,可以指定返回第幾個匹配的值,完全匹配"參數個數(0) = "要查找的值,單元格、文本字符串"參數個數(1) = "查找區域,同VLOOKUP,第1列包含要查找的值"參數個數(2) = "匹配值所在列數,同VLOOKUP,數字"參數個數(3) = "需要返回第幾個匹配的值,數字"Call Application.MacroOptions(macro:=函數名稱, Description:=函數描述, ArgumentDescriptions:=參數個數)End Sub舉例
G2處查找第2個符合條件的值,公式 =VLOOKUP_INDEX(F1,A1:B9,2,2)
2,VLOOKUP_ALL查找所有符合條件的值
VLOOKUP函數,只能返回匹配到第1個值,如果需要返回所有的值,就需要編寫自定義函數進行擴展
Function VLOOKUP_ALL(lookup_value As String, table_array As Range, Optional col_index As Integer = 2) As String'函數定義VLOOKUP_ALL(要查找的值,查找區域,匹配值所在列數)返回與要查找的值匹配的所有結果Dim arr, i As Long, delimiter As String, srr, narr = table_array.Valuedelimiter = "," '分隔符srr = Array() '保存匹配的值,空數組For i = LBound(arr) To UBound(arr)If arr(i, 1) = lookup_value Thenn = UBound(srr) + 1ReDim Preserve srr(n) '重定義數組長度,但數據保留srr(n) = arr(i, col_index)End IfNextIf UBound(srr) = -1 ThenVLOOKUP_ALL = "#無匹配值"ElseVLOOKUP_ALL = Join(srr, delimiter)End IfEnd FunctionSub VLOOKUP_ALL幫助信息()'運行一次后該幫助信息生效Dim 函數名稱 As String '函數名稱Dim 函數描述 As String '函數描述Dim 參數(0 To 2) As String '函數參數描述 數組 個數函數名稱 = "VLOOKUP_ALL"函數描述 = "擴展VLOOKUP,可以返回所有匹配的值并用“,”分隔,完全匹配"參數(0) = "要查找的值,單元格、文本字符串"參數(1) = "查找區域,同VLOOKUP,第1列包含要查找的值"參數(2) = "匹配值所在列數,同VLOOKUP,數字"Call Application.MacroOptions(macro:=函數名稱, Description:=函數描述, ArgumentDescriptions:=參數)End Sub舉例
總結
以上是生活随笔為你收集整理的Excel·VBA自定义函数扩展VLOOKUP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(3295):react生命周期
- 下一篇: 使用数据增强技术提升模型泛化能力