您的位置:首頁>正文

讓您心服口服的一對多查詢

大家好, 今天和大家分享“讓您心服口服的一對多查詢”, 一對多查詢在我們工作中也是常見的事, 下面我以4種方法來講解給大家

一、把查詢結果放在一個儲存格裡

1、動畫操作效果

2、公式截圖

3、公式|更多Excel學習和問題請加群:289393114、570064677

=MID(SUBSTITUTE(PHONETIC(INDIRECT("A"&MATCH(,0/($A$1:$A$9=D1),)&":B"&MATCH(1,0/($A$1:$A$9=D1)))),D1,","),2,99)

4、公式解釋

要注意兩點, 第1點A列要排序, 讓相同的姓名挨在一起;第2點B列要是文本型的數位, 因為函數PHONETIC連接數位時會顯示空

"A"&MATCH(,0/($A$1:$A$9=D1),)&":B"&MATCH(1,0/($A$1:$A$9=D1))根據查找值得到查找值姓名所在的區域文本運算式,

外面嵌套的一indirect函數, 讓儲存格區域文本運算式變為儲存格區域, 因為PHONETIC只支援儲存格區域

MATCH(,0/($A$1:$A$9=D1),)這個公式的Match找第一個曹麗出現的位置

MATCH(1,0/($A$1:$A$9=D1))這個公式的Macth找最後一個曹麗出現的位置

用substitute把曹麗替換成逗號, 然後用mid函數從第2個位置提取, 提取99個, 目的就是讓第1個逗號不要

二、把查詢結果縱向顯示

1、公式截圖

2、公式

=INDEX(B:B,SMALL(IF($A$1:A9=$D$1,ROW($A$1:A9),2^20),ROW(A1)))&""

3、公式解釋

這個不要求A列排序, 也不要求B列是文本型的數值

IF($A$1:A9=$D$1,ROW($A$1:A9),2^20)判斷區域是否有等於“曹麗”, 如果有就返回區域的行號, 否則就返回2^20也就是1048576, 2010版本最大的行號

通過Small函數下拉, 把第幾小提取出來

用index函數從B列把相應的資料引用出來

三、把查詢結果橫向顯示

1、公式截圖

2、公式

=INDEX($B:$B,SMALL(IF($A$1:$A$9=$D$1,ROW($A$1:$A$9),2^20),COLUMN(A1)))&""

3、公式解釋

和上面的公式原理一樣, 也是陣列公式, 記得複製好公式之後, 要把游標點到編輯欄裡, 然後三鍵一齊下Ctrl+Shift+Enter

由於是右拉, 所以上面的公式Small第2參數Row(A1)改成Column(A1)

四、Vlookup函數實現一對多查詢

1、公式截圖

2、公式

=IFERROR(VLOOKUP($D$1&ROW(A1),CHOOSE({1,2},$A$1:$A$9&COUNTIF(INDIRECT("A1:A"&ROW($A$1:$A$9)),$D$1),$B$1:$B$9),2,0),"")

3、公式解釋

首先申明, 如果現在現實工作中, 不建議你用這種方法, 這種方法練習可以。 工作中建議大家採用上面2種方法

公式$A$1:$A$9&COUNTIF(INDIRECT("A1:A"&ROW($A$1:$A$9)),$D$1)這個公式難理的地方在這裡INDIRECT("A1:A"&ROW($A$1:$A$9)), 用了多區域, 這裡有9個區域, A1一個區域;A1:A2一個區域;A1:A3一個區域;A1:A4一個區域;A1:A5一個區域;A1:A6一個區域;A1:A7一個區域;A1:A8一個區域;A1:A9一個區域;

用countif函數統計這9個區域裡的曹麗的個數, 統計的結果相當於給每一個姓名編了號一樣, 從1開始編號, 然後在前面連接A列的姓名, 這樣得到把相同的姓名變成不相同了

最後用choose函數把連接的結果放在第1列, 數量放在第2列, 便可以用 vlookup函數引用了

五、vba自訂函數實現

1、動畫效果

2、代碼

Option Explicit

Function 一對多查詢(SRg As Range, Rg1 As Range, y&)

Dim arr1, arr2(1 To 1000, 1 To 1), k, x

arr1 = SRg

For x = 1 To UBound(arr1)

If arr1(x, 1) = Rg1 Then

k = k + 1

arr2(k, 1) = arr1(x, 2)

End If

Next x

If y <= k Then

一對多查詢 = arr2(y, 1)

Else

一對多查詢 = ""

End If

End Function

3、操作方法

第1步:快速鍵Alt+F11打開vbe視窗

第2步:插入功能表,插入模組

第3步:複製上面的代碼,粘貼到模組的空白處,就可以在工作表儲存格使用此函數了

4、公式截圖

2、代碼

Option Explicit

Function 一對多查詢(SRg As Range, Rg1 As Range, y&)

Dim arr1, arr2(1 To 1000, 1 To 1), k, x

arr1 = SRg

For x = 1 To UBound(arr1)

If arr1(x, 1) = Rg1 Then

k = k + 1

arr2(k, 1) = arr1(x, 2)

End If

Next x

If y <= k Then

一對多查詢 = arr2(y, 1)

Else

一對多查詢 = ""

End If

End Function

3、操作方法

第1步:快速鍵Alt+F11打開vbe視窗

第2步:插入功能表,插入模組

第3步:複製上面的代碼,粘貼到模組的空白處,就可以在工作表儲存格使用此函數了

4、公式截圖

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示