EXCEL自定義函數實例-查找指定數據,並返回多個與其對應的數據

2020-12-11 事事樂分享
自定義函數使用示範

使用EXCEL肯定對函數不陌生,比如求和函數SUM,EXCEL內置了很多實用的函數,但有時候這些函數也不能滿足我們的使用要求,這時我們可以創建屬於自己的函數,這就叫自定義函數,使用方法和內置函數是一樣的。

現在演示的這個自定義函數類似於Vlookup,但Vlookup只能返回查找區域右邊某一列的數據。不能返回左邊的,也不能返回多個數據。這個自定義函數是可以返回左邊對應數據及自身的。如果返回多個數據會把多個數據以逗號隔開連接在一起。

Function txtjoin(str As Range, Rng As Range, Optional ByVal lkt As Integer = 1, Optional x As Integer = 1, Optional x1 As Integer = 100, Optional x2 As Integer = 100, Optional x3 As Integer = 100, Optional x4 As Integer = 100, Optional x5 As Integer = 100)

'參數說明,str,要查找的內容所在單元格對象,rng,指定在哪列查找,lkt完全匹配還是近似查找,默認為1完全匹配,x要返回的內容,相對於查找列的對應位置,默認右邊第1列,可以是負數,代表左邊第幾列。x1-x5,可返回的內容,可選。X-X5 之間的內容是連接成一個字符串,最多可以返回6列的數據合併成一列,要設置默認值就要使用Optional參數,如果使用了該選項,則後續參數都必須是可選的,而且必須都使用 Optional關鍵字聲明。如果使用了 ParamArray,則任何參數都不能使用 Optional 聲明。

Dim findvalue As Range

Dim str2 As String, strcol As Integer, i As Integer

str2 = str.value

strcol = str.Column

If lkt = 1 Then '如果參數=1則查找時使用下面的lookat:=xlWhole參數進行完全匹配查找

Set findvalue = Rng.Find(what:=str2, lookat:=xlWhole)

Else '如果參數lkt的值不為1則進行近似匹配查找,lkt設置了默認值為1,省略該參數時進行完全匹配查找。

Set findvalue = Rng.Find(what:=str2, lookat:=xlPart)

End If

If Not findvalue Is Nothing Then '如果找到,則

txtjoin = Cells(findvalue.Row, findvalue.Column + x).value '返回以當前找到的行偏移多少列的值,後面幾行是對後面5個可選參數進行判斷,如果指定要返回的列在查找列右邊100列以內,不能小於1,因為小於1的列是不存在的,因為這裡是可以返回查找列左邊的數據,所以要進行這樣的一個判斷。

If x1 < 100 And findvalue.Column + x1 > 0 Then txtjoin = txtjoin & "," & Cells(findvalue.Row, findvalue.Column + x1).value

If x2 < 100 And findvalue.Column + x1 > 0 Then txtjoin = txtjoin & "," & Cells(findvalue.Row, findvalue.Column + x2).value

If x3 < 100 And findvalue.Column + x1 > 0 Then txtjoin = txtjoin & "," & Cells(findvalue.Row, findvalue.Column + x3).value

If x4 < 100 And findvalue.Column + x1 > 0 Then txtjoin = txtjoin & "," & Cells(findvalue.Row, findvalue.Column + x4).value

If x5 < 100 And findvalue.Column + x1 > 0 Then txtjoin = txtjoin & "," & Cells(findvalue.Row, findvalue.Column + x5).value

Else '否則,沒有找到任何匹配的數據的話,設置返回值為空,如果這裡不設置為空的話會返回一個數值0

txtjoin = ""

End If

End Function

附:

基本語法[Public | Private | Friend] [Static] Function name [(arglist)] [As type]

Function語句的語法包含下面部分:

如果沒有使用 Public、Private 或 Friend 顯式指定,則 Function 過程預設為公用。如果沒有使用 Static,則局部變量的值在調用之後不會保留。Friend 關鍵字只能在類模塊中使用。但Friend 過程可以被工程的任何模塊中的過程訪問。Friend 過程不會在其父類的類型庫中出現,且 Friend 過程不能被後期綁定。

其中的 arglist 參數的語法以及語法各個部分如下:

'[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

相關焦點

  • 【VBA自定義函數】315個自定義函數
    31、查找一字符串(withinstr)在另一字符串中(findstr1)中某一次(startnum)出現時的位置,返回零表示沒找到32、在文件路徑後面增加反斜槓符號33、從工作表第一行的標題文字以數字形式返回所在列號34、在多個工作表中查找一個範圍內符合某個指定條件的項目對應指定範圍加總求和35、查找指定列名的列數36、文字格式的時間(分:秒)轉化為數字格式(秒)37、將hh:mm:ss格式的時分秒數轉換成秒數
  • excel數據查找技巧:按時間段進行區域查找數據
    如何根據日期和名稱等多個條件查詢相應時間範圍或者時間段所對應的產品價格、數量呢?品名、編號等都需要精確查找,但不需要對日期進行精確查找,而是查找最接近或等於查找日期的某個時間段。趕緊看看下面的文章吧!學習更多技巧,請收藏關注部落窩教育excel圖文教程。
  • Excel六大查找函數詳解,讓數據查詢更簡單,簡單易學且高效
    原創Excel函數與VBA實例2020-10-11 21:30:50Excel數據查找,相信多數的同學都不陌生,我們經常會使用vlookup等各類查找函數,進行數據的匹配查找。今天我們就來詳細的講解一下,Excel六大查找函數的詳細用法,讓我們了解到在不同的場景,如何使用不同的函數去查詢數據。
  • Excel中的數據匹配和查找
    在Excel中,提供了多個可以用來進行數據匹配和查找的函數:HLOOKUP、INDEX、LOOKUP、MATCH和VLOOKUP等。
  • Excel表格用Vlookup、Indirect、Match函數匯總多個工作表的數據
    數據的匯總是我們日常工作中經常會遇到的問題。如果工作表的數量較少可以通過複製粘貼匯總,但是工作表很多時在用複製粘貼效率就非常低。今天就為朋友們分享一種單純使用函數、不包含任何VBA代碼快速匯總多個工作表數據的方法。
  • 數據分析必備的43個Excel函數
    函數分類:關聯匹配類清洗處理類邏輯運算類計算統計類時間序列類一、關聯匹配類經常性的,需要的數據不在同一個excel表或同一個excel表不同sheet中,數據太多,copy麻煩也不準確,如何整合呢?這類函數就是用於多表關聯或者行列比對時的場景,而且表越複雜,用得越多。
  • excel查找數據就是如此簡單,vlookup函數的模糊查找
    我們在實際工作中,我們經常使用excel表格處理數據,處理數據的方法有很多種,查找數據應該是我們在日常工作中使用頻率比較高的操作,這次我們還是分享查找數據的小技巧,這次是對數據進行模糊查找,我們使用vlookup函數對數據進行模糊查找,下面我們就以實例結合視頻的形式將詳細的操作步驟展示出來
  • Excel Find函數與FindB函數使用方法,含用數組一次查找多個值
    在 Excel 中,查找指定字符在源字符串中的位置,既可以用 Find函數,也可以用 FindB函數,它們都有三個參數,所不同的是,前者把漢字、字母和數字都算一個字符,後者把漢字算兩個字節,數字和字母算一個字節。
  • 查找相同數據還在一次一次使用vlookup函數?只需加上它1次搞定
    Hello,大家好,工作中大家有沒有有遇到這樣的情況,就是我們想要在多個表格中查找某一個對應的多個結果,如下圖想要查找劉備和李白4個月的銷售額,每個月的銷售額在不同的表格中,這個時候通產都是使用4次vlookup函數來完成,今天跟大家分享一種方法,使用一次vlookup即可查找4個表格的數據非常的快捷
  • 數據分析必備的43個Excel函數,史上最全!
    函數分類:關聯匹配類清洗處理類邏輯運算類計算統計類時間序列類經常性的,需要的數據不在同一個excel表或同一個excel表不同sheet中,數據太多,copy麻煩也不準確,如何整合呢?這類函數就是用於多表關聯或者行列比對時的場景,而且表越複雜,用得越多。
  • Excel查找引用函數:VLOOKUP函數的語法和實例講解
    VLOOKUP函數是Excel中一個常用的查找匹配函數,與LOOKUP函數屬於同一類,都在工作中廣泛應用。今天小編就從VLOOKUP函數的語法講起,根據實例詳細說說各參數的引用和使用方法。先來看看VLOOKUP函數的官方語法:【用途】在表格或數值數組的首列查找指定的數值,並由此返回表格或數組當前行中指定列處的數值。
  • Excel vlookup篩選兩列的重複項與查找兩個表格相同數據
    Vlookup函數可用於多種情況查找,篩選重複數據就是其中之一,它既可篩選兩列重複的數據又可查找兩個表格相同的數據。篩選兩列重複數據時,不僅僅是返回一項重複數據,是把所有重複的都標示出來;查找兩表格相同數據時,兩個表格既可以位於同一Excel文檔,又可分別位於兩個Excel文檔,並且也可以標示出所有重複的數據;當查找兩個位於不同Excel文檔中的表格相同數據時,查找範圍需要寫文檔名稱和工作簿名稱,這樣Excel才能找到查找區域。
  • Excel重複數據查找,COUNTIF和IF函數組合大顯神威
    重複數據查找,COUNTIF和IF函數組合大顯神威大家好,在日常辦公表格處理中,很多經典的函數組合,能解決很多的問題,比如INDEX-MATCH組合, INDEX-SMALL-IF-ROW組合,當然還有很多,如果能很好的利用這些函數組合,對於日常辦公問題,應該能迎刃而解了。
  • excel數據核對:3個公式讓你完成數據核對問題
    最近在微信學習交流群中收到某位學員的問題諮詢,問題是如何根據單據編號和物料長代碼返回對應的含稅數額。如下表:其實這位學員的問題就是如何實現多條件查詢。下面通過一個實例跟大家分享一下常用的幾種多條件查詢方法。
  • excel數據核對:3個公式讓你完成數據核對問題
    2.VLOOKUP函數使用G2單元格在A列中查找,如果查找到對應單元格則返回A列向右第二列的數據。簡而言之:=VLOOKUP(查找什麼,在哪查找,從條件所在列算起找到後返回對應的第幾列數據,精確或模糊查找)。那vlookup如何才能完成多條件查詢呢?。還以客戶投訴表為例,按照姓名&地區來匹配產品型號返回到E裡中。
  • Excel數據分析:7個VLOOKUP函數,是你要找的它!
    VLOOKUP函數是Excel中幾個最重函數之一,為了方便大家學習,特針對VLOOKUP函數的使用和擴展應用,進行一次全面綜合的說明。VLOOKUP是一個查找函數,給定一個查找的目標,它就能從指定的查找區域中查找返回想要查找到的值。
  • excel多條件查找方法:lookup、vlookup、indexmatch多條件查找
    下面通過一個實例跟大家分享一下常用的3種excel多條件查找函數。簡而言之:=VLOOKUP(查找什麼,在哪查找,從條件所在列算起找到後返回對應的第幾列數據,精確或模糊查找)。那vlookup如何才能完成多條件查詢呢?。還以客戶投訴表為例,按照姓名&地區來匹配產品型號返回到E裡中。
  • 十周入門 | 數據分析必備的43個Excel函數,超全面!
    函數分類:關聯匹配類清洗處理類邏輯運算類計算統計類時間序列類經常性的,需要的數據不在同一個excel表或同一個excel表不同sheet中,數據太多,copy麻煩也不準確,如何整合呢?這類函數就是用於多表關聯或者行列比對時的場景,而且表越複雜,用得越多。
  • pandas數據處理:常用卻不甚了解的函數,pd.read_excel()
    人們經常用pandas處理表格型數據,時常需要讀入excel表格數據,很多人一般都是直接這麼用:pd.read_excel(「文件路徑文件名」),再多一點的設置可能是轉義一下路徑中的斜槓,一旦原始的excel表不是很規整,這樣簡單讀入勢必報錯!
  • excel查找函數-vlookup
    在我們日常表格數據處理中,經常遇到數據查詢等問題,比如根據產品編號查詢單價或根據產品名稱反方向查找產品編碼等。大家都會想到 VLOOKUP、LOOKUP等熟悉的查詢函數,但是對於剛入接觸或學習excel的新手不知道怎麼操作,今天分享關於查詢問題通過下面例子進行演示,如下:關鍵詞:vlookup、IFERROR、反方向查找函數使用格式=VLOOKUP