點(diǎn)【關(guān)于本公眾號(hào)】了解一下,歡迎關(guān)注,謝謝!
快速瀏覽
實(shí)用案例
|日期控件||簡(jiǎn)單的收發(fā)存||收費(fèi)管理系(Access改進(jìn)版)|
|電子發(fā)票管理助手||電子發(fā)票登記系統(tǒng)(Access版)|
|中醫(yī)診所收費(fèi)系統(tǒng)(Excel版)||中醫(yī)診所收費(fèi)系統(tǒng)(Access版)||銀行對(duì)賬單自動(dòng)勾對(duì)|
收費(fèi)使用項(xiàng)目
|財(cái)務(wù)管理系統(tǒng)||工資薪金和年終獎(jiǎng)個(gè)稅籌劃||新稅法下工資表模版|
內(nèi)容提要
目的有二,一是想看看用新版本的Office是否能解決前面打開(kāi)文件報(bào)錯(cuò)的問(wèn)題,二是咱也能用上新函數(shù),比如FILTER什么的。
結(jié)果呢,依然提示修復(fù),但是文件倒是沒(méi)有變得面目全非,只是刪除了部分?jǐn)?shù)據(jù)驗(yàn)證,文件能正常使用。也算是沒(méi)有白費(fèi)功夫吧。
這些問(wèn)題就算翻篇了,而且,我們可以使用新函數(shù)啦。
今天我們就來(lái)研究一下FILTER函數(shù)。
其實(shí),要是寫(xiě)一個(gè)基礎(chǔ)的“教程”純屬多余,我們?cè)诠ぷ鞅淼膯卧窭镙斎搿?FILTER(”,在下面的函數(shù)提示中點(diǎn)擊FILTER,就會(huì)聯(lián)機(jī)查詢到這個(gè)函數(shù)的官方幫助文檔,內(nèi)容也是相當(dāng)詳盡(其他函數(shù)應(yīng)該都能這樣學(xué)習(xí)官方教程):
我們要是照本宣科也實(shí)在沒(méi)什么意思,我們來(lái)研究一點(diǎn)相對(duì)“高級(jí)”一點(diǎn)的用法。
我們知道,用VLOOKUP函數(shù),只能一對(duì)一查詢,要查詢所有的結(jié)果,那它也只能兩手一攤,臣妾辦不到??!
要實(shí)現(xiàn)一對(duì)多查詢,擱以前,公式是相當(dāng)復(fù)雜、燒腦,我們就不去費(fèi)這個(gè)功夫舉例了。
現(xiàn)在好了,有了FILTER函數(shù),一切都變得如此簡(jiǎn)單、方便!
我們還是舉一個(gè)例子吧:有一張“出貨表”,我們需要根據(jù)客戶名稱、訂單名稱(實(shí)際上是商品名稱)進(jìn)行多維度地查詢,我們希望能查詢包含某個(gè)關(guān)鍵字的記錄。
我們可以分為三個(gè)層次,逐步增加公式的復(fù)雜度、靈活性與實(shí)用性:
1、直接引用單元格:
根據(jù)指定客戶名稱、指定訂單名稱,查詢明細(xì)數(shù)據(jù),我們把條件分別放到L1、L2單元格,我們可以寫(xiě)公式:
=FILTER(A2:H36,(C2:C36=L1)*(D2:D36=L2))
查詢結(jié)果如下圖所示:
2、結(jié)合其他函數(shù),擴(kuò)展為可按任意關(guān)鍵字搜索
如果我們要查詢訂單名稱中包含某一個(gè)關(guān)鍵字的記錄,那應(yīng)該怎么辦呢?
那我們就得請(qǐng)出SEARCH或FIND函數(shù)了, 這兩個(gè)函數(shù)的區(qū)別可以參考【Excel函數(shù)公式:SEARCH函數(shù)與FIND函數(shù)有什么區(qū)別?】,實(shí)際上也就是一句話“SEARCH函數(shù)不區(qū)分大小寫(xiě),支持通配符”。我們可以使用如下公式:
=FILTER(A2:H36,ISNUMBER(SEARCH(L1,C2:C36))*ISNUMBER(SEARCH(L2,D2:D36)))
公式解析:
3、定義名稱,實(shí)現(xiàn)數(shù)據(jù)區(qū)域動(dòng)態(tài)擴(kuò)展:
如果我們的數(shù)據(jù)增加了,又該怎么辦呢?
我們可以定義名稱來(lái)動(dòng)態(tài)引用數(shù)據(jù)區(qū)域,增加數(shù)據(jù)后,會(huì)自動(dòng)包含新數(shù)據(jù):
(1)定義名稱“數(shù)據(jù)”,代表整個(gè)數(shù)據(jù)區(qū)域:
=OFFSET('出貨表 (3)'!$A$1,1,0,COUNTA('出貨表 (3)'!$A:$A)-1,8)
(2)定義名稱“客戶名稱”,代表客戶名稱那一列數(shù)據(jù)區(qū)域:
=OFFSET('出貨表 (3)'!$C$1,1,0,COUNTA('出貨表 (3)'!$A:$A)-1,1)
(3)定義名稱“訂單名稱”,代表訂單名稱那一列數(shù)據(jù)區(qū)域:
=OFFSET('出貨表 (3)'!$D$1,1,0,COUNTA('出貨表 (3)'!$A:$A)-1,1)
(4)在目標(biāo)區(qū)域第一個(gè)單元格,編寫(xiě)公式,也就是把前面引用的單元格區(qū)域替換成名稱:
=FILTER(數(shù)據(jù),ISNUMBER(SEARCH(L1,客戶名稱))*ISNUMBER(SEARCH(L2,訂單名稱)))
后記
客戶列表=UNIQUE(OFFSET('出貨表 (1)'!$C$1,1,0,COUNTA('出貨表 (1)'!$C:$C)-1,1))
訂單列表=UNIQUE(OFFSET('出貨表 (1)'!$D$1,1,0,COUNTA('出貨表 (1)'!$D:$D)-1,1))
'//在工作表“出貨表?"里,工作表的Selection Change事件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Dim arr()
If Target.Address = "$L$1" Then
arr = [客戶列表]
Call SetDataValidation(arr, Target)
ElseIf Target.Address = "$L$2" Then
arr = [訂單列表]
Call SetDataValidation(arr, Target)
End If
End Sub
'//在myModule模塊里,設(shè)置數(shù)據(jù)驗(yàn)證過(guò)程
Sub SetDataValidation(arr(), rng As Range)
'//設(shè)置單元格數(shù)據(jù)驗(yàn)證
Dim listStr As String
For i = LBound(arr) To UBound(arr)
listStr = listStr & arr(i, 1) & ","
Next
'//去掉結(jié)尾的 ","
listStr = Left(listStr, Len(listStr) - 1)
'//刪除已有的數(shù)據(jù)驗(yàn)證
rng.Validation.Delete
With rng.Validation
'//添加數(shù)據(jù)驗(yàn)證,源為listStr
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=listStr
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False '//不顯示出錯(cuò)警告,改為TRUE則顯示,同時(shí)不能輸入不合驗(yàn)證的字符
End With
End Sub
INDEX(FILTER(...),1)
=INDEX(FILTER(表1_3[單價(jià)],表1_3[訂單名稱]=L2),1)
安利小店 安利的牙膏非常不錯(cuò),用了以后就不想再用其他的了;洗潔精、洗衣液也是日常必備,用過(guò)都說(shuō)好! | |
合谷醫(yī)療 合谷醫(yī)療專攻各種疑難雜癥,尤其擅長(zhǎng)抑郁癥、焦慮失眠、兒童神經(jīng)發(fā)育異常、多動(dòng)癥、自閉孤獨(dú)癥、腰頸椎疾病治療,可謂神乎其技!體驗(yàn)過(guò)的直呼早點(diǎn)來(lái)就好了! | |
S 我的付費(fèi)知識(shí)星球:Excel活學(xué)活用 幫助VBA初學(xué)者提高VBA編程水平,歡迎加入! |
喜歡就點(diǎn)個(gè)贊、點(diǎn)在看、留言評(píng)論、分享一下唄!感謝支持!
案例文件分享說(shuō)明:
案例文件可免費(fèi)分享,但需符合以下要求:
請(qǐng)關(guān)注、點(diǎn)贊、點(diǎn)在看、點(diǎn)...、留言,方便的話分享一下就完美啦!如果不便走上面的“流程”,請(qǐng)打賞,萬(wàn)分感謝!
請(qǐng)?zhí)砑由戏轿业暮瞎柔t(yī)療企業(yè)微信,案例文件通過(guò)微信發(fā)送。如有定制需求,亦可通過(guò)微信聯(lián)系。
Excel問(wèn)題,請(qǐng)?jiān)谖恼孪旅媪粞杂懻摚?/span>或者加入我的付費(fèi)知識(shí)星球免費(fèi)提問(wèn)!
聯(lián)系客服