亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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
返回資訊列表
国产乱人伦AVA麻豆软件.| 亚洲熟女综合一区二区| 亚洲激情视频| 狠狠中文字幕| 日韩黄色片子| 国内精品久久久久影院亚洲| 日韩免费一级性爱视频| 欧美狠狠操| 欧美中文字幕日韩在线| 久操凹凸视频| 后入式福利| 激情综合久久| 深夜福利黄片| 久神马| 丁香五月天激情| 午夜精品久久久久久久久久久久久| 91 国产丝袜在线放观看 | 人妻系列无码专区中文有码| 日本欧美不卡| 亚洲精品欧洲精品| 亚洲Av无码成人精品国产| 久久在肏| 国产久久天堂资源| 久久亚码| 丰满翘臀美女影院视频| 色久桃花影院在线观看| 激情综合网激情综合| 欧美一区二区| 天堂亚洲精品| 久九9精品| 开心五月婷婷激情| 2024人人操人人摸| 人人操,人人插| 夜夜骑夜夜操| 亚洲区小说| 精品人妻一区二区三区-国产精品| 乱伦1色页| 97亚洲精品| 激情欧美97| 日本高清一本二本免费不卡| 1二区9| 久久亚洲av成人无码国产| 日韩精品1区2区中文字幕| 欧美宗合色| 色欧美亚洲| 国产久久久久久| 亚洲一区二区av| 这里只有97精品| asc国产精品| 精品女人999| 精品一区二区成人| 五月天色综合| 亚洲日韩美女中文字幕乱| 人妻中文字幕日韩电影| 亚洲夜夜欢无码一区二区| 国产福利影视| 四虎 精品 WWW| 欧美日韩人人精品| 色九九九九九九| 久久精品噜噜噜成人看免欧美大片| 97综合久第一页| 四季av一区二区凹凸精品小说| 啊啊啊啊,啊啊好多水| 九九热re99re6在线精品| 中文字幕黄色一起草| 色欧美亚洲| 色色网91| 一级黄色性爱A级片| 911粉嫩人妻| 热久久这里只有精品| 一区二区娱乐网站| 国产精品午夜成人福利| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲交换| 中文字幕后石码四区五区| 欧美综合色| 精品无码久久久久久久久果冻糖心| 波多野结衣之双飞调教在线播放| 性色av网站| 精品夜夜澡人妻无码| 91亚·色| 夜夜做夜夜爽精品视频| 操逼无码操逼| 欧美黑人精品一区二区| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 国产婷婷综合在线观看| 五月婷婷丁香中文字幕| 久久精品国产精品亚洲艾通辽熟妇 | 好一吊区二区| 思思视频免费看网站| 国产一区自拍欧美日韩| 国产精品无码论坛| 亚洲老熟妇xxx| 91狠婷| 久久久久幕乱码| 成人线上超碰| 久久综合国产精品国产| 久久天天摸| 亚洲无码一区成人免费午夜| 亚洲AV操| 亚洲色悠悠久久88| 无码区蜜乳| 亚洲精品亚洲人成在线麻豆| 成人日韩中文字幕| 乱伦日本中文自拍| 翘臀vidoes| 熟女一区二区三区四区| 国产精品探花色| 欧美熟妇视频| 亚洲 中文 欧美 日韩 在线| 日日日日做夜夜夜夜无码| 色婷婷香蕉| 91精品婷婷国产综合久久竹菊| 亚洲精品久久久久毛片A片拉屎 | 丰满人妻一区二区三区四| 爱丝福利| 欧美视频边做饭边橾| 日韩激情视频| 波多野结衣AV无码一区| 天综合网欧美| 日韩高清黄片| 亚洲怡春院| 大香蕉乱级| 久久只有精品一区二区三区| 18禁精品网站在线看| 欧美 亚洲 大香| 大屁股人妻女教师撅着屁股| 人人澡综合涩| 亚洲综合另类小说色区亚洲成av人片在www| 啪啪91| 青娱乐淫乱1314| 手机在线看片免费人成视频| 日韩欧美传媒一区国产| 四虎永久在线精品免费网址| 丰满美女一级毛片在线播放| 98精品国产乱码久久久久久| 亚洲中文日韩欧美大香蕉视频| 色九九九综合| 伊人五月天婷婷| 久草精品国产蜜臀| 国产精品久久伊人| 亚洲不雅视频1区二区| 婷婷五月天激情四射| 偷拍综合亚洲| 综合色播| 国产精品一区二区校花| 台湾佬中文娱乐网久久久久久久久久com | 91丝袜在线视频| 亚洲人妻中文高清| 男人天堂资源| 超碰视97中文| 国产视频小说| 尹人大香蕉视频在线| 日日骚AV| 九9热伊人| 精品国产人成在线| 人妻少妇久久中文| 97天天爽| 大香蕉伊人久久| 97操| 久9综合在线| 超碰97欧美在线| 1769国内精品视频| 密臀成人视频久久久| 日韩欧美视频青青| 二男一女成人A片| 欧美综合网站999| 亚洲男人天堂网久久| 免费中文在线| av国产无码| 欧美亚洲| 色97干| 亚洲精品1区| 五月天综合网| 欧美性爱1080p| 狠狠爱夜夜| 97玖玖人妻| 人人性爱视频免费| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 九九Av| 伊人久久大香线蕉无码| 啊啊啊爽爽| 老司机午夜精品福利视频一区二区| 这里只有精品视频| 日韩激情啪啪| 日韩精品一区二区日韩| 人人摸人人入| 欧美激情高清性猛交| 97久久久精品| 自拍丝袜美腿人妻| 丝袜熟女2P| 精品国产肉丝袜在线拍国语 | 97碰碰日本乱偷人妻中文的| 99操| 国产亚洲日本| 久久m| 神马久久久久眼| 亚洲精品aa久久伊人| 熟女乱伦A| 大香蕉专区| 一类av片在线看| 久久久久亚洲Av无码专区老牛影视| 精品人妻一区二区三区蜜桃视频| 欧美色图片欧美色图| 人妻人妻天天碰| 欧美熟妇人体| 欧洲小说色图视频另类| 四虎在线观看网站| 97免费在线视频在线观看| 黄污污污污| 日日干日日| 大香网伊人久久综合| 热99这里只有精品| 日本综合色图| 97超碰美国| 天天日日舔舔| 色拍偷亚洲| 欧美中字不卡| 国产9熟妇视频网站| 亚洲精品1区| 午夜无码熟妇丰满人妻| 另类图片五月天| 亚洲第一视频 欧美风情 日韩| 另类老少妇| 亚洲天天自拍| 日韩一级二级三级免费看完整版| 国产精品免费久久久久久久久久| 91深夜夜| 美日韩成人| 97爱免费插| 爽爽爽免费视频| 夜夜嗨绯色| 91 国产丝袜在线播放-百度| 人妻少妇精品视频一区二区三区| 日韩成人精品| 蜜臀操逼黄色视频操的好爽| 日日夜夜天天| 97爱啪| 久久少妇| 国产aⅴ无码片毛片一级网站| 欧美麻豆成人同性GⅤ在线| www.av在线观看| 亚洲老熟妇xxx| 蜜臀精品1区2区| 欧美超碰人妻97| 精品免费成人久久| 蜜桃视频成a人v在线| 3p国产欧美99热| 国产区性爱在线视频秋霞豆| 蜜臀av在线播放一区二区三区| 久久综合18p| 亚洲一区制服诱惑| 97综合网| 亚洲久热| 91日日夜夜| 亚洲春色一区二区三区| 人人看人人摸人人色| 亚洲国产综合久久天堂| 超碰综合97在线| 91操熟女| 婷婷五月天激情网| 丰满欧美放荡少妇在线| 网站A V在线| 精品v日韩欧美国产| 丝袜制服字幕在线| 精品国产乱码久久久久久久| 在线无码操| 亚洲美欧999| 夜夜夜夜久久久久| 强奸乱伦中文字幕AV| 欧美嗯啊……在线观看视频免费| 天天爽天天操啊啊啊| 在线国产福利网址导航| 啊啊啊啊好疼视频| 91香蕉视频在线观看免费| 99久久9| 人妻素股| 久草国产在线视频| 色哟哟1区2区| 国产 日韩 欧美高清| 日韩女优在线| 蜜桃久久一区二区| 丁香婷婷色五月| 啊嗯嗯啊好大好爽| 欧美视频一区二区在线| 伊人网在线视频| 一级人妻性爱视频| 91天天综合网,天天综合网| 99热在线播放| 日韩精品99999| 91久热| 亚洲精品国产精品乱码不99| 精品女同一区| 国产AV超爽| 99热这里只有精品1| 亚洲精品日韩国产欧美| 亚洲日韩资源| 亚洲色堂免费视频| 88xx成人精品视频| 99国产精品久久久久久久成人热| 亚洲天堂一区二区久久| 97精品97| 日本亚洲熟女视频| 亚洲欧美伦综合| 九九热精品在线| 老司机香蕉| 五月丁香六月| 八戒午夜福利理论片| 色综合加勒比四四季| 最新国内自拍av免费| 色欲人妻一区二区在线| 久热影视| 美女91色黄18| 亚洲色天堂日韩中| 特级毛片特黄久久免费看| 一本大道久| 亚洲天堂,男人| 亚洲av青草久久一区二区| 精品.99999| 美国人人操人人操| 中文字幕乱码在线观看| 国产白领连续中出在线播放| 成人午夜视频免费播放| 欧美性爱第一页久久| 亚洲日韩欧美一区二区| 亚洲激情网一二三四区| 超碰免费人妻人人| 视频在线观看青青99国产| 一区二区日韩欧美久久| 国产AV无码AV| 国产精品高潮久久久无码| 成人热久久精品| 精品一区二区成人动漫| 东北少妇高潮zzzz| 伊人在线大香蕉视频久久| 97久久精品亚洲| 精品无码不卡视频| 中欧人妻丝袜中文字幕 | 自拍内地三级在线观看| 免费99精品国产自在在线| 五月婷婷激情| 黄片免费看黄片免费看| 韩国手机不卡无码三级视频| 中文字幕精品人妻丝袜| 日产中文字幕2020| 久久激情综合| 日韩欧美操逼xxx| 国产欧美日产一区二区三区 - 国产欧美日| 色婷婷网| 1024人妻熟女一区二区三区| 无码精品久久| 国产91 丝袜在线播放| av天天在线| 日韩有码一区三区| 国产18精品亚洲精品| 26UUU欧美日本| 人妻另类| 亚洲AV色图一区| 欧美色997| 色婷视频| 亚洲中文字幕三级在线| 又粗又长又爽在线观看| V A在线| 欧在线一二区| 欧美性第1页| 天天内射| 亚州色图狠狠干| 啊啊啊啊啊啊啊国| 99亚亚热| 91蜜臀熟女| 最新日韩黄片| www…国产操逼| 日本人妻中文字幕精品| 亚洲欧洲av影音| 久久久久久久97| 97人人色| 国产丝袜啪啪| 97色碰| 蜜臀久久99精品久久久电影| 蜜臀久久99精品久久久电影| 亚洲国产97| 欧美日韩狠狠爱| 精品一区二区2| 91日韩网站| 日韩欧美久久婷婷网站| 久草电影网| 亚洲国产中文字幕| 精品制服美女中文一区二区三区| 亚洲欧美天| 91情色在线| 欧亚 另类 久| 亚洲中文字幕熟女| 欧美中文字幕日韩在线| 国产 热久久久久国产精品| 国产欧美成人第一页在线观看| 1人人看人人摸人人操| 国产中文大片资源中文字幕| 亚洲成人久久一区二区| 99久久精品国产高潮| 黄网色一区二区三区四区精品| 亚洲美女自拍偷拍视频| 超碰av人人人| 东京热av男人的天堂| 嗯嗯啊啊好疼| 色九久| 人人操欧美风骚| 精品久久久久久AV无码| 99热只有这里有精品| 97色婷婷| 欧亚久久偷拍视频| 亚洲综人网| av天堂电影网| 91影库| 欧日a| 天天插天天干| 日产中文字幕2020| 精品一区二区2| 97久久网| 久久久久久久久久9| 色哟哟 日韩精品| 小视频玖玖| 一区二区三区欧美激情| 国产精品天美传媒| 夜夜青青无码影院| 级做a爱无码性色永久免费| 啪啪资源网| 蜜臀国产AV中文字幕| 91九九九小逼| 97超碰超碰| 人人摸人人添人人操| 人妻碰碰碰碰碰碰| 天天综合网合集91| gogogo免费高清看中国国语| 国产精品老师| 欧美综合在线91| 久久啊啊啊| 全免费a敌肛交毛片免费| 女人的久久久| 校园春色 亚洲| 中文字幕AV乱伦| 国产玖玖| 91天天综合在线| A级毛片在线看免费| 天天干天天爽| 亚洲精品蜜桃久久久| 国产一区二区成人av在线播放| 亚洲精品无码少妇久久| 亚码人妻| 操逼免费视频无码国产| 欧美嗯啊……在线观看视频免费| 国产丁香精品露脸视频| 国产激情av女片自拍| 欧美一级欧美三级在线观看 | 欧美丰满少妇xx高潮| 久久欧美按摩999| 色综九九九一区| 男女激情黄色网址| 97操在线| 国产区91柔拿会所技师| 亚洲色图加勒比| 最新亚洲黄色免费电影| 欧美淫穴| 97亚洲欧美| 久久丁香| 四虎AV在线播放| 黄网在线播放| 亚洲一区二区中文字幕| 九九热在线精品视频| 精品无av| 性爱久久| 日本性爱视频一级| 久久综合女优| 亚洲综合另类小说色区亚洲成av人片在www | 日本色色网| 美女91网址| 日韩精品一区二区三区色欲| 国产自偷| 亚洲天堂,男人| 91亚州| 夜夜操91744565| CCYY草草影院地址入口| 1204av韩国| 国产一级作爱毛片| 欧中美三级一区二区三区| 日韩婷婷| 亚洲色图欧美一区二区不卡| 嗯嗯啊啊啊好舒服| 51久久夜色精品国产麻豆| a人欧美综合天堂麻豆| 国产成年女人免费视频播放a| 亚州 综合 色图| 爱av免费| 91色图| 久神马| 婷婷综合激情| 女沟厕偷窥piss小便| 青青草色情网站视频| 91成人精品在线播放| 亚洲交性| 神马久久久久久久久久| 亚洲精品一区二区三区在线播放| 怡春院久久| 67194无码不卡| 国产不卡免费在线视频| 九月伊人中文字幕| 国产第二页| 涩五月婷婷| 中文字幕日韩专区精品系列| 97在线观看免费| 后X久久| 日韩丰满熟妇| 亚洲激情视频| 亚洲欧美综合网站| 岛国小电影| 手机在线看片免费人成视频| 人妻色偷色噜| 新怡红院| 91天射| 熟妇熟女视频一区二区三区| 91艹B视频| 蜜桃狠狠色伊人亚洲综合网站| 欧美少妇性乱| 91暧暧| 99热网站| 操逼视频免费日韩无码| 国内亚洲高清无码| 蜜臀久久久99久久久久 | 丝袜美腿丝袜| 国产精品视频在线播放| 观看免费区二区三区二| 婷婷丁香久久| 热99这里只有精品| 国产黄片精品在线| 人人操 欧美| 中文乱码字幕观看视频| 亚洲极品| 91美女视频电影| 99精品伊人| 黄色乱论网站| 日韩三四五区| 国产超碰在线| 九九AV| 强奸a片网| 亚洲天堂AV在线播放| 内射老妇BBWX0C0CK| 欧美在线播放| 蜜臀久久99精品久久久久久无删减 | 青青青国产| 超碰国产在线| 中文字幕在线高清男人的天堂| 天天操夜夜嗨| 无码逼| 日本免费人成视频播放120秒| 大屁股人妻女教师撅着屁股| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 999热日韩精品| 青久久| 午夜操操操| 亚洲不卡一| 97精品一区| 蜜桃AV天堂| 欧美日韩一二三| 久久国产精品一区二区| 青青操国产夫妻| 国产伦精品| 欧美97爱| 国产福利视频精品视频| 日韩黄片视频试看| 成人美女av| 欧美日韩第一页| 久久五月丁香| 天天干2区3区| 亚洲永久AV无码精品秋霞| 黄色不卡视频| 男女性扦B| 蜜桃午夜视频一区二区| 鸥美中出| 爱妃国产亚洲视频中文字幕| 免费又黄又裸乳的视频| 伊人黄色视频免费观看| 一本道综合色图| 清清一区二区三区四区不卡视频| 97超久碰| 超碰97.com| 国产精品日日摸夜夜添骚逼| 亚洲性爱乱操x| 亚洲午夜福利在线影院| 久久极品一区二区| 亚州中文字幕超碰97| 四虎在线观看网站| 久久精品一区二区| 狠日操| 99亚洲精品| 一区二区三区蜜桃成人撸久久东京热 | 久草这里只有精品 | 中文字幕精品人妻丝袜| 久久色AV线| 蜜臀99久久精品久久久久| 日本成人A片网站| 色综合久久久久| 天天做天天爱天天爽AV| 天天摸天天操视频| 成人小说视频在线精品欧美| 开心五月婷婷激情| 亚州春色| 亚洲欧美情色| 国产亚州精品美女久久久免费| 色999人与兽| 91美女国产在线| 国产偷拍网站| 亚洲精品色| 极品色电影院| 成 人 A V免费视频在线观看| 在线看免费无码AV天堂的| 一区二区三区日韩欧美| 亚洲色性情三级| 日日骚一区二区三区| 国产精品美女在线一区| 亚洲男人的天堂V| 欧美色图片色哟哟| 伦伦成年午夜免费视频| 一区二区三区日韩欧美| 97色色色| 亚洲男人的天堂亚洲| 国产欧洲精品亚洲午夜拍精品| 欧美色www亚洲国产阿娇要播| 婷婷丁香久久| 97精品视频在线| 天天摸夜夜添无码小视频| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 国产v片在线免费观看| 日韩97超碰中文字幕| 密臀国产在线| 国产一区二区视频在线播放| 啊嗯嗯啊好大好爽| 操迟操逼在巾线Fre看| 精久久久91| 日韩免费福利在线观看| 四虎影库国产精品免费| 亚洲天天综合| 美女人妻色网站| 91熟女视频| 亚洲人妻一区二区三区| sewuyueav| 九九这里只有精品| 人妻丝袜二区| 欧美熟女少妇| 亚洲日韩天堂| 麻豆AV一区二区| 欧美操人视频| 人妻 制服 日韩 中文 在线| 亚洲精品国产专区在线观看| 超碰98综合网| 夜间福利片1000无码| 久久国产999| 久久免费精品视频免一| 欧美综合综合| 超碰79人人乐| 人人操人人干xxx| 亚洲精品欧洲精品| 国产AV激情无码久久无码| 最新9久久久9免费视频| 国产小u女在线观看| 超碰97伊人| 亚洲不卡AV在线| 国产精品不卡av免费在线观看| 欧美爆操91| 成人a大片在线观看| 中文字幕在线第二页| 超碰人妻在线| 日本在线观看网址| 亚洲欧美在线综合| 日本中文字幕在线电影| av影片在线观看不卡| 国产欧美日韩臀| 人妻中文字幕日韩电影| 天美麻豆一区二区三区| 北京专精特新企业招聘信息| 亚洲性爱电影| yazhououmeizongya| 97舔舔| 成人麻豆av电影网站| 偷拍导航视频网站| 日韩传媒在线| 色情综合| 久久精品国产99精品亚洲蜜... | 欧美一级黄片免费播放| 日韩无码极品| 91欧洲入口| 青娱乐av在线| 去干网最新版| 无遮挡一级毛片视频免费的| 东京热,男人的天堂| 国产传媒1234区| 亚洲九区| 日韩美女操b| 男人天堂2017| 999久久芭蕾| 青春草A| 骚逼高潮久久精品| 成年人黄色小视频网站| 色五月AV| 美女十八禁| 青青草男人天堂| 欧美图片偷拍| 日本中文字幕在线视频| 性爱乱伦视频免费| 亚州91| 90后后入| 亚洲欲| 粉嫩少妇自慰在线| 精品国产少妇高潮视频| 欧美黄片视频在线观看免费 | 亚洲色诱惑| 日韩国产欧美伦理在线| 操屄日韩| 亚洲天堂欧美| 精品人妻一区二区三区鲁大师| 狠狠躁天天躁日日躁97| 久久97资源 网| 色香阁在线| 99啪啪| 综合色99| 操屄不卡视频| 操逼操网| 色欲无码人妻日韩欧美精品| 啪啪性爱免费视频| 亚洲中文字幕熟女| 久久久精品| 色香综合| 欧州91高潮| 天天亚洲| 少妇久久久久久久| 日韩欧美日韩| 超碰在线一区| 91精品国产91综合久久蜜臀| 9Ⅰ超碰| 99国产女人| 色九九久九九| 外国免费性情大片| 天天干夜夜鈤| 日韩十八禁| 东京热双插| 老女人综合网| 日韩欧美大片免费高清啪啪| 国产女同在线观看视频| 人人操人人摸人人骑| 襙一襙| 91人精品妻入口| 收看日本人日bb| 亚洲欧洲日韩天堂av| 在线岛| 欧美性巨大╳╳╳╳╳高跟鞋| 日韩无码黄色片| wwwcaobibi| 日本中文字幕在线电影| 日本天天操| 神马视频久久久久久| 亚洲色欲一区二区三区| 久久久∴| 久久超碰天天| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 九九热九九| 国产在线综合网| 亚洲囯产精品女人久久久| 操我无码| 日韩乱码Av| 国产中文福利| 久久超碰天天| 国产午夜在线观看| 久操网线| 久久久草成人网站久久久草成人久久久草久久久 | 日产国产精品中文久久婷婷| 啊啊啊啊啊啊啊啊啊啊在线观看| 日韩成人人妻网站| 免费a v| 亚洲91在线播放影院| 久久激情综合| 神马久久中文字幕| JuliaAnnXXX888| 亚洲日韩在线a不卡99精品| 精品国产丝袜一区二区三区乱码| AV九九| 嗯嗯啊好大| 久久高潮妇女视频| 精品亚洲国产成人精品| 亚州精人品大香蕉| 国产后入清纯| 国产在线能看的你懂的| 中文字幕一区日韩精| 好吊色一区| 亚洲成人在线乱码色午夜| 国产肏逼网站| 婷婷五月成人| 天天综合网~91入口| 91亚洲欧洲| 亚洲一区二区中文字幕| 91最新综合| 96超碰网| 男女激情黄色网址| 97人人爱人人做人人乐| 少妇无码999| 亚洲一区二区精品福利| 超硑97精品| 亚洲久久久久| 超碰九色| 男女性扦B| 一区二区三区高清天码| 欧美中文字幕男人天堂久久精品 | www狠狠| 久久少妇人妻| 久久久99免费| 欧美日韩淫加| 亚洲国产熟妇综合色专区| 九九综合久久| 91网站在线播放| 欧亚成人| 欧美A√综合网| 亚洲影院无码在线| 91蜜臀在线久久久久| 91性网| 97久久视频| 亚洲中文字幕久久无码精品| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 今日头条成人一区二区三区四虎精品| 日日超碰亚洲| 丰满人妻一区二区三区四| 三四中文字幕| 这里只有精品视频在线| 色欧美色交综合| 国产精品香蕉热久久新品| 超碰在线97国产| 一级@啪啪视频| 亚洲限制级| 一本久道在线综合视频| AV在线资源| 麻花豆传媒剧国产MV出差| 91国产美女丝袜足交精品视频| 欧美福利视频啊啊啊啊| 亚洲第一页欧美| 日韩中文字幕国产| 欧美大片天天看| 欧美日韩 强奸乱伦| 天天超级碰碰碰| 亚洲欧美在线观看2021| 久久久三区二区一区| 三级片网站在线播放| 91狠狠综合久久| 日日狠狠久久偷偷色综合免费| 亚洲久久久久| 开心六月色| 精品欧美А∨无码黑人大荫蒂| 亚洲综合骚逼| 在线观看精品国产免费| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 亚殴在线| 久久精品国产99精品亚洲蜜...| 亚洲天堂人人妻| 8050午夜少妇无码| 欧美性91| 69视频福利导航| 黑人嘿嘿嘿超爽免费视频| 亚洲伊人青青草| 性爱动态120秒| 久久成人国产精品| 久久高清无码夜夜操| 99久久婷婷| 试看日韩黄片| 欧美亚州色的图| 天天插天天射| 澳门黄片一香蕉视频| 国产熟女一区二区丰满| 国产精品一区二区 尿失禁| 亚洲骚男同com| 久久久com| 强奸乱伦亚洲第一页| 青青操日韩| 天天亚洲综合| 九九探花视频在线观看| 综合色好色| 亚洲成人妻日韩在线| 大香蕉九九| 精品国产91内射久久| 视频在线观看青青99国产| 国产剧情一区在线观看| 亚洲欧洲综合av在线| 欧美日韩制服| 久久亚洲熟妇在线视频| 桃色五月天| 尤物网址| 久久久久久久9| 亚洲熟女乱色一区二区三区久久久| 色色婷婷五月天| 久久无码成人| 五月婷亚洲精品天堂| 天天操天天日青青草超碰av| 欧美黑人性猛交91| 欧美日韩性爱视屏免费看了| 亚洲AV麻豆Aⅴ无码电影一| 97国产精选| 伊人青青草久久| 99色视频| 欧美成va视频网站| 成人免费毛片| 黑人猛交| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 99色婷婷中文字幕乱色| 欧美性猛交美女自慰91| 欧亚在线视频| 日本精品无码三级网站| 51国产午夜精品视频| 四虎影视欧美| 久久九九精品一区二区| 国产少妇高潮| 激情图片亚洲色图| 人人爽天天爽| 色五月激情网| 欧美一级做a爰片免费视频| xxxx网站亚洲精品| 久久天天艹| 日本乱人伦片中文三区| 亚洲情色视频| 91欧美综合| 日日躁夜夜躁狠狠躁超爽| 婷婷九月丁香| 日韩色图 一区二区| 亚洲色入欧美| 亚洲和欧美裸体美女双飞视频| 蜜桃久久久久久久| 国产视频一区二区在线观看| 欧美日不卡| 精品久久視頻在线| 免费夜夜爱黄色视频毛片| 97人人模人人爽人人| 最新日韩黄片| 最新国产精品久久精品| 精品成人av一区二区三区在线| 蜜乳性色无码专日粉嫩骚逼AV| 国产福利在线视频网站| 亚洲精品天堂久久A∨51成人漫| 少妇一区二区三区高速| 色天使亚洲综合在线观看| 欧美天天干| 美女极品一区二区三区| 国产AV激情无码久久无码 | 伊人激情五月天一区二区| 国产精品爽爽v| 黄骗免费| 26uuu国产免费观看| 懂色AV蜜臀无码精品APP| 欧美精品自慰系列寂寞少妇| 午夜丁香| 国产欧美美女免费观看视频| 人人爽夜夜操| 91麻豆一二三区| 超碰97.com| 国产99热| 老子午夜伦不卡影院| 精品偷拍13p欧美dodk视频| 日韩午夜精品一区二区三区电影| 亚洲欧美日韩综合在线尤物 | 日本成人免费一区二区三区| 精品国产91av一区二区三区| 美女一区二区国产精品| 99热最新网址| 手机不卡视频不卡在线一二三区| 男人天堂日日夜夜| 欧美最大综合网| 天天92av| 中文字幕五月婷婷免费| 91三级理论片播放器| 久久人妻视频| 99精品热| chaopen97久久| 97操| 欧美国产伊人久久久久| 志村玲子视频一区二区| 躁躁日曰躁2020| 人妻蜜桃臀| 日韩精品字幕| 成人国产精品三级A片| 18一区二区三区| 四虎在线免费视频| 试看60秒 爽| 国产福利在线视频网站| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 熟女人妇一区二区三区| 91在线色综合| 亚州春色| 国产日韩久久| 亚洲一区二区三区欧美日韩| 久久久久9久久久久| 精品二区三四区五电影 | 午夜呻吟欧美| 怡红院网站在线视频| 亚洲āv网址在线观看| 九九热九九| 蜜臀久久久国产| 97精品视频| 精品性爱无码在线播放| 青青草伊人久久| 五十路三区在线| 亚洲欧美国产其他二区| 亚洲视频,小说| 91精品人妻一区二区三区蜜桃| av最新免费中文字幕| 96AV精品| 97视频在线观看免费高清| 人人摸人人添人人操| 欧美久久婷| 蜜臀网 一区| 无码在线亚洲| 久久久久网站-538在线视频-欧美永久乱码 | nuu12国产麻豆精品| 国产日逼视频| 成人熟女视频一区二区三区| 美女久久久久久久久久久| 亚洲欧洲网站免费观看| 亚洲图片 激情小说| 欧美中文字幕日韩在线| 久久综合18p| 91人妻在线视频| 九九热在线视频| 五月天九九日国产精品一区二区三区| 中文字幕久热视频在线| 欧美激情片一区二区| 精品国产三级av韩国在线| 内射白嫩美女| 91色拍| 久久久com| 色网色网色网色网色网色| 伊人久久88国产女| 91欧美经典| 天天爱天天韩国日本牛牛牛牛 | 91neishe| 九九热九九| 91 亚洲 欧洲| 国产深夜福利| 麻豆久久视频在线地址| 色97干| 欧美亚洲国内自拍| 91亚洲综合| 国产在线不卡导航| yw尤物av无码点击进入麻豆| 九九久久首页| 大香蕉免费3| 人妻 欧美 中文| 岛国片国产成人亚洲播放| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | www欧美91| 中文字幕人妻丝袜| 九九九久久久| 最新亚洲风情电影| 色在线亚洲视频www| 国产免费一区| 噜噜吧,噜噜色,噜噜| 农村妇女精品一二区| 精品国产嫩穴视频| 超碰在线人妻中文字幕| 美女91在线观看| 免费在线观看国内色片网站网址| 97精品视频在线播放| 色99在线| 日韩激情电影中文字幕| 夜夜骑天天燥| 一区二区三区精品视频| 超碰美国| 美女91在线观看| 欧美一级黄色18片免费看| 欧美亚洲手机在线| 美女的肌被草喷水视频| 国内毛片婷婷六月色| 亚洲春色欧美| 91在线视频免费中出| 国产人妖视频一区在线观看| 好湿好紧视频| 91色黑人少妇| 欧美日本一区二区a人| 97超碰超| 人妻熟女一区二区三区在线| 操屄不卡视频| 日韩视频中文字幕| 欧美激色| 亚洲夜色在线| 亚洲乱码国产乱码精网站| 伦理第一页| 极品久久久久久久久久久久久久| 91超碰人人操| 一级岛国大片| 超碰97综合在线| 久日91在线| 欧美日不卡| 国产色精品午夜大片| 农村女一级毛卡片| 我想要啊 啊 啊| 欧美精品丝袜久久久中文字幕| 久久久久久久久成人av解说| 精品免费一区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 精品国产99| 欧美日韩99| 免费一级黄色录像影片| 操东北女人| 97在线/亚洲| 日韩一级二级三级免费看完整版国语版| 夜夜一区二区| 秋霞一级视频在线观看免费| 成人26uuu| 99热在线观看| 偷窥自拍亚洲| 天天超级碰碰碰| 中文97国产| 天美传媒av 在线| 色婷婷五月综合激情中文字幕| 精品国产一区二区三区在线播出| 天天干嫩逼网| 新怡红院| 天天情欲宗合网| 精品乱码久久久久| 亚洲乱色视频一区、二区在线| 天天做天天爱天天爽| 91成人精品在线播放| 午夜视频久久久久一区| 香蕉视频欧美一卡二卡| 97精品全部| 玖日综合网| 欧美日韩亚洲五月天婷婷| 欧美图片色综合| 殴美,日韩国产伦精品| 国产精品交换一区二区| 午夜一区| 国产免费一区在线观看| 干婷婷综合网| 极品美女福利在线观看| 久久禁| 久久久久久亚洲精品不卡人乳| 国产精品免费视频人成| 三级网色| AV污污污污| 天天搞在线综合网| 国产传媒操逼视频| 丰满人妻无码一区二区三区| 无码国产Av| 日韩人妻播放| 伊人黄色视频免费观看| 久久久久国产精品喷潮免费观看臀 | 中文字幕美女91| 亚洲男人综合| 少妇一级无码精品| 日韩中文字幕国产| 白天啪啪晚上啪啪视频| 97人妻免费中文字幕| 成人免费福利在线观看| 女人高潮抽搐喷水视频网站| 久草视频分类在线| 五月激情综合网| 精品国产一区二区久久| 国产偷仑| 嗯嗯啊啊日韩精品| 国产9熟妇视频网站|