国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

VBA數(shù)組篩選進(jìn)階:超越原生Filter,實(shí)現(xiàn)多條件、多模式與多維數(shù)組處理

VBA數(shù)組篩選進(jìn)階:超越原生Filter,實(shí)現(xiàn)多條件、多模式與多維數(shù)組處理 1. 項(xiàng)目概述從“能用”到“好用”的VBA數(shù)組篩選之路在VBA的日常開發(fā)里處理數(shù)組篩選是家常便飯。系統(tǒng)自帶的Filter函數(shù)用起來確實(shí)順手一句Filter(源數(shù)組, 匹配字符串, 包含, 比較模式)就能快速返回一個(gè)包含子串的結(jié)果數(shù)組。但用久了尤其是在處理稍微復(fù)雜點(diǎn)的數(shù)據(jù)清洗、報(bào)表生成或者自動(dòng)化核對任務(wù)時(shí)它的“脾氣”和“局限”就暴露無遺了。最讓人頭疼的莫過于它只能進(jìn)行基于字符串的“模糊包含”匹配你想按精確相等、數(shù)值范圍、多條件“與/或”邏輯來篩對不起Filter函數(shù)攤攤手表示辦不到。另一個(gè)坑是它的返回結(jié)果永遠(yuǎn)是一維的字符串?dāng)?shù)組如果你的源數(shù)據(jù)是二維的或者里面混著數(shù)字、日期Filter要么報(bào)錯(cuò)要么給你轉(zhuǎn)成字符串后續(xù)處理起來非常別扭。所以當(dāng)項(xiàng)目里又一次因?yàn)镕ilter無法實(shí)現(xiàn)“篩選出金額大于1000且部門為‘銷售部’的記錄”而不得不寫一長串循環(huán)時(shí)我決定不再將就。這次的目標(biāo)很明確自己動(dòng)手寫一個(gè)能完全模仿Filter基礎(chǔ)功能同時(shí)又能突破其核心局限的自定義函數(shù)。它不僅要能處理Filter能做的字符串包含篩選更要搞定Filter做不了的精確匹配、多條件、非字符串?dāng)?shù)據(jù)類型、多維數(shù)組篩選。這不僅僅是再造一個(gè)輪子而是打造一個(gè)更適應(yīng)復(fù)雜現(xiàn)實(shí)場景的“瑞士軍刀”。2. 核心需求與設(shè)計(jì)思路拆解2.1 深入剖析原生Filter函數(shù)的“阿喀琉斯之踵”在動(dòng)手之前必須先把標(biāo)準(zhǔn)Filter函數(shù)的局限性摸透這樣才能有的放矢。它的局限主要體現(xiàn)在四個(gè)方面匹配模式單一且不可控這是最根本的局限。Filter函數(shù)本質(zhì)上是一個(gè)“字符串包含”篩選器。它的Match參數(shù)必須是一個(gè)字符串函數(shù)的行為就是在源數(shù)組的每個(gè)元素中查找是否包含這個(gè)字符串。你無法將其改為“等于”、“以...開頭”、“以...結(jié)尾”或“正則表達(dá)式匹配”。例如你想從數(shù)組[“蘋果”, “香蕉”, “葡萄”]中精確找出“蘋果”用Filter(arr, “蘋果”, True, vbTextCompare)會(huì)把包含“蘋果”字的都找出來如果存在“紅蘋果”也會(huì)被選中而這往往不是我們想要的。數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換與丟失Filter的輸入數(shù)組和輸出數(shù)組都被強(qiáng)制限定為字符串類型Variant/String。如果你傳入一個(gè)包含數(shù)字、日期、布爾值的數(shù)組VBA會(huì)隱式地將它們?nèi)哭D(zhuǎn)換為字符串再進(jìn)行匹配。這會(huì)導(dǎo)致兩個(gè)問題一是精度可能丟失例如數(shù)字123.456可能變成“123.456”二是匹配邏輯變得詭異。比如你想從[123, 234, 345]中篩選出包含“23”的元素Filter會(huì)返回[123, 234]但這本質(zhì)是在字符串“123”和“234”中查找“23”而非數(shù)值比較。更麻煩的是輸出結(jié)果是一個(gè)一維字符串?dāng)?shù)組原始的數(shù)據(jù)類型信息徹底丟失給后續(xù)計(jì)算帶來隱患。無法處理多維數(shù)組Filter函數(shù)只接受一維數(shù)組作為輸入。在實(shí)際業(yè)務(wù)中我們經(jīng)常從Excel的Range.Value屬性直接得到一個(gè)二維數(shù)組或者自己構(gòu)建多維數(shù)組來存儲(chǔ)表格數(shù)據(jù)。面對這樣的數(shù)據(jù)源Filter函數(shù)會(huì)直接拋出“類型不匹配”或“下標(biāo)越界”的錯(cuò)誤迫使開發(fā)者必須先通過循環(huán)將其展平為一維篩選后再重組過程繁瑣且低效。多條件篩選能力缺失現(xiàn)實(shí)場景中的篩選很少是單條件的。Filter函數(shù)一次只能接受一個(gè)匹配字符串和一個(gè)是否包含的邏輯。要實(shí)現(xiàn)“條件A與條件B”或者“條件A或條件B”必須多次調(diào)用Filter并進(jìn)行數(shù)組間的交集或并集操作代碼會(huì)變得冗長且難以維護(hù)。2.2 自定義函數(shù)SuperFilter的頂層設(shè)計(jì)基于以上痛點(diǎn)我設(shè)計(jì)的自定義函數(shù)SuperFilter需要實(shí)現(xiàn)以下核心目標(biāo)功能目標(biāo)兼容模式完全復(fù)刻原生Filter函數(shù)的所有參數(shù)和功能作為保底選項(xiàng)。擴(kuò)展模式提供多種匹配模式精確、開頭、結(jié)尾、包含、正則支持?jǐn)?shù)值/日期等非字符串類型的直接比較。多條件支持允許傳入一個(gè)條件數(shù)組并指定條件間的邏輯關(guān)系A(chǔ)ND 或 OR。多維數(shù)組支持能夠直接處理二維數(shù)組并可以指定按行篩選還是按列篩選返回一個(gè)結(jié)構(gòu)保持的二維子數(shù)組。數(shù)據(jù)類型保持輸出數(shù)組的元素?cái)?shù)據(jù)類型盡量與輸入數(shù)組對應(yīng)元素保持一致。接口設(shè)計(jì)Function SuperFilter(SourceArray As Variant, _ Match As Variant, _ Optional Include As Boolean True, _ Optional Compare As VbCompareMethod vbBinaryCompare, _ Optional MatchMode As String “contains”, _ Optional ConditionLogic As String “AND”, _ Optional Dimension As Long 1) As VariantSourceArray: 源數(shù)組接受一維或二維Variant數(shù)組。Match: 匹配條件。可以是單個(gè)值字符串、數(shù)字、日期等也可以是一個(gè)一維條件數(shù)組。Include: 是否包含。True返回匹配項(xiàng)False返回不匹配項(xiàng)與Filter一致。Compare: 字符串比較模式vbBinaryCompare區(qū)分大小寫或vbTextCompare不區(qū)分。MatchMode: 匹配模式??蛇x“exact”精確、“startswith”開頭、“endswith”結(jié)尾、“contains”包含默認(rèn)、“regex”正則表達(dá)式。ConditionLogic: 當(dāng)Match為數(shù)組時(shí)條件間的邏輯。“AND”所有條件都滿足或“OR”任一條件滿足。Dimension: 對二維數(shù)組的篩選維度。1表示按行篩選返回符合條件的整行2表示按列篩選。內(nèi)部邏輯流程輸入驗(yàn)證與初始化檢查SourceArray是否是數(shù)組判斷其維數(shù)。根據(jù)維數(shù)和Dimension參數(shù)確定循環(huán)遍歷的方式是遍歷行還是列。條件預(yù)處理將Match參數(shù)統(tǒng)一處理為一個(gè)條件數(shù)組condArr()并確定匹配模式MatchMode。如果是多條件需明確ConditionLogic。核心遍歷與匹配判斷遍歷源數(shù)組的每一個(gè)目標(biāo)元素可能是一行、一列或一個(gè)單元素。對每個(gè)元素根據(jù)MatchMode調(diào)用對應(yīng)的匹配判斷函數(shù)并結(jié)合ConditionLogic計(jì)算最終是否匹配。結(jié)果收集與數(shù)組構(gòu)建動(dòng)態(tài)收集所有匹配項(xiàng)的索引。遍歷結(jié)束后根據(jù)收集的索引從源數(shù)組中提取對應(yīng)元素/行/列構(gòu)建一個(gè)新的、結(jié)構(gòu)正確的Variant數(shù)組作為結(jié)果返回。錯(cuò)誤處理在整個(gè)過程中加入必要的錯(cuò)誤捕獲例如無效的匹配模式、維度參數(shù)錯(cuò)誤、正則表達(dá)式編譯失敗等并返回一個(gè)可識(shí)別的錯(cuò)誤值如Empty數(shù)組或拋出描述性錯(cuò)誤。3. 核心細(xì)節(jié)解析與關(guān)鍵技術(shù)實(shí)現(xiàn)3.1 多模式匹配引擎的實(shí)現(xiàn)這是SuperFilter函數(shù)的核心也是與原生Filter最大的區(qū)別。我們需要一個(gè)統(tǒng)一的判斷函數(shù)它能根據(jù)MatchMode參數(shù)采用不同的邏輯進(jìn)行比較。首先定義一個(gè)內(nèi)部幫助函數(shù)IsMatchPrivate Function IsMatch(ByVal SourceValue As Variant, _ ByVal ConditionValue As Variant, _ ByVal MatchMode As String, _ ByVal CompareMethod As VbCompareMethod) As Boolean ‘ 處理空值情況 If IsEmpty(SourceValue) Or IsEmpty(ConditionValue) Then IsMatch False Exit Function End If Dim srcStr As String, condStr As String Dim regex As Object On Error GoTo ErrorHandler Select Case LCase(Trim(MatchMode)) Case “exact” ‘精確匹配 If VarType(SourceValue) vbString And VarType(ConditionValue) vbString Then IsMatch (StrComp(SourceValue, ConditionValue, CompareMethod) 0) Else ‘ 非字符串類型使用等號(hào)直接比較注意Variant的比較方式 IsMatch (SourceValue ConditionValue) End If Case “startswith” ‘開頭匹配 srcStr CStr(SourceValue) condStr CStr(ConditionValue) If CompareMethod vbTextCompare Then IsMatch (InStr(1, srcStr, condStr, vbTextCompare) 1) Else IsMatch (Left(srcStr, Len(condStr)) condStr) End If Case “endswith” ‘結(jié)尾匹配 srcStr CStr(SourceValue) condStr CStr(ConditionValue) If CompareMethod vbTextCompare Then ‘ 通過StrComp比較末尾部分稍微復(fù)雜一點(diǎn) IsMatch (StrComp(Right(srcStr, Len(condStr)), condStr, CompareMethod) 0) Else IsMatch (Right(srcStr, Len(condStr)) condStr) End If Case “contains” ‘包含匹配 (模擬原生Filter) srcStr CStr(SourceValue) condStr CStr(ConditionValue) IsMatch (InStr(1, srcStr, condStr, CompareMethod) 0) Case “regex” ‘正則表達(dá)式匹配 Set regex CreateObject(“VBScript.RegExp”) regex.Pattern CStr(ConditionValue) regex.IgnoreCase (CompareMethod vbTextCompare) regex.Global False IsMatch regex.Test(CStr(SourceValue)) Set regex Nothing Case Else ‘ 默認(rèn)使用包含匹配 srcStr CStr(SourceValue) condStr CStr(ConditionValue) IsMatch (InStr(1, srcStr, condStr, CompareMethod) 0) End Select Exit Function ErrorHandler: ‘ 例如正則表達(dá)式模式無效 IsMatch False End Function關(guān)鍵點(diǎn)與避坑指南數(shù)據(jù)類型處理在“exact”模式下我們優(yōu)先判斷是否為字符串是則用StrComp函數(shù)以支持大小寫敏感控制否則直接用等號(hào)比較。這比原生Filter全部轉(zhuǎn)字符串更合理。性能考量正則表達(dá)式對象的創(chuàng)建和銷毀CreateObject和Set regex Nothing有一定開銷。如果在一個(gè)大數(shù)據(jù)集的循環(huán)中頻繁使用“regex”模式會(huì)成為性能瓶頸??梢钥紤]將正則對象創(chuàng)建移到主函數(shù)中作為可選參數(shù)傳入但會(huì)增大接口復(fù)雜度。對于一般應(yīng)用在IsMatch內(nèi)部創(chuàng)建是清晰簡單的做法??罩堤幚鞩sEmpty判斷至關(guān)重要。VBA數(shù)組中經(jīng)常存在Empty值直接對其進(jìn)行字符串轉(zhuǎn)換或比較可能導(dǎo)致類型不匹配錯(cuò)誤。這里選擇將任何一方為Empty的匹配直接判定為False邏輯上更安全。3.2 動(dòng)態(tài)數(shù)組構(gòu)建與結(jié)果收集策略原生Filter函數(shù)內(nèi)部知道結(jié)果數(shù)量可以直接分配一個(gè)大小合適的數(shù)組。我們的自定義函數(shù)在遍歷完成前無法預(yù)知有多少項(xiàng)符合條件。因此需要一種動(dòng)態(tài)收集匹配項(xiàng)索引或引用最后再構(gòu)建結(jié)果數(shù)組的策略。我采用了Collection對象作為中間容器來收集匹配行的索引對于一維數(shù)組或匹配行的索引數(shù)組對于二維數(shù)組按行篩選。Collection在VBA中對于動(dòng)態(tài)增刪非常高效?!?假設(shè)我們已經(jīng)確定是二維數(shù)組按行篩選 (Dimension 1) Dim matchedRows As New Collection Dim i As Long, j As Long Dim rowMatchesAllConditions As Boolean Dim conditionArr As Variant ‘ 假設(shè)這是處理好的條件數(shù)組 Dim matchModeStr As String ‘ 假設(shè)這是匹配模式 For i LBound(SourceArray, 1) To UBound(SourceArray, 1) ‘ 遍歷每一行 rowMatchesAllConditions True ‘ 假設(shè)初始匹配用于AND邏輯 ‘ 對于當(dāng)前行檢查所有條件 For j LBound(conditionArr) To UBound(conditionArr) ‘ 這里需要根據(jù)條件與行的對應(yīng)關(guān)系進(jìn)行比較可能只比較特定列 ‘ 假設(shè)條件數(shù)組的每個(gè)元素是一個(gè)結(jié)構(gòu)體或數(shù)組包含“比較值”和“比較列索引” ‘ 這里簡化為直接比較當(dāng)前行的第一列與條件值 If Not IsMatch(SourceArray(i, 1), conditionArr(j), matchModeStr, Compare) Then If ConditionLogic “AND” Then rowMatchesAllConditions False Exit For ‘ AND邏輯下一個(gè)條件不滿足整行就不滿足 End If Else If ConditionLogic “OR” Then rowMatchesAllConditions True Exit For ‘ OR邏輯下一個(gè)條件滿足整行就滿足 End If End If Next j ‘ 根據(jù)Include參數(shù)和匹配結(jié)果決定是否收集 If (rowMatchesAllConditions And Include) Or (Not rowMatchesAllConditions And Not Include) Then matchedRows.Add i ‘ 收集行號(hào) End If Next i遍歷結(jié)束后matchedRows這個(gè)Collection里就存放了所有符合條件的行號(hào)。接下來根據(jù)這個(gè)行號(hào)集合來構(gòu)建結(jié)果數(shù)組If matchedRows.Count 0 Then ‘ 沒有匹配項(xiàng)返回一個(gè)空的數(shù)組 SuperFilter Array() ‘ 返回一個(gè)包含0個(gè)元素的數(shù)組 Else ‘ 根據(jù)源數(shù)組的維度和篩選維度構(gòu)建結(jié)果數(shù)組 Dim resultArr() As Variant Dim targetRowIndex As Long, srcRowIndex As Long Dim colCount As Long ‘ 計(jì)算列數(shù)對于按行篩選 colCount UBound(SourceArray, 2) - LBound(SourceArray, 2) 1 ‘ 重新定義結(jié)果數(shù)組的大小 ReDim resultArr(1 To matchedRows.Count, 1 To colCount) targetRowIndex 1 For Each srcRowIndex In matchedRows ‘ 遍歷收集到的行號(hào) For j 1 To colCount ‘ 復(fù)制數(shù)據(jù)保持原數(shù)據(jù)類型 resultArr(targetRowIndex, j) SourceArray(srcRowIndex, j) Next j targetRowIndex targetRowIndex 1 Next srcRowIndex SuperFilter resultArr End If實(shí)操心得使用Collection而非ReDim Preserve在循環(huán)內(nèi)部頻繁使用ReDim Preserve來擴(kuò)大數(shù)組是非常低效的因?yàn)槊看蜳reserveVBA都需要在內(nèi)存中創(chuàng)建一個(gè)新的更大數(shù)組并復(fù)制所有舊數(shù)據(jù)。Collection的.Add方法在動(dòng)態(tài)增長方面性能好得多。明確數(shù)組下界VBA數(shù)組默認(rèn)下界可能是0也可能是1取決于如何聲明和賦值。使用LBound和UBound函數(shù)始終是最安全的做法能確保代碼的健壯性。返回空數(shù)組的處理當(dāng)沒有匹配項(xiàng)時(shí)返回Array()一個(gè)長度為0的數(shù)組比返回Null或Empty更友好。調(diào)用方可以用If UBound(SuperFilter(...)) LBound(SuperFilter(...)) Then來判斷是否有結(jié)果這與處理原生Filter的結(jié)果習(xí)慣一致。4. 完整實(shí)現(xiàn)與代碼剖析下面是將上述思路整合后的SuperFilter函數(shù)的一個(gè)相對完整的簡化版本重點(diǎn)展示架構(gòu)和邏輯。實(shí)際版本可能包含更多錯(cuò)誤處理和邊界情況判斷。Option Explicit ‘ 定義匹配模式枚舉使代碼更易讀實(shí)際使用字符串也可 ‘ Private Enum MatchModes: mmExact: mmStartsWith: mmEndsWith: mmContains: mmRegex: End Enum Function SuperFilter(SourceArray As Variant, _ Match As Variant, _ Optional Include As Boolean True, _ Optional Compare As VbCompareMethod vbBinaryCompare, _ Optional MatchMode As String “contains”, _ Optional ConditionLogic As String “AND”, _ Optional Dimension As Long 1) As Variant ‘ —————————— 1. 參數(shù)驗(yàn)證與初始化 —————————— If Not IsArray(SourceArray) Then Err.Raise 13, “SuperFilter”, “SourceArray 必須是一個(gè)數(shù)組?!?End If Dim numDims As Long numDims GetArrayDimensions(SourceArray) ‘ 自定義函數(shù)獲取數(shù)組維數(shù) If numDims 2 Then Err.Raise 5, “SuperFilter”, “暫不支持二維以上的數(shù)組?!?End If ‘ 統(tǒng)一將Match轉(zhuǎn)換為數(shù)組方便后續(xù)處理 Dim conditionArr() As Variant If IsArray(Match) Then conditionArr Match Else ReDim conditionArr(0 To 0) conditionArr(0) Match End If ‘ 驗(yàn)證MatchMode MatchMode LCase(Trim(MatchMode)) If Not (MatchMode “exact” Or MatchMode “startswith” Or _ MatchMode “endswith” Or MatchMode “contains” Or MatchMode “regex”) Then MatchMode “contains” ‘ 默認(rèn)回退到包含模式 End If ‘ —————————— 2. 分派到不同的處理流程 —————————— Dim result As Variant If numDims 1 Then result SuperFilter1D(SourceArray, conditionArr, Include, Compare, MatchMode, ConditionLogic) Else ‘ numDims 2 If Dimension 1 And Dimension 2 Then Dimension 1 result SuperFilter2D(SourceArray, conditionArr, Include, Compare, MatchMode, ConditionLogic, Dimension) End If SuperFilter result End Function ‘ 處理一維數(shù)組的核心私有函數(shù) Private Function SuperFilter1D(SourceArr As Variant, _ ConditionArr As Variant, _ Include As Boolean, _ Compare As VbCompareMethod, _ MatchMode As String, _ ConditionLogic As String) As Variant Dim matchedIndices As New Collection Dim i As Long, c As Long Dim elem As Variant Dim conditionMet As Boolean For i LBound(SourceArr) To UBound(SourceArr) elem SourceArr(i) conditionMet EvaluateConditions(elem, ConditionArr, MatchMode, Compare, ConditionLogic) If (conditionMet And Include) Or (Not conditionMet And Not Include) Then matchedIndices.Add i End If Next i ‘ 構(gòu)建結(jié)果數(shù)組 If matchedIndices.Count 0 Then SuperFilter1D Array() Else Dim result() As Variant ReDim result(LBound(SourceArr) To LBound(SourceArr) matchedIndices.Count - 1) ‘ 注意這里簡化了實(shí)際應(yīng)處理下界可能為0的情況 Dim idx As Long, pos As Long pos LBound(result) For Each idx In matchedIndices result(pos) SourceArr(idx) pos pos 1 Next idx SuperFilter1D result End If End Function ‘ 處理二維數(shù)組的核心私有函數(shù) (按行篩選示例) Private Function SuperFilter2D(SourceArr As Variant, _ ConditionArr As Variant, _ Include As Boolean, _ Compare As VbCompareMethod, _ MatchMode As String, _ ConditionLogic As String, _ ByVal Dimension As Long) As Variant ‘ 實(shí)現(xiàn)邏輯與上文“動(dòng)態(tài)數(shù)組構(gòu)建”示例類似遍歷行/列使用EvaluateConditions判斷整行/列是否滿足條件 ‘ 此處省略詳細(xì)代碼結(jié)構(gòu)同SuperFilter1D但內(nèi)部循環(huán)和結(jié)果數(shù)組構(gòu)建是二維的。 ‘ ... ‘ 返回一個(gè)二維Variant數(shù)組或空數(shù)組 End Function ‘ 評估單個(gè)源值 against 一組條件的私有函數(shù) Private Function EvaluateConditions(SourceValue As Variant, _ ConditionArr As Variant, _ MatchMode As String, _ Compare As VbCompareMethod, _ ConditionLogic As String) As Boolean Dim j As Long Dim condMet As Boolean Dim overallResult As Boolean If ConditionLogic “AND” Then overallResult True ‘ AND邏輯初始為真遇到一個(gè)假則變假 For j LBound(ConditionArr) To UBound(ConditionArr) If Not IsMatch(SourceValue, ConditionArr(j), MatchMode, Compare) Then overallResult False Exit For End If Next j Else ‘ “OR” 邏輯 overallResult False ‘ OR邏輯初始為假遇到一個(gè)真則變真 For j LBound(ConditionArr) To UBound(ConditionArr) If IsMatch(SourceValue, ConditionArr(j), MatchMode, Compare) Then overallResult True Exit For End If Next j End If EvaluateConditions overallResult End Function ‘ 獲取數(shù)組維數(shù)的幫助函數(shù) Private Function GetArrayDimensions(arr As Variant) As Long On Error Resume Next Dim dims As Long dims 0 Do dims dims 1 Err.Clear Dim lb As Long lb LBound(arr, dims) If Err.Number 0 Then Exit Do Loop GetArrayDimensions dims - 1 End Function代碼設(shè)計(jì)要點(diǎn)模塊化將一維和二維數(shù)組的處理拆分成獨(dú)立的私有函數(shù)SuperFilter1D和SuperFilter2D主函數(shù)只負(fù)責(zé)路由和基礎(chǔ)驗(yàn)證。這使得代碼結(jié)構(gòu)清晰易于維護(hù)和調(diào)試。條件評估分離EvaluateConditions函數(shù)專門負(fù)責(zé)根據(jù)ConditionLogicAND/OR來綜合多個(gè)條件的判斷結(jié)果。IsMatch函數(shù)前面已定義則負(fù)責(zé)最底層的單個(gè)值比較。這種分層設(shè)計(jì)符合單一職責(zé)原則。健壯性開頭進(jìn)行了必要的參數(shù)驗(yàn)證并使用Err.Raise拋出清晰的錯(cuò)誤方便調(diào)用者調(diào)試。GetArrayDimensions函數(shù)優(yōu)雅地處理了獲取未知數(shù)組維數(shù)的問題。5. 實(shí)戰(zhàn)應(yīng)用與性能優(yōu)化探討5.1 典型使用場景示例假設(shè)我們有一個(gè)從Excel表格讀取的二維數(shù)組data結(jié)構(gòu)如下姓名部門銷售額日期張三銷售部15002023/10/1李四技術(shù)部8002023/10/2王五銷售部22002023/10/1趙六市場部12002023/10/3‘ 場景1精確篩選部門為“銷售部”的所有行原生Filter做不到 Dim result1 As Variant result1 SuperFilter(data, “銷售部”, True, vbTextCompare, “exact”, , 1) ‘ 結(jié)果將是一個(gè)包含張三和王五兩行的二維數(shù)組。 ‘ 場景2多條件AND篩選銷售部且銷售額大于1000 ‘ 假設(shè)我們構(gòu)建一個(gè)條件數(shù)組每個(gè)條件是一個(gè)包含“比較值”和“比較列索引”的數(shù)組。 ‘ 這里簡化演示假設(shè)我們分別對第2列部門和第3列銷售額進(jìn)行篩選。 ‘ 注意對于數(shù)值比較MatchMode用”exact”并不合適實(shí)際需要擴(kuò)展MatchMode支持”greaterthan”等。 ‘ 一種變通方法是使用正則表達(dá)式或直接在EvaluateConditions中寫特殊邏輯。 ‘ 更優(yōu)雅的設(shè)計(jì)是允許Match為對象數(shù)組或自定義類型數(shù)組包含比較運(yùn)算符。 ‘ 本例展示思路 Dim conditions(1) As Variant conditions(0) Array(“銷售部”, 2) ‘ 第2列等于“銷售部” conditions(1) Array(“^([1-9]\d{3,}|[2-9]\d\d\d)$”, 3) ‘ 第3列匹配正則大于等于1000的數(shù)字字符串形式 ‘ 這里需要自定義IsMatch函數(shù)能識(shí)別這種結(jié)構(gòu)化的條件并解析。 ‘ 這展示了SuperFilter框架的擴(kuò)展性。 ‘ 場景3篩選日期為2023/10/1的記錄原生Filter會(huì)將其轉(zhuǎn)為字符串再匹配不可靠 Dim result3 As Variant result3 SuperFilter(data, #10/1/2023#, True, vbBinaryCompare, “exact”, , 1) ‘ 直接使用日期類型進(jìn)行精確匹配可靠。 ‘ 場景4反向篩選Include:False排除所有部門名稱中包含“部”字的行模擬原生Filter Dim result4 As Variant result4 SuperFilter(data, “部”, False, vbTextCompare, “contains”, , 1) ‘ 返回部門名不包含“部”的行可能為空。5.2 性能瓶頸分析與優(yōu)化建議自定義函數(shù)在帶來靈活性的同時(shí)必然會(huì)在性能上有所犧牲尤其是與高度優(yōu)化的原生函數(shù)相比。SuperFilter的主要性能開銷在雙層循環(huán)對于二維數(shù)組的多條件篩選是O(m*n)的復(fù)雜度m行*n條件。當(dāng)數(shù)據(jù)量巨大數(shù)萬行時(shí)循環(huán)本身會(huì)成為瓶頸。頻繁的類型判斷與函數(shù)調(diào)用在循環(huán)內(nèi)部每次比較都要調(diào)用IsMatch內(nèi)部還有Select Case、StrComp、InStr甚至CreateObject正則等操作。Variant類型操作Variant是VBA中開銷最大的數(shù)據(jù)類型頻繁的讀取、賦值和比較會(huì)比明確類型的變量慢。優(yōu)化策略提前進(jìn)行類型判斷和轉(zhuǎn)換如果事先知道某列全是數(shù)字或日期可以在主循環(huán)外進(jìn)行類型判斷并在IsMatch函數(shù)中為這種類型實(shí)現(xiàn)快速路徑避免每次都進(jìn)行VarType判斷和CStr轉(zhuǎn)換。使用靜態(tài)正則對象如果匹配模式是“regex”且模式不變可以在模塊級(jí)別聲明一個(gè)靜態(tài)的RegExp對象在函數(shù)中重復(fù)使用避免反復(fù)創(chuàng)建銷毀。針對純字符串一維數(shù)組的快速路徑如果檢測到輸入是一維字符串?dāng)?shù)組且匹配模式是“contains”可以退化到使用原生Filter函數(shù)進(jìn)行第一步快速篩選然后再對結(jié)果應(yīng)用其他條件或處理。這相當(dāng)于用原生函數(shù)做了一次預(yù)過濾。限制條件數(shù)量在業(yè)務(wù)邏輯允許的情況下盡量減少單次篩選的條件數(shù)量。將最嚴(yán)格、最能過濾掉數(shù)據(jù)的條件放在前面判斷可以提前退出循環(huán)對于AND邏輯。數(shù)組切片與內(nèi)存操作對于超大規(guī)模數(shù)據(jù)可以考慮借助Windows API調(diào)用或編寫C DLL來實(shí)現(xiàn)內(nèi)存塊的高效比較但這大大增加了復(fù)雜度僅適用于極端性能場景。注意對于絕大多數(shù)Office VBA應(yīng)用場景數(shù)據(jù)處理量在幾千到幾萬行上述SuperFilter函數(shù)的性能是完全可接受的。優(yōu)化時(shí)應(yīng)遵循“先測量后優(yōu)化”的原則用Timer函數(shù)定位真正的熱點(diǎn)避免過度設(shè)計(jì)。6. 常見問題與排查技巧實(shí)錄在實(shí)際使用和調(diào)試SuperFilter函數(shù)的過程中我遇到了不少典型問題。這里記錄一下方便大家避坑。問題1函數(shù)返回#VALUE!錯(cuò)誤或運(yùn)行時(shí)錯(cuò)誤‘13’類型不匹配。排查思路檢查源數(shù)組確保傳入的SourceArray確實(shí)是一個(gè)數(shù)組。有時(shí)從某個(gè)可能返回單值的函數(shù)獲取數(shù)據(jù)需要先判斷IsArray()。檢查條件值類型當(dāng)使用“exact”模式比較數(shù)字和字符串時(shí)“123”和123是不相等的。確保你的Match參數(shù)類型與數(shù)組中對應(yīng)元素的類型一致或理解這種差異。二維數(shù)組的維度參數(shù)確保對二維數(shù)組調(diào)用時(shí)Dimension參數(shù)只傳了1或2。傳了0或3會(huì)導(dǎo)致后續(xù)計(jì)算索引時(shí)出錯(cuò)。正則表達(dá)式模式無效當(dāng)MatchMode為“regex”時(shí)如果傳入的匹配字符串不是有效的正則表達(dá)式regex.Test會(huì)出錯(cuò)。確保在IsMatch函數(shù)中做好了錯(cuò)誤捕獲。問題2篩選結(jié)果為空但明明覺得應(yīng)該有數(shù)據(jù)。排查思路字符串比較模式Compare參數(shù)這是最常見的原因。vbBinaryCompare區(qū)分大小寫”Apple”和”apple”不匹配。vbTextCompare不區(qū)分。檢查你的數(shù)據(jù)大小寫和參數(shù)設(shè)置。匹配模式MatchMode理解錯(cuò)誤想要精確匹配卻用了默認(rèn)的“contains”。仔細(xì)核對MatchMode參數(shù)。前后空格數(shù)據(jù)中可能存在肉眼不易察覺的首尾空格。使用Trim函數(shù)清洗源數(shù)據(jù)或條件值。可以在IsMatch函數(shù)內(nèi)部對字符串比較加入自動(dòng)Trim的選項(xiàng)但需注意對于精確匹配有時(shí)空格是有意義的。多條件邏輯ConditionLogic錯(cuò)誤誤將“OR”邏輯當(dāng)作“AND”使用或者反之。理清業(yè)務(wù)邏輯。Include參數(shù)理解反了Include:False是返回不匹配的項(xiàng)。確認(rèn)你是否想要的是排除。問題3處理大量數(shù)據(jù)時(shí)速度非常慢。排查思路啟用屏幕更新和計(jì)算關(guān)閉如果是在Excel中循環(huán)調(diào)用該函數(shù)處理大量單元格確保在代碼開頭設(shè)置了Application.ScreenUpdating False和Application.Calculation xlCalculationManual處理完再恢復(fù)。檢查是否在循環(huán)中重復(fù)調(diào)用函數(shù)避免在For Each循環(huán)中針對每一行數(shù)據(jù)都調(diào)用一次SuperFilter。應(yīng)該一次性將整個(gè)數(shù)據(jù)區(qū)域裝入數(shù)組用SuperFilter處理這個(gè)數(shù)組最后將結(jié)果一次性寫回工作表。這是VBA操作數(shù)據(jù)的黃金準(zhǔn)則盡量減少VBA與工作表之間的交互。審視匹配模式是否不必要地使用了開銷巨大的“regex”模式如果只是簡單匹配換成“exact”或“contains”會(huì)快很多。數(shù)據(jù)量是否真的超出了VBA處理范圍如果數(shù)組有幾十萬行VBA循環(huán)本身就會(huì)很慢??紤]是否能在數(shù)據(jù)庫層面如Access、SQL Server進(jìn)行篩選或者使用Power Query進(jìn)行處理。問題4如何篩選“大于某個(gè)數(shù)值”或“介于某兩個(gè)日期之間”這類范圍條件解決方案當(dāng)前的SuperFilter框架主要通過MatchMode支持文本匹配模式。為了支持?jǐn)?shù)值/日期比較最整潔的擴(kuò)展方式是修改Match參數(shù)和IsMatch函數(shù)的設(shè)計(jì)。方案A快速但不優(yōu)雅將MatchMode擴(kuò)展增加“gt”大于、“l(fā)t”小于、“gte”大于等于、“l(fā)te”小于等于、“between”介于等模式。此時(shí)Match參數(shù)可能需要是一個(gè)兩元素?cái)?shù)組來表示范圍。這需要修改IsMatch函數(shù)來支持這些新的比較運(yùn)算符。方案B更靈活允許Match參數(shù)傳入一個(gè)自定義的回調(diào)函數(shù)函數(shù)指針。在IsMatch中如果發(fā)現(xiàn)Match是一個(gè)函數(shù)則調(diào)用這個(gè)函數(shù)來進(jìn)行判斷。這樣用戶可以將任何復(fù)雜的比較邏輯寫成一個(gè)獨(dú)立的函數(shù)傳入。這是最強(qiáng)大但也對使用者要求最高的方式。方案C實(shí)用折中對于簡單的范圍篩選可以結(jié)合使用Include:False。例如要篩選銷售額大于1000的可以先篩選出小于等于1000的然后取反。但這對于“介于兩者之間”這樣的條件就有點(diǎn)繞。最終我選擇了在內(nèi)部預(yù)留了擴(kuò)展接口但當(dāng)前版本主要優(yōu)化了字符串和精確匹配的通用場景。對于復(fù)雜的數(shù)值比較我通常建議使用方案C的變通方法或者直接在調(diào)用SuperFilter之前用簡單的數(shù)組循環(huán)預(yù)處理出一個(gè)標(biāo)志列然后再用SuperFilter進(jìn)行篩選。工具不是萬能的在復(fù)雜場景下組合使用多種方法往往是最佳實(shí)踐。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
被操高清无码视频| 欧美日韩性爱视屏免费看了| 视频二区美腿制服人妻欧美| 少妇极品熟妇人妻无码| 男人天堂导航| 欧美性爱视频免费一区一A| 日本 欧美 亚中文字幕| 亚欧美综合网。| 伊人网在线点播| 伊人久久大香线蕉无码| 性色乱AV一区二区| 少妇淫妇久久久久久久| 久久婷婷精品| 精品玖九九久| 一区二区三区在线资源| 青草精品视频一日本久久久久网站| 青草草免费网站av| 亚洲色综网| 国产无马视频| 久久久久久久六六| 中国国国产一级特黄毛片| 日韩美脚一区二区网站| 国产无码三级视频在线观看| 看黑丝美女操逼青青网站| 国产久久久久久| 久久久久精| 性色A∨91| 黑操B| 久操视频在线| 岛国片在线观看视频亚洲| 国产精品伦理| 后入内射蜜桃臀| 一本色道综合久久欧美| 青青草在线视频美女| 91色久| 亚洲乱妇p22| 亚洲情色1区| 成人一级性爱| 亚洲欧洲无码bt精品合集| 九九国产| 开心五月深爱五月| 一区操逼日比视频| 97色色色| 蜜臀99久久精品| 91oumei| 韩国一级婬片A片无码天美| 99热婷婷一区二区三| 亚洲欧美天堂在线| av天天在线观看| 一类av片在线看| 国产馆| 97久久免费| 精品-91人妻子系列| 国产传媒午夜理伦精品| 高清国产无码av| 欧亚日韩中文在线| 天天噜| 日韩色香| 91熟女视频| 亚洲中文字幕熟女少妇一区二区| 密乳AV免费观看| 啊啊啊想要| 美女啊啊啊啊啊啊| 天天影视之亚洲综合网| av爱爱爱| 97爱免费插| 日韩国产欧美伦理在线| 无码视频一区二区| 91爱综合| 深夜国产一区二区三区在线看| 亚洲成人美女无吗| 色黄污美女啪啪啪免费网站| 亚洲欧美经典一区二区| 中美日韩毛片| 国产97av| 大香蕉九九| 欧美97日韩精品| 午夜亚洲国产理论秋霞| 国产av白丝| 色吧5亚洲| 天堂岛av| 色欲天天综合久久久无码网中文| 91操操| 9I1性色影院| 成人福利视频网| 大屁股国产在线视频| 亚洲一级特黄大片在线播放91| 欧美日韩国产传媒在线精品| 欧美18老人禁| 亚洲精品97在线| a片在线播放| 久久夜嗨| 免费操逼视频下载| 玖玖无码超碰| 亚洲va综合va国产va中文| 外国91| http://qxhbdz.com| 丰满人妻一区二区三区性色| 少妇三P| 97精品综合久久| 91国产丝袜白虎| 极品粉嫩一区二区| 91在线精品一区二区三区| 青青草十区九区爱夜| 国产精品自拍欧美在线| 亚洲男人天堂视频| AV天堂电影网| 国产在线视频二区| 人妻少妇无码 | 老熟女综合网 | 伊人久久国产免费观看视频| 人人干黄色| 人人九九精| 懂色综合久久久| 色欲人妻一区二区在线| 麻豆国产精品午夜视频| 欧美色亚洲色| 高清不卡视频| 五月婷婷综合激情| 东京热视频网| 精品人妻一区二区三区四区| 金典av| 国产精品一区二区黄片| 日韩乱伦AⅤ| 一卡二卡在线播放| 欧美性Fer办公室秘书| 天天爱天天韩国日本牛牛牛牛| 中文字幕天堂在线| 丝袜美腿91| 一区二区国产视频在线观看| 国产自产91区13区| 国产又粗又长又爽又色| 俺去俺来也在线www| 欧美激情综合| 日韩肏逼视频| 九九九九一区| 日韩干B| 97操综合| 97欧美色资源| 使劲用力艹少妇视频一区二区 | 丁香九月婷婷| 欧美精品三级黄片| 午夜操操操| 久久久96精品| 啊啊啊不要好爽日韩无码一区| 91超碰人人| 色婷婷五月天| 伊人久久88国产女| 美女露胸露奶头| 熟妇人妻精品一区二区视频色欲| 丝袜制服字幕在线| 欧美日不卡| 麻豆人妻精品一区二区| www久久99| 五月天色图| 裸体美女免费看网站青草| 国产日本久久免费精品| 人妻熟女字幕一区二区| 日本岛国黄色网址| 欧美激情综合| 欧美乱色| 色色99| 97精品视频在线| 亚洲综合草草| 桃花色综合影院| 欧美爆乳精品一区二区| 亚洲欧洲综合成人av一区| 国产精品久久久久久片| 抽插无码高清一区| 欧美中文字幕男人天堂久久精品 | jizzjizz欧美| 国产 日韩 另类 视频一区爱| 色婷五月天| 午夜福利在线视频1000| 国产精品色| 99久久婷婷丁香| 欧美精品日韩久久久九 | 97超久碰| 91精品国久久久久久无码| 91是天天| 免费网站观看www在线观| 国产精品久久久久久夜夜夜| 国产精品久久久视频| 欧美性特| 男人干美女| 国产精品久久久久久久免牛肉蒲团 | 久久少妇| 国产无马在线| 国产aⅴ无码片毛片一级网站| 国产女人高潮嗷嗷嗷叫小说| 久操网无码在线| 亚洲AV无码成人精品久久| 97超碰国产亚洲精品| 2017天天透天天通天天擦| 青青草原伊人网| 欧美日韩人妻精品系列一区二区三区| 男人天堂新在线| 亚洲精品性爱片| 9l视频自拍9l九色成人| 中文字幕 av v| 天天热精品| 在线洲亚线| A级片日韩欧美国产欧美视频精选观看 | 国产九月婷婷| 男人下部插入女人下部| 丝袜av一区二区三区| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 思思视频免费看网站| 成人网欧美风情| 精品一区二区三区18| 探花精品视频| 懂色Av一区二区三区| 91蜜桃传媒精品久久久一区二区| 日本女人操逼| 91精品人妻电影| 色吧91| 91久久婷婷| 亚洲色入欧美| 亚洲图片91| 立川理惠被中出无码| 影音先锋视频在线| 欧美综合亚洲| 精品国产三级av韩国在线| 大香蕉男人的天堂| 91色碰| 亚州图片第一页| 久久久久久久伊人精品| 国产黄色影片在线观看| 久久AV色| 大香交伊人网| 日韩不卡一二三四| 亚洲自拍偷拍视频在线| 欧美久热| 欧美色道啊| 日韩有码 一区二区三区| 伊人99热| 欧美小说区视频区| 这里只有精品视频在线观看麻豆| www.四虎在线| 久久久夜夜夜| 色情五月综合婷婷| 午夜操操操| 波多野结衣一级视频| 久9久| 97精品全部| 91成人在线免费视频| 久久亚洲天天做| 欧美色www亚洲国产阿娇要播| 国产成人无码久久精品| 色69大色97香蕉| 亚洲AV噜噜狠狠网址蜜桃动漫| 色噜噜狠狠色综无码久久合欧美| 97国产天堂岛| 嫩草在线视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 久久久久久波多野吉衣高潮| 97在线亚洲| 日本色色色网站免费看不卡| 静品嫩模一区二区| 青青草色插素人| 亚洲欧美另类图片| wwwxxx日本爽| 成人a大片在线观看| 99热久| 人妻精品一区二区在线| 黄色免费网| 亚洲黄色电影| 亚洲情色一区三区| 亚洲一区中文精品| 五月丁香在线| 婷婷五月天福利| 亚洲精品久久一区二区三区蜜桃臀| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 久久 久久国内精品亚洲| 97高清啪啪| 爆乳免费黄网站| 人妻熟女一区在| 人妻AV在线| 九九热精品| 激情五月丁香五月| 欧美成人精品A片免费一区99| 91天堂色男人的天堂| 日韩色欲久久一二三四区| 波多野结衣先锋影音| 天天草夜夜草高潮片| 免费又黄又裸乳的视频| 日韩欧美中文| 人人射人人操人人摸| 色综合久| 加勒比无码一区二区三区| 激情婷婷丁香| 久久精彩视频9| 97自拍一区| 偷拍片久久| 欧美激情 亚洲色图| 91欧美网| ji熟女.com| 欧美丝袜制服久久| AV综合中文字幕干| 操人妻丝袜高跟| 一区| 亚洲高潮影院| 四虎午夜影院| 亚洲一卡2卡3卡4卡乱码网站| 97av在线视频| 国产毛片片精品天天看视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 成人欧美日超碰| 自拍偷拍草一草| 欧美午夜精品久久久久久3D| 亚洲麻豆18发?| 国产成人精品必看 | 久久婷婷欧美| 日韩天天本| 啊啊啊啊啊啊啊啊要喷了| 国产视频一区二区免费| 欧美色图人妻| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美成年人性爱视频免费观看| 思思热一热婷婷热一热| 国内毛片热久久思思热| 久久亚洲AV无码专区首页| 91精品久久久久久77777| 国产一区麻豆免费观看| 久久久月天| a片久久久久久久久久久久 | 欧美九九爱| 久久9精品网站| 国产精品午夜福利亚洲综合网| 自拍鲍鱼一区在线高清观看免费| 九九九九日本 | 丁香色色网| 久久久久久中文版| 清纯唯美亚洲综合| 亚洲福利中文字幕在线| 超碰天天久久79| 亚洲欧美高清| 婷婷五月天基地| 99热18这里只有精品| www.色吧5.com| 91色艳| 97超碰欧美精品| 亚洲中文字母在线播放| 欧美成人色| 日本人妻最新在线中| 99精品在线| 日本幼女18+| 91久久久久久久久18| 青青欧美| 欧美图片色五月天| 91黑丝少妇| 国模限制级电影| 久热91| 日韩国产乱子伦App| 99re免费| 国产性感骚丝袜在线| 国产色产精品在线观看| 啊嗯好大视频在线观看| 亚洲熟女性高潮久久久| 热久久99999| 激情文学亚洲| 男女真人网18| 久9久| 欧美性爱97超碰| 成人免费毛片| 蜜桃不卡一区二区| 国产精品不卡高清在线观看| 加勒比在线观看一区二区| 嗯嗯啊啊视频在线看| 91男人天堂网| 美国一区二区三区视频| 日韩 人妻 精品| 国产精品国产精品国产| 丁香五月av| 97超碰精品图片| 天天日天天插| 久艹日日日| 午夜天天碰综合视频| 久久久久99999| 欧美极品女人的天堂| 欧美性高潮| 大香蕉黄色一区| 午夜经典| 素人播放一区| 亚洲无码国产精品久久| 无码视频一区二区| 精品亚洲国产成人精品| 日日妻色网| 中文字幕国产| 青操影院| 婷婷五月天影院| 男同专区一区二区三区在线| 丁香六月婷婷| 性天堂| 中美日韩毛片| 中文字幕精品一区欧美| 亚av顶级裸体一区二区三区四区五区 | 九九热国产| 国产天美欧美| 国产极品99热在线播放69| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 98人妻精品一区二区色欲| 亚洲影院小综合| 国产强奸91| 欧美激情亚洲| www.一本大99| 亚洲国产成人精品久久久国产成人一区二区三.| 欧美性生活内射| 99综合视频| 精品性爱| 91狠狠狠| 人妻社区男人天堂| 丁香五月天堂网| 操婢日韩| 另类欧美色| 久插综合| 熟女人妻av在线资源,黄色的资源| 综合av社区| 欧美综合综合| 欧美国产有色电影| 2011国产精品| av九九| 亚洲国产一区二区日韩专区| 日韩人妻无码不卡网站| 热热色国产一二区AV| 99自拍B亚洲 | 欧美性特| 国产成人精品日本亚洲语言| 中文字幕高清精品一区| 青青草久草| 蜜臀无码一区二区| 亚爽爽爽爽爽爽爽爽| 天天干天天干天天干| 夜夜天天噜狠狠爱2021| 黄色免费一级在线毛片| 草草电影院| 91国产操逼视频| 伊人天天久久动态图| 大香久久| 久久久青青草| 色97欧美| 色欧美色交综合| 国产精品久久发布| 中文字幕亚洲欧美在线不卡| 婷婷丁香六月| 婷婷五月花| 精品久热| 屌色在线97视频| 92人人操人人| 免费一级欧美片片线观看| 中文字幕中文字幕一区二区| 黄色片,com| 91精品微拍福利| 亚洲欧洲日韩天堂av| 麻豆视频国产一区二区| 欧美自拍偷拍综合图片| 国产精品探花色| 成人精品久久久午夜福利| 操碰97| 91亚州| 久艾草在线精品视频在线观看| 2018天天日天天日| 国产一区在线观看无码AV| 欧美自拍偷拍综合图片| 激情网色| 九九碰九九爱97| 久久久久精| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 超碰地址久久| 中国人高清www色视频免费| 国产成人在线观看网址| 日韩精品人妻一| 蜜乳av首页| 美日韩一卡二卡三卡免费人妻精品| 99这里有精品| 日韩高清一二三| 春色91| 97天天操| 岛国网址国产 | 国产一区二区在线播放量| 小视频国产| 国内毛片免费h片在线| 综合网,亚洲,欧美| 嗯~啊~快点 死我视频| 激情婷婷丁香网| 国产在线播放成人免费| 日本熟女中文字幕一区| 99热精品在线| 亚洲视频二区| 亚洲影视综合| 国产aⅴ无码片毛片一级网站| 国产免费一区在线观看| 粉嫩AV输入| 欧美亚洲天堂| 久久综合九九| 囯产精品强| 国产女人视频三四五区| 99久久综合网| 亚洲图片 激情小说| 黑人猛交| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 天美传媒一二三区永久网站| 十八禁电影伊人网| 中文字幕乱码人妻二区三区| 97视频观看| 久久久日本电影| 最新国产亚洲精品精品国产亚洲综合| 美欧老女人97| 老妇女91| 久久色人体| 超碰欧美COM| av天堂天堂av日韩| 欧美视频第二页| 黄色无码高清黄色无码网站| 色婷亚洲五月在线观看| 国产精品久久久久999| 欧美一级美片在线观看免费| 桃色五月天| 欧美色亚洲色| 亚洲AV无码久久久国产精品| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 伊人婷婷五月天| 国产精品午夜福利视频| 99国产精品视频尤物| 殴美日韩m| 中文字幕av亚洲精品| 天天综合亚在线| 国产剧情在线| 成人 日韩欧美一区| 日本Suv精品一区二区| 爽 好舒服 无码刺激久久| 干美女人妻| 人妻在线视频| 天天摸天天操视频| 超碰性爱97| 男人久久天堂| 亚洲色悠悠久久88| 久久久九九网站| 亚洲 欧美 精品专区 极品| 日韩传媒在线| www.91久久| 十八禁成人网站在线观看| 加勒比海人人操超碰在线| 91热情品| 国产成人网址| 成人麻豆av电影网站| 久久久久久久久久久久97| 怡红院怡春院| 欧美99热| blacked精品一区国产| 日本一区不卡| 国产精品午夜精品| 性生活久久久久久久久久| 99热99色| 人人操人人大香蕉| 国产v片在线免费观看| 久久久久成人网| 日韩特一级久久| 日韩精品99久久久久久中文字幕| 久操大香蕉手机视频在线看 | av无线看| 日本成a人v网站在线观看| 91美女高潮| 北野未奈加勒比av| 久久鲁夜| 欧美狠狠弄| 亚洲欧洲激情| 欧美在线播放| 久久久久国产亚洲一区欧美色图日韩| 国产一区二区欧美日本| 99国产精品视频尤物| 国产9区| 91熟女丨老女人| 精品美女少妇一区二区| 亚洲情色综合网| 视频二区熟女人妻| 亚洲十八禁止| 亚洲素人网| 是还免费视频1727我| 欧美亚洲成人在线一区二区三区| 校园春色欧美色图| 偷拍超碰| 欧美性爱一区二区三区四区| 99在线观看无大码| 久久精品视频在线观看| 97色涩| 久久久久久久久久久久九| 涩涩久久精品| 中文字幕无码不卡啪啪| 丁香色色网| 欧美性,色九九| 久久久96| 亚洲美女色图| 亚洲欧美国产日本一区二区三区| 色哟哟av网址| 可以免费观看的av| 人人么人人操| 秋霞鲁丝午夜无码一区二区三| 欧美亚洲尤物久久| 精品1区2区3区| 欧美中文字幕男人天堂久久精品| 中文字幕精品免费一区二区| 青草视频人妻在线观看| 五月婷丁香| 免费的黄片有限公司| 亚洲自拍青操视频| 男人的天堂啪啪| 无码区蜜乳| 九九热三级片| 久久久久久久六六| yirendaxiangjiashipin| 天天搞在线综合网| 麻豆久久一区二区三区| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 大香网伊人久久综合网eew| 成人精品视频一区二区| 97久久超碰日韩精品| 国产成人五月天丁香花| 男人的天堂网页| 九九热精品| 亚洲无码成人精品| 久久老子无码午夜伦不卡| 熟女人妻av在线资源,黄色的资源| av最新免费中文字幕| 日韩三级av片| 亚洲日韩精品久久久久一区壹牛 | 日本高清视频xxxx| 欧美翘臀视频网站一区二区三区| 91精品91久久久中77777| 日日夜夜精品视频| 久久99国产综合精品女同| 久超碰在| 精品无码久久| 久伊人网78| 九九人妻| 日日躁天天躁狠狠躁| 97热视频在线观看| 久久婷婷国产一区二区色| 国产 热久久久久国产精品| 无码精品久久久久久亚洲| 人妻激情在线视频| 精品超碰中文在线| 熟女人妻av在线资源,黄色的资源| 久操凹凸视频| 粉嫩粉嫩一区性色AV片| 操逼1区| 中文字幕日韩专区精品系列| 久久精品黄色| 中国特猛少妇色xxx| 加勒比久久av| av草草在线电影| 日韩欧美中文字| 磁力99AV| 屁股久久久久久久久| AV99热18这里只有精品| 一区二三区四区视频大全套| 九九国产热| 97在线资源| 嗯嗯嗯啊啊在线观看| 嗯嗯啊啊日韩精品| 嗯~啊~轻一点 视频| 青青久日| 蜜臀99久久精品久久久懂爱| 日韩特级毛片免费观看全集| 51国产午夜精品视频| 麻豆国产精品午夜视频| 影音先锋新男人| 欧美日韩国产高清在线一二三区 | 亚洲中文字幕av| 少妇天堂| 人人艹亚洲| 99re公开精品免费视频| 精品人妻美妇91job| 久久久久成人蜜桃精品| 人妻大相焦在线| 都市激情人妻一区二区青青操视频| 久久久久久久久久久999| 九久久精品| 国内一区二区免费| 99久久精品无码一区二区毛片免费 | 久久免费少妇| 99久久精品国产高潮| 国产精品91一样| 久久精品成人| 国产AV久久野战精品| 天美国产三级传媒| 久久久久久久久久久精| 宅男影院久久久,99| 精品妇女一区二区三区| 蜜臀中文无码午夜| 午夜120视频在线观看| 少妇人妻在线| 国产精品香蕉| 超碰地址久久| 国产成年免费大片黄在线观看| 欧美日韩亚洲国产中文永久天天看| 日韩99999| 性爱久久| 日韩成人无码| 91九九九小逼| 男人a天堂手机在线版| 久久后入制服| WWW4虎| 亚洲,日韩,欧美,成人播放| 亚洲区限制级| www.zbzhongsen.com| 亚洲欧美综合| 裸体1区| 99热这里只有精品8| 国产精品内射婷婷一级二| 国内97干免费看| 色婷婷九月| 久久久久人妻二区精品叶可怜| 熟女91网| 午夜天堂精品久久| 亚洲欧美国产其他二区| 国产精品女aA片爽爽视频| 日韩二区三四区五区六区在线看| 蜜桃视频精品一区二区| 黄色AAAAAAAAAAA大片| 亚洲国产精品无石码久久| 亚洲欧美国产中文字幕| 老女人爆菊| 日本在线激情一区二区三区 | 久久av一级av少妇av高潮| 精品国产乱码久久久A| 9997se| 天天夜夜久久| 91最新综合| 97久精品| 性色avv| 丁香五月综合| 超碰99在线观看| 无码人妻丰满热妇又大又粗| 在线综合 亚洲 欧美中文字幕| 欧美激情在线观看视频| 欧美同性恋 的搜索结果 - 91n| 久草在| 久久熟女久| 日日干夜夜骑| 国产情色在线| 日韩欧美蜜桃精品久久中文字幕久久| 日日夜夜草草草| 欧美青青视频| 久久亚码| 激情啪啪视频| 欧美欧美少妇| 91亚州| 五月天久久综合网| 精品人妻一区二区视频| 中国一级操逼视频| 日韩性爱视频免费在线| 一区二区三区色综合| 免费少妇一区二区| 亚洲自拍青操视频| 久久久精品国产亚洲伊人| 又黄又硬又粗又长国产视频| 欧美极品少妇交| 久久超碰97| 97国伦国色| 99热大香蕉伊在线| 性爱网站一区二区| 宗合情欲网| 日韩精品亚洲一二三| 欧美黄色片在线播放| 日韩乱码Av| 少妇蹲下买菜露大唇0| 黄色区免费观看中文字幕| 91oumei| 色五月婷婷中文字幕| 天天色综合图片| 高清无码网址| 国产白丝在线| 激情久久日韩精品中文字幕麻豆| 91扒丝袜综合在线| 无遮挡h肉动漫在线观看| 91性高潮久久久久久久久| 日本不卡高清免v欧美日韩在线观看| 女人的天堂大香蕉网| 欧美精品一二三| 成人性爱美曰韩| 蜜臀AV一区二区三区激情综合| 欧美另类丝袜熟女| 夜嗨影院| 亚洲综合另类色图| 国产精品女生av| 欧美日韩亚洲高清不卡一区二区三区| 99999国产| 激情久久久| 欧美亚洲色的图| 欧美一级做a爰片免费视频| 天美麻豆黄色录像| 91社操逼| 亚洲91大片| 国模艳艳啪啪一区| 欧美亚州色的图| 欧美性爱视频免费一区一A| 好舒服视频| 日韩欧美中文日韩欧美色| 亚洲性综合| 99日精品欧美国产| 青青草好吊色| 久九干| 日本三级A片网站com| 欧洲一区二区三区免费| 亚洲 自拍偷拍 欧美| 亚洲精品国产熟女久久久| 福利伊人玖玖国产| 久久久久久十| 欧州激情视频在线一区二区| 在线有码中文字幕| 久久有码视频| 日韩精品三区四区| 国产高清MV操逼视频| 亚洲高清欧美总合| 狠肏骚人妻| 国产成人bd在线观看| 女色综合| 天堂射| 久久超碰爱| 操逼操逼视频操逼| 中文字幕丰满人妻日本| 青娱乐大香蕉| 99无码视频| 亚洲精品啪视频| 成人小说另类在线| …中文字幕亚洲乱,97人妻无码费视…| 色99视频| 国产女性无套 免费观看| 国产女大学生AV| 九九九九热只有精品| 中文字幕-区二区三区四区视频中国| 熟女视频久久| 天天操夜夜嗨| 操逼逼一区视频| 中文字幕人妻资源在线| 欧美激情高清性猛交| 久久亚州大香蕉| 老熟妇一区二区三区啪啪| 久久色一区| 精品美女少妇一区二区| 91天天综合日韩欧美| 人人射人人操人人摸| 97超碰在线资源网站| 欧美亚洲情色| 红杏大香蕉| 久欲AV| 八戒无码国产午夜福利| 亚洲欧美精品91| 97天天搞在线| 久久宗合亚洲| 在线洲亚线| 国内一级精品| 91网站18禁| 成人三一级一片aaa| 伊人久久综合精品欧美| 中文字幕 国产区| 青青草日韩无码| 看免费一级在线播放毛片| 欧美线天码中字| 久操精品网| 人妻第一页| 炮色五月| 日本免费中文字幕在线| 超碰9 7女人| 操久久久久久| 国产精品久久天天干| 亚洲精品蜜桃久久久久久久| 大香蕉免费乱伦视频| 国产丝袜啪啪| 天天摸天天碰天天添青青| 中日韩久久久| 91岛国动作片| 91撸色网 玖玖网 欧美| 日本高清有码网址视频| 91观看 国产白丝| 国产60区。| 国产一级αv免费看片| 老熟女网站| 青青草字幕AV| 精品妇女一区二区三区| 波多野42部无码喷潮在线观看| 人人操人人精品影片| 污啪啪啪视频| 亚洲精品无码成人久久久99| 97chaopengongkai| 使劲用力艹少妇视频一区二区| 啊视频在线| 欧美日韩另类在线播放| 欧美情色亚洲| 欧美日韩青操| 色噜噜人妻av 中文字幕| 中文字幕亚洲热播人妻| 欧美资源| 青青草在线视频播放器| 97超碰逼| 欧美久久草熟女| 全球成人中文在线| WWW操逼| 精精品人妻一区二区三区| 天天天天做夜夜夜夜做| 夜夜嗨一区二区| 熟女突然公开看18禁影片| 综合伊人激情| 美欧色综合| 亚洲AV色图一区| 91久久18禁| 国产不卡片| 九九色影院| 成人亚欧免费视频| 97色伦97色伦国产欧美| 青青草一区二区高清无码视频 | 亚洲资源网| 色婷婷成人综合| 日韩乱码Av| AV九九| 久久九九国产精品| 久久久久免费看少妇A片特黄| 起碰97| 啊啊啊啊啊好多水| 加勒比无码毛片| 97超级色碰碰| 91n免费处女| 91久久久老司机| 爱啪精品一区| 色婷婷综合久久中文字幕雪峰| 色综合五月天| 激情综合五| 伊人99热| 女优免费一区二区永久| 丁香五月天激情| 在线播放成人网站| 99re久久| 久久精品99| 亚洲激情网| 99色| 97WW精品| 成人AV素股で擦久久| 麻豆天美国美国产| 久妇网| 区一在线观看| 欧美无圣光在线| 刺激精品视频| 久久久久ab| 91高潮喷水美女| 国产外初女出血视频| 热热色青青草| 天天综合~91| 成人毛片免费| www.yeyecao| 围产精品一区二区三区视频播放| 亚洲最新av无码成人精品区| 国产亚洲精品玖玖玖在线观看| 99精品久久久久久久婷婷| 一区三区啪啪| 碰碰在线视频| 五月婷婷hd| 九九热精彩视频| 欧美精品亚洲精品日韩传电影| 人妻熟女一区二区三区视频| 亚洲资源站| 日本高清免费一本视频在线观看| 日逼视频日本| 国内毛片无码一级毛片| 欧美|91色综合| 欧美 传媒 麻豆 日韩 偷拍| 欧美熟女丝袜| 人妻少妇精品视频一区二区三区| 亚洲伊人久久综合97| 日韩在线一区高清在线| av资源在线播放天堂| 激情四射婷婷四五月天| 老鸭窝黄色视频网站| 婷婷久久久精品| 国产高清成人免费视频| 亚洲精品乱码线路中文字幕| 成人三级片无码| 国产最新AV| 日韩少妇无吗| 亚洲毛片久久| 久热在线精品免费观看| 亚州AV无码国产精品| 偷拍 精品 另类 四区| 偷拍色图| 91社区伊人| 日本护士高潮| 性色高清在线| 国产精品白丝AV| 中文字幕日韩精品久久| 国内自拍 日韩激情 99| wwe 天天干.com| 久久久一区二区三区麻豆| 天天影视色香欲综合网小说| 国产AV无码AV| 欧美有码亚洲中文字幕一区二区三区四区 | 国产女主播视频在线观看| 91中文字幕| 日韩成人大片一区二区| 精品国产99| 超碰色97| 韩国三级理论在线| 日韩传媒在线| 91这里只有精品| 成人性爱电影一区二区| 超碰碰激情97+久| 五十路熟女人妻一区二区三区四区五| 中文字幕亚洲热播人妻| 人妻在线中出视频| 啊啊啊好大好深| 综合欧美日韩在线观看| 中文97国产| 日本一级特级毛片视频| 97碰在线视频| 日韩精品系列| 国产宅男宅女在线观看| 美女露胸露尿口| 91欧美网| 久久久激情| 欧美成人精品一区二区男人蜜臀| 国产啊v在线免费播放| 日韩少妇丰满亚洲| 蜜臀久久99精品久久久久| 99热18| 欧美日日人人天天| 亚洲成人福利电影免费| 中文字幕久久精视频久久大全| 男人午夜天堂| 久久久久精| 蜜臀久久99精品久久久| 长长久久曰曰夜夜成人网| 校园春色 亚洲| 日本欧美国内在线| 亚洲图片偷拍欧美| 欧美精品久久久久久久久88| 亚洲欧美日韩电影网站一区 | 色婷婷丁香五月| 91无码精品| 六月激情网| 97欧美日韩综合| 天天躁日日躁AAAXX| 风月影院男女十八禁| 色嗨嗨在线| 亚洲色图第四色| 色综合尤物| 97在线视频观看免费| 婷婷久久大香蕉| 91欧美色| 99国产精品人妻人伦| 成年人黄色视频免费| 97超碰天天爱天天爱| 91精品久久久久五月天精品| 乱欲性色| 你懂得91| 女生久久网| 久久久久久久久久久久久久久乱码| 久久亚洲中文字幕视频| 四虎视频在线观看| 国产Aα| 国产青青综合伊人| 久久婷婷五月天| 色在线视频导航| 久久一二三四不卡 | 精品美女久久久久| 婷婷五月天无码 | 色哟哟精品1精品2| 丁香六月激情综合| 立川理惠被中出无码| 97自拍一区| 视频分类 国内精品| 欧美 亚洲精品首页| 久久av色| 午夜寂寞欧美| 欧美高清色| 欧美暴力猛交| 亚洲色欲天天人妻无码系列专区| 国产丝袜一区二区三区| 99re不伦| 国产精品九九九| 色丁香五月婷婷| 久久大陆| 91精品久久久久久77777| 国产传媒日韩| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲熟女精品| 人妻少妇无码| 韩国轻伦国内自拍一区| 黄色av网站在线播放| 久久久999日本大片| 粉嫩av在线| 一区二区三区 丝袜 高跟 美腿| 中文字幕,人妻,日韩| 欧洲亚洲人妻无码久久三区四区| 老熟女91av| 亚洲国产欧美中文永久| 欧美片第一页| 亚洲精品97久久中文字幕| 久久精品人体| 国人欧美精品一区二区| 东京热男人的天堂| 大香蕉日韩欧美| 爱欲AV| 综合色99| 国产高清免费不卡av| 久久久久夜夜夜夜| 97久久国产亚洲精品超碰热| 日韩伦理久 久久 清纯| 国产大学生高潮在线播放| 欧美日韩大香蕉| 大香蕉狠狠爱| 日韩黄色小说| 日韩精品第3页| 色噜噜人妻av 中文字幕| 亚洲第一在线视频| 这里只有精品视频在线观看麻豆| 日韩精品人妻| 中文字幕成人乱码熟女精品国50| 加勒比色99999| 精品性爱| 97国产精品一区| 日韩欧美中文字亚洲慕| 人妻无码久久一区二区三区免费| 一品道视频一区二区三区| 午夜理论片在线观看免费| 亚欧免费| 人人操人人爽人人操人人| 婷婷爽人人婷婷爽视频| 夜夜高潮夜夜爽国产伦精品| 无码人妻系列少妇| 伊人久久久日韩一区| 亚洲色图加勒比| 青青11操操操操操操操操| 五月丁香婷婷色| 超碰人人色| 高清在线偷拍自拍视频| 欧美极度丰满熟妇hd| 欧美日韩性爱无码| 18禁网站在线播放| 久久久久久亚洲中文| 亚洲精品性爱片| 久久黄片国产一区二区| 美国日韩黄片| 69XX一中文字幕人妻91| 色播综合| 久久精视频美日韩在线视频| 欧美人妻精品一区二区| 无码WWW免费视频网站| 操逼操逼逼操操逼91| 九月丁香综合网| 美国日韩黄色片| 在线国产探花| 99热只有| 丰满人妻一区二区三区在线| 超碰97欧美在线| 自拍丝袜美腿人妻| 韩国三级三级BD在线| 色超碰综合| 蜜臀无码一区二区| 五月天AV资源| 久久精品店| 五月天婷婷在线看|