久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|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
返回資訊列表
日韩亚洲中文字幕在线| 美女刺激久久国产欧美| 欧洲综合视频| 亚洲视频精选| 九九热精品| 骚女高跟AV在线| 91色花堂| 成人日韩欧美| 精品久久久久久久| 日韩偷拍色图| 91岛国动作片| 另类天堂| 欧美色干| 亚洲色图大香| 久久精品一区二区| 久久精品一区二区三区不卡| 爱逼综合| av麻豆啪啪| 日韩熟女操逼| 一区二区三区网站日日骚| 97综合在线| 婷婷伊人一区| 日韩午夜国产| 亚洲色图超碰在线| 欧美性色欧美| 久久免费少妇| 一二三四视频中文字幕在线看| 日本免费一区二| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美日韩91| 亚洲97网站| 国产偷拍自拍在线视频| 啊啊啊啊啊舒服| 成人免费福利在线观看| 夜夜操夜夜高潮夜夜爽国产精品区| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 日韩无码三级影院| 熟女一区二区三区| 东京热男人的天堂精品| nuu12国产麻豆精品| 高清在线偷拍自拍视频| 九九九九9999| 老熟女区| 人妻中文字幕日韩电影| 97爱亚洲| 久久只有精品一区二区三区| 不卡一区二区日本视频| 竹菊一区二区三区AV线| 啊嗯好大视频在线观看| 3p国产色噜噜一区| 国产精品夜夜夜| 五月天久久久| 亚洲麻豆av一区二区| 精品免费1| 综合久久久久久久综合网| 精品免费国产二区三区| 日韩中文字幕精品一区在线| 日本久久999| 亚洲成人美女无吗| 97色碰| 日本高清一区二区在线| 啊啊啊爽爽| 久久人妻视频| 93人人操人人| 美性中文综合网| 超碰在线观看av不卡| 超碰人妻中文在线| 婷婷色五月激情| 一级毛片电影免费看| 91xingse| 日产欧美电影一区二区三区| 夜夜操一区二区| 99精品在线播放| 久久精品 六十路 熟女 欧美| 日本最新1区2区3区| 99精品视频在线观看| 欧美18 在线观看| 久久有码视频| 男人的天堂在线2| 美女黄频a美女大全免费皮| 亚洲全色网| 99蜜月精品久久| 日韩AV色图| 一块操欧美性爱| 一区二区免费电影久久| 亚洲性爱成人| 视频一区二区免费在线| 不卡二三区人妻少妇| 日夜干射色啊| 性色乱AV一区二区| 99精品久久| 国产曰批免费观看久久久| 欧美综合天堂| 久久久久久久久久久久久久久久9| 久热9| 日韩欧美一级特黄大片| 亚洲成人在线高清| 高清有码一区二区| 99蜜月精品久久| 强上我不卡卡| 色色激情五月天| 国产精品一区av在线| 毛片99-全集电影手机免费观看完整-B029AV| 高清不卡视频| 爱爱动态120秒| 亚洲欧美在线观看2021| 欧美精品成人在线播放| 亚洲免费人妻在| 青娱乐欧美激情一区二区| 天堂性色| 99re9| 91女日逼| 啊啊啊在线观看| 91精品婷婷国产综合久久| 久久免费精品96| www.操| 综合熟女| 91精品国产综合久久久蜜臀| 成人熟女区| 高树玛利亚无码流出| 中文字幕二区日韩天堂| 亚洲不卡不卡中文字幕不卡| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国产一区二区三区导航| 强奸乱伦动态污图免费| 亚洲色图殴美色图激情乱伦| 一区二区三区精品视频| 亚洲欧美精品一区天堂久久| 久操大香蕉手机视频在线看| 久久熟女人| 香一区二区三区| 操人无码| 91麻豆va国产精品| 国精精品无码一二三区水多多| 2018天天干在线视频| 丰满人妻一区二区三区免费 | 一类无码操逼视频| 欧美丰满熟妇XXXX性ppX人交| 国产亚洲性生活视频播放| 亚洲国产成人7777| 家庭乱伦性爱av| 亚洲色图欧美色图日韩色图| 极品色www影院| 日韩欧美综合激情| 天天看少妇| 色哟哟国产精品免费网址| 欧美中文字幕男人天堂久久精品| 99热精品国产| 亚洲天堂久| 美女黄页网站| 乱欲一区二区| 狠狠干狠狠色| 2019午夜福利视频| 草久在线| AV一区观看| 亚洲一区二区性爱电影| 亚洲高清在线| 鸥美插入视频| 色97欧美| 美女视频尤物网在线看| 91精品综合久久久久久五月丁香| 女一区二区| 偷拍综合亚洲| 国产精品久久aV| 午夜啪啪片| 在线啊v一区| 97超碰色屌| 久久久久幕乱码| 男女啪啪啪18禁网站| 欧美日韩一区二区三区四区蜜桃| 女人的久久久| 午夜精品久久久99热蜜桃的功能特点| 成人羞羞视频国产| 亚洲AV无码乱码在线观看性色| 国产欧美精品日韩区二区麻豆天美| AV丝袜少妇| 日日骚av| 激情五月天丁香社区| 有码人妻系列| 大香久久| 久久精品国产亚洲AV片多多| 青青草视频在线观看一区二区| 久插综合| 男女啪啪网站免费视频| 91人妻最真实刺激绿帽| 丰满人妻一区二区三区在线| 久久内射| 亚洲人妻av| 国产成人+综合亚洲+天堂| 东北老女人的激情视频| 97超碰精品| 2024人人操人人摸| 欧美色图小说综合| 国模艳艳啪啪一区| 欧美熟女丝袜| 久久精品店| 色婷婷成人综合| 亚洲午夜精品久久久中文影院| 曰韩精品视频一区二区| 亚洲精品国产AV天美传媒| 超碰色97| 北京专精特新企业招聘信息| 国产综合久久久麻桃个| 久久香蕉网| 亚洲欧美天| 亚洲巨爆乳一区二区三区四季网| 色综合婷婷| 97超碰巨乳| 男人下部插入女人下部 | 国产suv精品一区二区四| 色五月网址| 香蕉精品二区二区| 在线观看综合精品亚洲| 国产女人高潮视频| 久久久草成人网站久久久草成人久久久草久久久 | 丝袜内射| xxx0国产在线播放| 久久草草欧美精品| 白丝jkav| 国产成人无码a| 亚洲宗合网| 欧美日本不卡| 久超碰在| 青草地一本线一区二区三区| 色妺妺在线视频| 国产女大学生AV| 欧美另类自拍 | 国产乱人妻精品入口| 美女一区二区国产精品| 久久久久99999| 91色综| 在线观看无码三级少妇| 深夜视频| 欧美天天影院| 精品小视频在线| 亚洲第一页色| 久久精品国产免费观看99| 精品人妻免费观看| 人人做人人妻人人夜视频| 久操操| 四虎影视永久在线免费| 亚洲欧美日韩免费观看| 91超碰在线观看| 91强在线播放| 综合网久久| 九九亚洲视频| 97摸视频| 色欲无码人妻日韩欧美精品| 精品免费囯产一区二区三区| 九久9热| 丁香六月东京热| 在线色导航| 一区二区三| 亚欧操逼片在线观看 | 久日91在线| 中国亚洲呦女专区| 欧美专区日本专区| 九九综合久久| 婷婷月色| 殴美牲| 最新加勒比丝袜在线| 亚洲综合精品国产一区| 欧亚在线视频| 99久热| 精品国产精品一区二区| 99热99色| 18一区二区三区| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产白嫩精品久久| 性色av一区二区| 久久人人爽av亚洲精品天堂桃色 | 天天躁夜夜躁狠狠躁AV| 欧美色图欧美| 肏逼福利网站| 无码操逼网| 亚洲日韩肥臀视频在线观看| 天天综合在线4| 老师充足的奶水小说| 嫩草影院永久在线制服丝袜| 久久久女人| 久久久久久久久久久久黄色| 九九热三级片| 日本 情色 1区2区3区| 欧美性生活免费网| 久久黄片国产一区二区| 在线v中文字幕一区二区三区 | 秋霞一级鲁丝片A片| 大香交| 亚洲影院小综合| 国内操逼视频二区| 人人操人人摸超碰| 亚洲成人福利电影免费| 天天影视激情欧美| 天天综合~91| 九九热视频在线观看| 新视频sss国产| 四虎影视国产精品| 国产毛片久久久久久久| 99抽插| 97美日韩视频| 大香蕉丝袜一级片| 啊啊啊啊,啊啊好多水| 国产精品久久aV| 极品五月天噜噜| 精品少妇一区二区三区| 国产后入清纯| 本道在线| 婷婷丁香五月天综合东京热| 色香av| 亚洲密乳AV| 免费人人搞97| 自慰白浆在线观看| 精品人妻一二三四区视频| 98精品国产乱码久久久久久| 欧美亚洲日韩16色| 亚洲一区二区麻豆影院| 大香蕉123| 欧美天天插| 男女性感激情网站| 丰满人妻-区二区三区免费看| 青青草中文字幕| 9久热这里只有精品| 色老汉色| 婷婷久草一区二区三区| 97超碰逼| 五月丁香影院| 中文字幕一二三av| 国产精品操| 国产免a费看黄片在线| 亚洲,日韩,欧美,成人播放| 欧美一级色| 五月天婷婷色| 色婷婷国产精品一区在线观看| 狠狠久久亚洲欧美专区| 超碰成人国产| 人人透人人操| 久久‘黄片视频| 天天色图| 成人午夜高潮av猛片| 青青草一本道福利视频| 国产精品伦理| 91欧美网| 亚洲无码com| 五月天我淫我色av| 天天综合亚洲综合| 国产精品免费久久久久久久久久| 亚洲色图加勒比| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 公司1区2区3区精产精| 亚洲精品天天影视综合网| 久久嫩草国产成人一区| 男人 天堂 日 亚洲| 大香伊人在线一区| 97欧美久久久久久久| 九九免费影片| 综合久久97| 国产精品白丝在线播放| 久久天堂| 99少妇精品视频| 91超碰丝袜制服| 97超碰免费人人性爱| 日本裸体久久色噜噜| 97色干| 93人人操人人| 久久久久久性爱视频| 女人香蕉久久毛毛片精品| 影音先锋日本乱伦| 欧美中字二区| 蜜乳av一区二区| 久九干| 国产精品在线一区二区| 色九九综合AV| 狠狠超| 亚洲另类欧美精品| 青青草字幕AV| 欧美se综合| 精品国产一区二区三区四区在线看| 伦理片秋霞免费影院| 久久人妻97久久久久久久| 果冻传媒A片一二三区| 亚洲精品白浆高清久久久久久| 日本女人操逼| 色偷偷男人的天堂麻豆| 美国黄片aaa| 69AV女优男人的天堂| 久久久青青草| 日韩97视频!在线| 97在线免费视频观看| 美国一区二区免费视频| 丁香婷婷激情五月天无毒不卡| 96麻豆精品一区二区三区| 男女真人网18| 99精品无码| 99视频自拍| 亚洲天在线| 日本污ww视频网站| 免看60秒涩涩视频| 岛国视频免费在线观看| 97在线观看免费视频l| 女人喷水视频在线观看| 青青青草伊人精品| 黄色视频特级毛片| 国语精品av| 天天摸,夜夜摸| 亚洲97| 中文幕97| 免费伦费视频在线观看| 久久精品中文字幕女同| 天欧美在线| 不卡一区视频| 亚洲精品人体| 91色久| 欧美少妇大量自拍视频在线观看| 免费看国产大AB| 久久大香蕉97| 偷拍2020| 4141514逼喷水三级片| 18禁网站在线播放| 中英熟女操女| 九久精品| 亚州图片第一页| 超碰97人妻免费在线| 国产精品suv一区| 国人欧美精品一区二区| 中文字幕亚洲欧美在线不卡| 首页中文字幕中文字幕免费| 天天干干天天干干| 人妻啪| 怡红院视频在线| 天天日骚逼熟女| 熟女人妻一区二区三区| www色色色com| 99re69综合| 精品天堂| 丰满搜索结果 -第18页- 久久高清无码| 美女人妻色网站| 日日日日做夜夜夜夜无码| 成人情色综合网| 欧美论理片| 少妇国产不卡| 91黑丝露脚| 免费综合亚洲中文| AA特级绝黄| 亚洲精品三区在线观看| 欧美国产婷婷久久| 久久久999国产精品| 久草男人天堂| 超碰碰激情97+久| 妇女视频网站| 亚洲不卡av在线| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 欧亚免费视频| AV网站高清无码在线观看| 自拍内地三级在线观看| 欧美日韩1234| 免费岛国一级片| 秋霞Av理论一级在线| 麻豆精品一区二区三区四区免费观看| 91热| 中文久久久| 日韩欧美亚洲自拍偷拍| 98人妻精品一区二区色欲| 欧美精品宗合| 国产乱色国产精品免费视| 亚洲精品尤物yw在线影院| 免费精品人妻一区二区三| 综合欧美激情网| 国产树林里野战在线看| 91亚洲综合| 久久久精品视频免费观看| aa片毛片| 欧美性高潮| 91老熟女老女人国产老太| 色就色综合| 青青草视频久久久久| 亚洲图片欧美色| 中文操逼字幕| 特级大荫道BBwBBwBBW| 亚洲国产丝袜在线观看| AA特级绝黄| 欧美一区91大爱| 激情五月天色色| 久热伊人99re| 久久草视频污视频| 丁香久久| 久久久亚洲欧美综合| 日韩天天本| 欧美一级AAAAAAA| 欧美日韩资源| 国产精品久久9| 少妇诱惑视频| 日韩97在线| 襙一襙| 国产av美女被艹的乱叫| 91丝袜美女| 中文字幕色AV| 精品人妻av在线播放| 白丝少妇一区二区| 岛国毛片手机在线观看| 男人天堂网址| 三级日韩一区二区三区| 久久久极品| 丝袜美腿丝袜| 亚洲色图久久精品蜜| 亚洲日本天堂| 偷拍偷窥与盗摄视频专区| 亚洲无码免费看| 亚洲欧美九九九| 欧美成人性活片| 男人的天堂亚洲| 亚洲色图片区| 九九黄色网| 欧美九九99久久精品| 探花精品 一区二区| 九色 人妻 大香蕉| 中文字幕三四区| 国产精品久久发布| 一本色道综合久久欧美| 日日黄色三级网站| 国产精品露脸在线观看| 国产一区麻豆免费观看| 色综合V| 国产丝袜美腿美女麻豆| 欧亚成人| 98超碰欧美| 亚洲 中文 女同| 74成人在线| 玖玖爱视频网站| 中文字幕一区二区三区蜜臀| 91精品人| 狠色婷婷久久一区二区三区_| 天天做日日做| 天天摸天天操视频| 欧美色三级片91| 成人麻豆av电影网站| 天天爱综合网| 91九九九馒头| 男人的天堂一区三区| 深夜视频| 诱惑人妻欧美一区在线播放| 网页导航五月天免费一二三区 | 在线国产探花| 熟妇乱伦一区二区| 97视频网站在线观看| 五月丁香在线| 夜夜爽夜夜爽| 久久婷五月| 精品国产乱码久久久兰草影视| 男人的天堂VA| 永久免费av无码网站国产app| 久久有码视频| 中文字幕乱碼在线| 综合色99| www.色婷婷| 日韩av免费一级电影| 美女上床网站| 欧美 日韩 婷婷 五月| 日本熟女免费視颖| 美女9118禁| 欧亚日韩一区在线| 色婷婷一区二区三区久久| 青青草原成人| 国产伦精品| 中文字幕在线观看AV| 五月婷网站| 亚洲免费97免费| 五月婷婷色色| 欧美精品xxxwww| 久久AV无码AV| 中国熟妇| 天天日天天操VV| 美女人妻色网站| 狠狠色丁香| 久久老子无码午夜伦不卡| 亚洲男人天堂网| 国产搭汕a级片| 91操人| 不卡九肏| 一区二区三区男女操逼黄色小电影| www.av在线视频| 日日操免费视频| 欧亚日韩中文在线| 国产精品伦理| 日本一线产区和二线产区伦理片| 一区在线观看中文字幕| A片 AV一级在线播放观看免费| 99色网| 五十路一区无码| 欧美真人抽搐一进一出gif| 五月天精品| 精品丰满熟妇人妻一区| 欧美日韩青操| 国产精品69久久久久孕妇欧美| 97超碰中文字幕| 狠狠操狠狠燥| 美女黄页网站| 91超碰在线| 韩国免费播放一级毛片| 亚洲男人综合| 福利在线观看一区二区| 人人做天天爱| 狠狠操一区二区| 色爽爽文学| 美日韩在线不卡人妻| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 无码久| 久久精品一区| 日曰骚久久精品| 日本孕妇一区二区视频操逼免费看| 一二三四视频中文字幕在线看| 国产无码精品无码| 国产福利av精彩对白| 日本天天人人狠狠在线日美女| 久久、1234| 中文字幕黄色一起草| 日本熟女不卡视频| 国产无马av| 四虎视频在线观看| 唯美清纯 妖精视频| 97资源视频| 中文字暮97| 精品人妻视频一区二区在线播放| 囯产精品久久久久久久久久二区三区| 精品视频一二三中文| 乱伦熟妇一区二区| 激情综合婷婷| 96久久科窝| 人妻五十路在线| 69视频入口| 又大又长又爽| 97 超碰 人人做 人人爱| 96一区二区| 天天干人妇| 97超碰免费人人性爱| 91丝袜在线观看| 国产怡红院| 91n欧美| 一色网男人的天堂| 九九热三级片| 久久久无码国精品无码三区三区| 97精品网站| 色爱三区| 中文字幕青青草| www.五月天| 欧美一区二区| 日韩熟女精品无码专区一区二区| 97超碰护士| 十八禁黄色成人网站观看| 九热久| 无码外流操逼视频| 裸体1区| 加勒比久久综合网高清| 91欧洲入口| 性爱动态120秒| 天天cao在线| 老鸭窝亚洲毛片| 91人妻最真实刺激绿帽| 欧美色五月| 久久精品电影| 成人激情无码在线视频| 日韩超碰97| 日本一二区免费| 亚洲精品无码成人久久久99| 欧美日韩人妻精品一区二区三区| 久操99| 啪啪资源网| 欧美色图亚洲色| 日日夜夜噜| 91久久久久久| 九九九九精品九九九九| 日本人妻天堂网站在线播放| 岛国黄色大片网站| jizz啪啪| 精品免费囯产一区二区三区| 白丝AV网站| 这里只有精品视频在线| 午夜无遮挡男女啪啪视频| 日韩资源网| 天天看综合网| 天天天天操| 亚洲精品第一| 操逼网站网站| 一级一性爱免费视频| 亚州,欧美在线| 色臀aV| 欧美最婬乱婬爆婬性视频| 综合色图区| 粉嫩不卡一区二区性爱 | 国产成人精品必看 | 日韩中文欧美| 综合欧美日本三级| 伦伦成年午夜免费视频| 国产精品一区二区校花| 日韩在线地址一| 国产无码久久高清| 人妻铁牛TV| 欧美一区二区成人一卡| 激情露脸爱| 麻豆天美制片厂网站视频| 成人网欧美风情| 欧美 传媒 麻豆 日韩 偷拍| 人人天天干干| 激情丁香五月| 偷拍亚洲高清图片| 传媒免费一区二区三区| 久操视频在线| 亚洲人妻色图| 91亚洲综合| av橘色网站| 欧美色人| 色情乱伦AV| 2017人人操,人人摸| 中文字幕欧美丝袜07资源| 亚洲色图欧美色图日韩色图| 404操逼福利视频| 人妻中文字幕日韩电影| 婷婷五月天成人网| 日韩精彩免费| 一区二区三区男人的天堂| 欧美性暴力猛交| 岛国激情视频软件| 日韩成人综合网| 日本不卡码黄色| 久久精品一区一起草| 78精品| 成人无码电影在线观看网| 国产精品蜜臀久久久久无码AV| 日韩欧美国产高清视频| 殴美,日韩国产伦精品| 男人网站婷婷| 91劲爆| 国产精品麻豆成人av| 色综合色色| 亚洲欧洲无码一区夜| 亚洲自拍偷拍视频在线| 色97| 熟女少妇一区二区三区| 一区二区三| 亚洲精品视频在线播放| 福利大香蕉| 亚洲图片色图欧美另类| 国产精品交换一区二区| 久久人爽| 人妻中文字幕精品无码| 在线观看AV不卡| 久久99国产精品| www.狠狠| 国产97亚洲| 毛片视频白嫩| 精品亚洲| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 国产精品乱码久久久久久久久| 天天色黄色影院天天操| 久久精9| 久久久久久网址| 六六久久日韩不卡| 久久久久女教师免费一区| 亚洲福利中文字幕在线| 黄页网站成人免费| 操逼日韩无码| 亚洲日韩天堂| 欧美色图偷拍另类| WWW啪啪的com| 中文字幕一二三av| 激情五月天综合网| 久久中文字幕在线观看| 色嘟嘟人妻天堂网| 亚洲人成网站7777| 国产精品午夜福利视频| 日韩黄色成人性爱| 性一级黄色录像片网站导航| 精品人人| 97视频免费在线观看| 亚洲另类色图片| 污污汅18禁网站在线永久免费观看| 怡红院成人av| 色五月av| 亚洲欧洲综合成人av一区| 91日韩网站| 97蜜桃综合| 日本一级性爱| 亚洲啪啪视频免费| 骚鸭AV| 久久精品日韩专区免费观看| 国模精品一区二区三区苹果色戒 | 日韩欧美国产高清视频| 秋霞怕怕片| 超碰97人妻自拍| 色老久久| 日夜久久久九九九久| 日本 欧美 亚中文字幕| 免费视频a级毛片免费视频| 精品欧美乱码久| 97网站在线观看 | 97人人操人人摸| 欧美大波激情xxxx| 精品无码一区二区三区| 亚洲国产熟妇综合色专区| 99超碰碰| 亚洲午夜精品久久久中文影院| 青青三级视频| 大香蕉92| 我爱操| 78操B| 久久美国毛片| 四季av一区二区凹凸精品小说| 中国的操老妇女| 丁香7月婷婷| 狠狠爱夜夜| 97超碰超碰| 国内外激情在线| 亚洲第一页色网| 日本一区二区不卡| 91情色在线| 黄片免费日韩| 92性色国产午夜福利在线661| 99亚洲国产精品色一区二区三区| 欧美巨大性舒爽顶到了| 久久色激情一区二区三区| 中文字幕在线免费观看| 亚洲精品一区二区三区新线路| 亚洲欧美日韩二区视频| 一区二区国产视频在线观看| 美女裸体无遮挡永久免费观看网站| 欧美偷| 91天天综合| 三级特黄60分钟播放| 亚洲图片欧美在线视频| 2025亚洲男人天堂| 精品国产72| 91操熟女视频 | 色婷婷小说| 色爱综合网欧美| 午夜经典| 艹精品| 9久久9综合| 97超碰超| 久久精品国产亚洲AV高级北京| 亚洲天堂区| 美女黄色91| 精品视频免费在线一区| 人妻熟女一区在| 欧美人妻另类在线| 老外又粗又长一晚做五次| 五月丁香婷婷综合| 少妇丝袜在线观看AV| 国产成久久综合片| 嗯嗯啊啊啊好舒服| 日本久久超碰| 九九热视频在线观看| 中文字幕在线第二页| 中文字幕一二区二三区人妻专区| 欧美日韩99精品麻豆传媒| 久99在线免费观看视频| 欧美三级中文字幕hd| 亚洲美女黄色| 国产精品嫩草影院免费| 亚爽爽爽爽爽爽爽爽| 日产欧美电影一区二区三区| 99re这里只有精品中心播放| 亚洲欧美日韩不卡人妻| 激情五月综合网| 久久内射| 老熟女熟妇| 韩三级a视频在线观看| 91美女在线视频| 小视频国产| 学生妹天天看| 九九久久99| 美女91网站| 欧美色图成人网一区二区| aa片毛片| 久久视频少妇美女| 国产极品美女高潮无套在线观看| 日本中文字幕一区| 免费看一级a性色生活片久久无| 久久久涩| 九一综合精品视品av| 日本熟女中文字幕一区| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 中文字幕诱惑制服人妻丝袜美丝袜美| 大香蕉123| 大香交伊人网| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲综合影片| 久久有碼| AV女资源| 欧美一区二区三区不卡高清视频| 艾草av| aⅴ日韩成人电影av在线免费看av大全| 91丨人妻丨国产丨丝袜| 91大胆欧美| 天天色综亚洲91污| 草草影院最新网址| 乱伦熟女论坛| 久久免费9| 欧洲一区二区| 骚日日av| 91久久国外网| 人妻激情偷乱视频一区二区三区 | 97av,com| 日日摸日日弄日日拍| 亚洲伊人成综合成人网| 亚洲欧美日韩免费观看| 欧美日韩中文字幕不卡| 超碰97人妻自拍| 国产一级片| 思思热在线视频免费| 亚欧美色图| 抽插爽| 日本大片日本一区二区免费高清| 被男人吃奶很爽的毛片| 欧美成人一级麻豆| 校园春色五月天| 张柏芝国产一区在线观看| 加勒比性爱成人在线| 久久久一区二区三区四曲免费听| 亚洲天堂少妇| 人人澡人人弄| 日韩无码AB| 色九九久九九| 欧美丝袜美女电影一二三四区| 天天影视网综合少妇| 370p日韩欧美亚洲精品| 精品国产一区探花在线观看| 亚洲九九爱| 色啪网| 亚洲av综合伊人久久| 中国乱伦一区二区| 久久精品国产久精国产| 一牛影视久久久一区二区三区| 激情五月天丁香社区| 国产强上视频在线观看| 中文字幕日韩人妻视频一区二区三区| 国产久久成人| 大学生口爆吞精| 欧美黄色大片在线观看| 欧美性爱1080p| 99精品欧美一区二区三区桃色| 亚洲天堂中文字| 免费作爱一级视频| 亚洲天堂区| 中文字幕加勒比海高清无码免费视频| 日本不卡高清免v欧美日韩在线观看| 国产精品视频播放| 青青草国产一区二区三区| 亚洲91网。| 国产青青综合伊人| 色综合91好| 操婢日韩| 9久久精品| 国产夜夜艹| 性高潮久久久| 国产精品高清2021在线| 午夜久久无码1000合集| 精品少妇一区二区三区免费观看| 殴美综合色88| 欧美精品系列| 欧美大香蕉久| 九九热超碰| 超碰天天操| 久久久久久久精| 精品少妇一区二区三区在线视频| 精品夜夜澡人妻无码| 熟妇高潮精品一区二区三区下载| 婷婷久月| 亚洲欧美成人在线| 欧美丝袜美女电影一二三四区| 亚洲欧美不卡线| 日本激情免费大片| 久日91在线| 100啪啪视频大全| 好淫网一二三视区| 欧美日韩欧美| 97色色视频| www.人人摸在线视频| 最新三级网址| 久草毛片电影怡| 国产美女销魂在线观看不卡| 欧美少妇熟女| 欧美偷拍| 国产精品一区二区三区在线密挑| 国产美女91| 国产18精品亚洲精品| 欧美精品不卡一二三四在线91| 国产女人与拘做受视频免费| 欧美国产有色电影| 日韩精品一区二区高清| 黄色十八禁网站| 天天狠操| 亚州熟妇精品| 国产精品毛片?v一区二区三区| 亚洲欧美爆| av天堂天堂av日韩| 乱子伦一区二区三区国产精品| 亚洲性爱电影| 红杏大香蕉| 日韩99999| julia高潮后不停追击中出| 啊啊啊啊操死我| 北条麻妃性愛视频| 亚洲九九夜夜| 国产精品麻豆免费视频| 久久久精| 美女露胸露屁股| 亚洲AV性爱电影| 九九热av| 九九热午夜欧亚国产视频| 亚洲色图大香| 国产一区在线免费播放| 97免费视频在线| 伊人久久亚洲中文字幕不卡| 欧美日本一区二区a人| 欧美在线|亚洲| 999综合色| 超碰亚洲97| 99热精品在线在线| 免费精品人妻一区二区三| 麻豆三极片| 亚洲熟妇白浆无码AV| 蜜桃久久久久久久久久久久| 婷婷五月天综合网| 欧美劲爆视频一区二区| 牛牛AV人人夜夜澡人人爽| 日韩精品午夜操呦呦不卡影院| 亚洲色9| 97人妻色| 97精品国产97久久久久久免费| 国产偷拍自拍在线视频| 91bbbbbb| 超碰人妻久久| 极品少妇久久久久| 伦理日韩国产久久| 免费视频一二三区| 后入式999| 欧美另类综合久久| 欧美国产精品久久九九| 亚洲资源站| 九月伊人中文字幕| 中出20p| 亚洲人妻色图| 欧美综合色图片| 久久久亚洲精品中文字幕人妻| 91激情国产| 亚州欧美在线| 欧美九九九九九| 久久伦理视频久久大香蕉视频| 欧美色日| 久久九九热| 久久午夜色播影院免费高清| 99re在线| 玖玖玖玖精品国产剧情| 极品白嫩美女白浆成人福利在线看| 日韩一级片在线看| 婷婷五月天色色| 亚洲天堂另类美腿| 国产男女无套97| 国产精品3| 国产女人视频三四五区| 国产精品999aaa| 国产久久av| 日日干日日| 亚洲综合图片在线| 情色大香蕉| 国产91啪| 大香樵伊人网| 亚洲色图 综合| 欧美九九九九九| 免费一级特黄特色大片在线观看看| 美国aaaaa一级黄片| 日本综合色图| 色九九综合AV| 欧美亚洲高清晰| 9国产超碰| av天堂精品久久| 久久色情| 91操人| 亚洲中字幕日本一区二区三区| 东北丰满熟女国产一区| 亚洲综合精品国产一区| 99蜜桃臀久久久欧美精品网站| 一区二区国产视频在线观看| 成人免费性爱视视| 五月丁香久久| 啊啊啊好大好深| 婷婷影院入口| 人妻喷水| 欧美v亚洲v日韩v最新在线二区| 91人妻久久久久久久久久久久久| 男人天堂电影院| 91夜色chaopeng| 午夜毛片亚洲精品片国产久久久| 日本一区二区不卡精品| av线电影| 婷婷久草一区二区三区| 精品人妻免费观看| 欧美性综合| 色五月综合网| 乱操乱伦AV| 中出欧美| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 欧美日韩大陆黑人少妇99| 操逼网站网站| 亚洲素人综合| 91丨九色丨国产打屁股| 久久性爱视频99| 五月天久久婷婷亚洲 | 人妻精品一区二区| 丁香五月影院| yiqicaoav| 亚洲欧洲色情高清| 国产精品免费视频不卡| 日韩女优中文字幕| 青娱乐淫乱1314| 乱子伦一区二区三区国产精品| 99热在线只有精品| 国产久久久9999| 影视综合无码少妇| 校园春色美腿丝袜| 久久精品性| 欧亚日韩中文在线| 中文字幕88av在线| 超碰av在线| 九月丁香婷婷色| 国产精品操| 亚洲男人的天堂网| 天天欧美欧美亚洲网| 日日操免费视频| 国产精品视频在线观看| 啊啊啊好爽快点啊啊啊嗯嗯| 国产精品视频一区二区三区八戒| 91色插| 亚洲天堂区| av天天在线观看| 97人人射| www.色操逼| 天堂8在线新版官网| 性爱网站一区二区| 亚洲在线欧美| 91国产丝袜白虎| 台湾佬中文娱乐网久久久久久久久久com | 久日综合网| 开心六月色| 熟女丰满人妻一区| 激情小说五月天| 欧美亚洲综合色| 九九九九精品在线| 成人精品水蜜桃久久久久久久| 精品人妻一区二区三区-国产精品| 天天干天天干天天干| 国产精品久久久久久久久久久久久久| 98福利在线视频| 伊人991| 日韩中文字幕宗合在线| 色臀aV| 久久激情视频| 日韩三级av片| 色综合91好| 神马久久午夜| 射久久|