色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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| 亚洲脚交| 奇米狠999| 中文久久96| a片偷拍视频| 91爽啪| 亚洲色交| 神马精品视频| 91另类| 在线观看综合精品亚洲| 一本大道青青| av天堂影视中文在字幕在线中文| 久久大香蕉97| 婷婷激情五月| 日本成a人v网站在线观看| 亚洲综合小说另类图欧美视频激情小说色五月天 | 亚洲97综| 丰满少妇人妻久久久久久| 色香综合| 熟女中出视频| 中日韩久久久| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 天美传媒精品久久视频| 999熟女精品| 97在线视频观看网站| 日本日日色视频| 精品无码久久久久久国产浪潮| 色九九九| 色婷婷综合网| 欧美999| 久久国产对白激情浪潮 | 青娱乐91| 伊人aaa| 久久综合激情| 亚洲天天综合| 欧美91精彩| 探花精品视频| 人人操人人色网| 亚洲精品骚逼| 色官网在线| 国产9熟妇视频网站| 人妻熟女午夜精品在线| 国产亚洲日韩在线三区黑人| 新91视频.cmp| 中文字幕视频2区| 91在线超高颜值国产| 中出在线视频| 校园春色综合色| 国产精品一二三在线看| 欧美97超碰| 色天堂综合| 婷婷爱五月| 人人干人人操人人爱| 日日噜噜夜夜久久亚洲一区二区| 亚洲日韩一区电影| 综合欧美激情网| 日韩情色一区二区| 热热色青青草| 亚洲天天影视色综合| 亚洲日韩精品在线播放| www.亚洲黄色| 热99这里有精品综合久久| 日韩中字av一区| 成人八戒网站| 精品国产一区二区三区在线播出| 97精品全部| 屌妞视频久久久久久久久久久久| 长长久久免费视频| 日本成人电影资源网| 一区二区三| 伦理日韩国产久久| 久久久熟妇熟女国产| 国产精品亚洲一区二区三区四区| 午夜乱轮操逼视频免费看| 少妇贴图| 国产自偷| 国产精品一区二区麻豆| 久操影视| 北京美女一区二区| 国产老熟女| 玖玖婷婷五月天| 免费一级特黄特色大片在线观看看| 国产精品夜夜| 97爱爱| 99少妇| 国产青青美女玩逼视频| 白丝少妇一区二区| 老师充足的奶水小说| 婷婷五月天成人网| 日本3级一区二区免费| 伊人网青青| 好吊色综合| 91在线国产后入风骚翘臀美女素人| 美女主播色欲91抠b在线播放| 亚洲中文字幕精品久久久久久直播| 翔田千里AⅤHD无码| 蜜臀AV午夜精品久| 热思思免费视频| 亚洲精品欧洲色| 九九九九九九免费视频| 久久美女国产| 黄色操人| 尤物网址| 欧 美 自 拍 偷 拍| 亚洲天堂五月天国产| 91网站18禁| 日本在线伊人啪啪| 九久久九九久视频| 日本男人天堂| 9色国产精品一区粉嫩 | 精品人妻15区| 高清无码91| 欧美男人的天堂| 在线观看啊啊啊啊啊| 少妇高潮九九九九九九九| 夜夜高潮夜夜爽国产伦精品| 欧美图片校园春色| 97网色| 伊人九九九| 九九久久久| 人人妻人人爱人人玩| 国产精品天堂| 26uuu性| 亚洲一欧洲中文字幕在线| 中文字幕丝袜国产第一页不卡| 大学生口爆吞精| 精品偷拍13p欧美dodk视频| 午夜影美女日鸡鸡天天视频国产| 五月婷婷色| 久久久久骚| 综合久欧洲| 精品久久大胆人体| 最新制服中文第一页| 婷婷色香伊人| 日韩成人精品视频自拍| 开心五月婷婷激情| 久久婷婷欧美| 亚洲精品少妇| α√在线| 夜夜操天天肏| 九热久| 少妇一区二区三区精选| 精品久久99| 草b在线| 九九国产热| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 九九九影院| 中文字幕av片| 国内精品嫩模A∨私拍小视频| 在线免费观看日韩一区| 欧美午夜精品久久久久久3D| 久久草视频污视频| 一区二区高清视频| 欧美色色色| 嗯阿好爽好紧| 搡老女人老91二区| 搡老熟女老女人老熟妇免费视频| 二对二中文字幕。| 亚洲 欧美 色图| 中文字幕AV乱伦| 日韩一级成人毛片免费观看 | 日韩成人在线性爱视频| 亚洲成人在线播放| 台湾佬中文娱乐网久久久久久久久久com | 毛片一区二区| AV九九| 色 亚洲 91| 91精品人妻一区二区三区蜜桃| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 色婷婷综合久久久久中文一区二区| 中文字幕超碰CAO| 东京热综合久久一区二区| av天堂精品久久| 麻豆天美国美国产| 999久久久国产精品| 一线黄色免费性爱片| 国产毛片精品一区二区色欲黄A片| 亚洲蜜臀懂色| 欧差乱伦二三| 日韩pv中文| 日韩精品资源| 亚洲操逼视频网站| 日韩 女同 综合| 综合av社区| 九九视品黄色| 亚洲无线观看久久| 人妻日日夜夜精品| 综合色一区三区二区| 久久久久国产精品喷潮免费观看臀| 翘臀vidoes| 东京热91| 爽爽淫人网| 熟妇高潮二区三区| 欧美黑人精品一区二区| 大香蕉2017| 中文字幕交换人妻| 亚洲资源网| 操逼逼一区视频| 大香蕉伊人网WWWn0n| 变态综合色| 欧美精品日韩一区二区| 中文字幕欧美日本乱码一线二线| 日韩一级特黄av毛片| 一区二区视频你懂的| 亚洲欧洲无码bt精品合集| 中文字幕啊啊啊在线观看视频| 桑老女人九区| 99ri精品| 国产剧情在线| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 一区二区三区机械有限公司| 91国产丝袜美女| 亚洲天堂AV在线播放| 少妇一区二区三区在线观看| 黄色激情电影在线观看| 婷婷美人网| 做爱A级亚欧| 亚洲综合性网址| 狠狠中文字幕| 91老妇女| 天天色香欲综合网| 免费αⅴ在线观看| 欧美偷偷网| hd成人一区二区在线| 亚洲欧美综合网站| 口爆综合网| 日韩在线国产字幕| 欧美亚洲se91| 久9视频| 色逼综合| 麻豆伊人网| 91社区拍啪人妻| 91欧美www| 熟女丰满人妻一区| 免费观看的黄色的网站| 九九热av| 和协影院中文字幕三区| 91狠狠综合久久| 97色碰| 97精品久久久久久久| 天天综合网日韩7799| 美女上床网站| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 东京热91| 国产美女精品| 亚洲少妇喷视频看| 免费一级特黄特色大片在线观看看| 少妇特黄一区二区三区| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 亚洲涩图欧美| 亚洲欧洲偷拍一区| av无码av无码专区| 色综91| 亚洲色情在线影视| 嗯嗯啊啊操死我| 亚洲国产一级精品毛一级精品看免费视频 | 欧美图片偷拍| 在线性黄高清免费视频| 亚洲激情综合另类男同| 99re视频这里只有精品| 亚洲综合贴图91 | 嗯嗯啊在线视频| yellow网站免费观看日韩高清无码| 99少妇| 亚洲综合99999| 五月丁香六月婷| 金莲网址| 国产性爱在线视频一区二区| 欧美一二三| 综合网亚洲1| 麻豆AV一区二区| 可以免费观看的AV| av天堂5| 久久riav中文精品| 日产欧美电影一区二区三区| 97超碰日韩| 国产AB视频| 日本999精品视频| 视频在线观看一二三区| 亚洲天堂电影精品一区| 9久久精品| 欧洲成人性爱视频| 欧美性爱无码一区二区三区| 国产乱伦搜索结果91P| 综合网亚洲在线| 免费97视频| 日本不卡二三区| 精彩视频日韩| 99啪啪视频| 久久精品欧美一区蜜桃| www.狠狠干.coom| 自偷自拍的亚洲视频| 精品国产人成在线| 韩国成人精品久久久免费看| 免费的黄片wwwwww| 操B在线观看| www亚洲免费| 一级做受视频免费是看美女| 久久精品 六十路 熟女 欧美| 百度百度日本操逼| 激情 欧美 亚洲 小说| 大香蕉乱级| 亚洲男人在线观看天堂| 蜜臀久久久99久久久久 | 精品无码久久久久久国产浪潮| 神马九九| 中文操逼字幕| 日韩免费在线视频观看| 中文字幕精品日韩中文字幕| 人妻中文字幕日韩电影| 噜噜噜无码AV一级一级久久影院| WWW黄片COM| 在线视频日韩欧美国产| 婷婷五月天伊人| 国产亚洲 中文欧美久久| 99re9在线| 乱日视频| 欧美传媒一区| 人妻丰满熟妇av无码区蜜桃| 99久久99久久免费精品蜜臀| 搞中出久久| 国产精品69人妻无码久久久| 亚洲精品日韩国产欧美| 91色综| 色爱欲亚洲| 亚洲男人天堂2016| 婷婷人妻激情| 伊人一区二区在线播放| 久久免费精品视频免一| 女人的久久久| 青青草无码视频| 色欧美色交综合| 97在线视频免费| 无码高清操逼网址| 国产精品无码AV网站| 婷婷成人五月天| 国产亚洲欧洲在线观看| 加勒比无码毛片| 日韩精品人妻| 精品超碰国产| 人妻人人澡人人爽人人| 9丨久久九九九| 狠狠操官网| 欧美操人| 天美传媒在线一区| 美女诱惑久久| 午夜精品五区| 中国小夫妻勾搭露脸淫荡对白| 国产熟女一区二区| 久久性爱大全| 97看操| juliaann丝袜| 欧美日韩性爱操大逼| 第二页中文字幕| 久久精品一区一起草| 久久久性| 欧美色图天堂在线| 丝袜美腿91| 一类无码操逼视频| 久9久9精品| 色香天天| 伊人五月天| 91色s| 日韩欧美操逼xxx| 中文字幕在线播放2中文字幕在线观看2| 97色色,97综合| 2024黄色视频| 91xingse| 中文乱码字字幕在线第5页| 日本综合色图| 久久久草草精品| 视频黄色国产一级| 神马久久中文字幕| 亚洲无线观看久久| 亚洲有码 欧美精品| 日韩在线观看AV| 日韩 欧美 视频 在线 一区| 国产亚洲深夜激情| 91熟女熟妇视频网站| 舔舔啊| 国产Aα| 啊啊啊快操我视频| 在线有码中文字幕| 日夜久久久九九九久| 国产精品不卡高清在线观看| 久久免费中文字幕在线观看| 偷拍盗拍亚洲色图图片| 久久极品一区二区| 操东北女人| 亚洲欧洲偷拍一区| 综合色一区三区二区| 色色国产| 91天美| 91狠| 国产91亚洲精品一区二区三区| 日本在线不卡123| 色汉综合| 精品97久久综合| 午夜激情成人在线观看| 熟妇人妻一区二区三在线| 国产精品毛片?v一区二区三区| 欧美性爱一内片一区二区三区| 欧美黄色手机在线观看| 白丝少妇一区二区| 免费观看的黄色的网站| 99热婷婷一区二区三| 激情婷婷丁香| 国产v片在线免费观看| 人人澡人人爽人人精品| 手机看片日韩人妻| 亚洲蜜臀视频精品久久| av天堂手机版追回| 五月天亚洲色图| 九月AV| 亚洲AV噜噜狠狠网址蜜桃动漫| 久久啊啊啊视频| 自拍偷拍2025在线观看| 天天cao在线| 久久精品视频久久久| 桃花色综合影院| 亚洲色图欧美色图制服诱惑| av在线资源| 亚洲美女AV无码| 久久一二三四五六七八九区区| 啪啪视频亚洲第一| 东北熟女91| AV老汉| 五月丁香社区婷婷日韩欧美精品影院| 熟女精品日韩一区二区三区| 青青草日本中文字幕| 亚洲女毛多水多21P| 夫妻天天操岛国视频| 99啪啪视频| 久久肏大逼| 欧美色偷偷| 2026国产精品视频| 天天摸天天插天天日| 青娱乐国产精品| 精品久| 蜜乳av一区二区三区| 国产精品女同| 婷婷深爱五月| 国产精品久久天天干| 日韩内| 嗯嗯啊啊好疼| 在线观看一卡二卡| 日韩性爱网址| 日逼逼免费看| 另类图片综合| 91模特在线观看| 国产二区三区粉嫩在线| 九九精品美女高溯喷水| 欧美很很操视频| 日本色色视频网站| 又粗又长又大国产不卡| 乱人乱色一区二区三区免费 | 精品人妻美妇91job| 色欲三区| 人人性爱视频免费| 网友自拍第1页| 日韩色女精品| 九九英色视频| 精品无吗久久| 日韩精彩免费| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 色五91| 99操碰| 成人网站 免费观看| www.久久制服糖| 91色色网站| 九九久久久| 青青在线视频免费| 欧美性夜| 一级二级在线观看| 亚洲人天堂| 天天爱天天操| 大香蕉综合网| 91欧美综合| 屁股久久久久久| 亚洲色人阁| 91精品国产91熟女| 欧美在线电影| 欧美+日产+中文| 台湾佬大香蕉| 欧美色图91| 欧美亚洲图片| 国内毛片欧美香蕉精品| 97亚洲精品| 自拍偷拍 日韩欧美| 国产综合色精品在线观看| 搡老女人老熟女91| 视频一区二区免费在线| 人人操 欧美| 久久久久久久久久久免费精品| 韩国免费播放一级毛片| 国产精品探花色| 天天操天天干一区二区| 国产成人精品日本视频| 青青草天天亲夜夜操网| 五月婷婷激情综合| 熟女丝袜视频| 国产一区麻豆免费观看| 日本黄页视频在线观看| 啊啊啊啊好疼| www.亚洲黄色| 黄色视频特级毛片| 亚洲综合春色| 一级黄碟在线观看| 国产蜜臀在线| 欧美少妇色图| 99色热国产视频精品| 国产小u女在线观看| 91丨九色丨熟女高潮| 中文字幕在线观看丝袜| 日韩懂色网| 九九人妻| A 天堂| 天天视频黄网站| 丁香五月激情啪啪| 99精品网站| 97精品视频在线| 999久久久国产精品| 国产在线观看一区二区三区| 午夜寂寞欧美| 日本精品人妻少妇一区二区| 少妇精品久久久八区九区| 日韩有码专区| 中文字幕乱在线伦视频中文字幕乱码在线| 五月丁香综合啪啪| 91色爽欧美| 天天综合网~91| 亚洲成人精品在线一区| 天天看,天天做| 成人熟女视频一区二区三区| 色97国产69香蕉| 亚洲欧美成人网站AAA| 免费A V在线播放| 日韩亚洲美女一区久久| 啊啊啊啊啊啊啊网址在线观看| 欧美色图第一页| 亚洲av影音先锋| 泰国AV在线观看| 日韩欧美中文字亚洲慕| 一级人妻性爱视频| 久久久久13| 成人日本片久久久蜜桃| 黄色电影在线播放综合网站 | 欧美一级黄片视频在线| www.91色综合| 啊啊啊 在线| 亚洲天堂中文字| 夜夜操av亚洲一区二区| 伊香蕉综合久久久久久久噜噜噜| 中文字幕奈奈美被公侵犯| 麻豆亚洲Av成人无码一区精品| 丰满人妻一区二区中文| 最新av中文字幕高清| 七久久久| 不卡视频一区蜜桃视频| 视频分类 国内精品| 精品无码人妻一区二区免费蜜桃| 日本一级特级毛片视频| 狠狠久久亚洲欧美专区| 亚洲综合在线91| 国产一区二区视频在线播放| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 欧美性爱97超碰| 亚洲欧洲日韩中文字幕一区| 一级啊性爱在线视频| 欧美综合制服在线| 欧美熟妇成人一区二区| 91人人看| 大JI巴好深好爽又大又粗视频| 欧美少妇熟女| 精品午夜福利| 蜜臀久久99精品久久久久久久久| 少妇熟女一区二区三区| 色五月综合| 啊啊啊啊好多水| 久久婷婷伊人| 啊啊啊啊啊啊啊啊视频| 很很干很很操| 超碰97久久| 热天堂一区二区| 日韩三级伊人| 日韩av色图综合| www.yeyecao| 中文字幕日韩人妻视频一区二区三区交换夫妻| 日本人妻伦在线中文字幕| 操美女人妻| 内射小黄片| 日韩图区| av资源在线观看少妇| 日韩大香蕉AV影片| 色哟哟国产精品免费网址| 日韩国产精品人妻无码久久久| 日日夜夜骚| 在线岛| 美女91色黄18| 婷婷五月天成人| 麻豆精品一区二区三区四区免费观看| 熟妇女人妻呻吟久久AV| 欧美日韩日产免费网站看| 日本黄色天堂| 五月婷婷丁香| 青青操网| 欧亚韩国999| 久久精品小视频| 国产1024在线播放| 爱妻综合网| 婷婷五月天网| 日韩无码精品综合久久| 国产精品午夜精品| 97人妻色| 精品久久久久av影院| 97在线公开视频| 人人喜人人妻| 操逼视频亚洲| 在线观看中文字幕| 校园春色综合香蕉| 丁香五月综合| 久久一区二区高清免费| 蜜臀久久99精品久久久久久酒店| 欲色影视综合吧| 熟女突然公开看18禁影片| 2021国产成人精品久久| 久久综合久色欧美综合狠狠| 亚洲男人bt天堂| 亚洲 自拍偷拍 欧美| 青青草公开在线免费不卡视频| 国产精品高潮久久久无码| 久久99草| 91在线美女| 操逼逼无码| 国产视频一区二区三区在线免费观看| 色九九九九九九| 校园春色欧美色图| 天天日天天舔天天喷天天射| 亚欧成人综合影院| 亚洲情色综合| 久久久涩| 久久偷偷色综合蜜桃| 一本正道久久熟女| 色久综合| 天天做日日爱夜夜爽| 日本乱人伦片中文三区| 啊啊啊啊好疼| 国产自啪精品视频网站黑丝| 成人A片男人的天堂| 午夜精品一区二区三区三上悠亚| 夜间福利片1000无码| 国产久久免费精品视频| 99re这里只有精品9| 性生活性生大爱77AV国产| 天美传媒在线一区| 丰满少妇一区二区三区专区| 能看的AV| 午夜丁香婷婷| 免费看久久久性性| 粉嫩不卡一区二区性爱| 国产黄色影片在线观看| 欧美gv在线观看| 啊啊啊啊啊啊在线观看| 91丝袜| 亚洲高清91| 国产超碰97| 成年人免费观看网站| 欧美乱妇狂野欧美在线视频| 久久神马影院| 欧美激情片一区二区| 中文字幕精品人妻丝袜| 嗯嗯嗯嗯啊啊啊好紧好大| 亚洲五月丁香花狠狠干一区二区三区| 抽插无码高清一区| 亚洲国产一区二区三区四区国产| 亚洲精品啪视频| 美国aaaaa一级黄片| 亚洲自拍天堂| 国产AV激情无码久久无码 | 性爱综合一区二区| 熟妇xxxxx性春色| 97人肏| 成人影 天天操 亚洲| 青青草日本无码| 日韩免费人妻色情网站| 女同亚洲欧美一二三区久久电影| 爽爽歪在线视频| 毛片视频白嫩| 丰满少妇高潮无码| 久久久久久久久久久久欧美日| 91美女視頻| 91久久精品美女高潮喷水| 欧美日日人人天天| 国产欧美另类久久久精品课程| 午夜九九九九九九| 亚洲自拍偷拍视频在线| 黄片免费视频2019| 操我无码| 亚洲婷婷五月天| 亚洲中文制服诱惑| 性老妇一区二区三区| 啊啊啊啊好大好硬啊啊啊啊啊| 青久久| 青青草好吊色| 日韩成人在线性爱视频| 黄色av片三级三级三级免费看| 婷婷色婷婷| 久久手机视直播| 欧美亚洲厕所精品偷拍91 | 亚洲天堂自拍| 天堂精品一区| 日韩无限资源| 日韩国产欧美伦理在线| 黄网色一区二区三区四区精品| 91丨九色丨东北熟女| 免费看污网站| 亚洲青青草| 97精品免费视频网站| 伊人丁香五月婷婷| www.色五月| 99热免费精品| 五月天日日操夜夜操| 国产精品美女久久久久久网站| 隔壁邻居波多野结衣中文字幕 | 成人 日本A片无码8888| 嗯啊不要啊在线 | 97超碰巨乳| 97视频播放| 久久透逼视频| 五月天婷婷久久| 久9久9精品| 酒色综合网| a天堂视频| 无码91| 92大香蕉| 日韩精品在线观看观看| 亚洲宅男天堂| 九99久久| 欧美自拍偷拍综合图片| 久久思思热| 无码人妻系列少妇| 日本成熟少妇A∨网站| 久操热线| 欧美国产操逼| 蜜乳AV免费观看| 天天干,天天日| 无码操逼天堂| 中文字幕乱码人妻二区三区| 国语人妻精彩刺激| 曰本特级特黄特色黄色A级网站高清在线免费看 | 先锋音影AV| 国产精品午夜AV完会免费 | 国产隔壁老王影院在线| 91黑丝露脚| 国产suv精品一区| 777AV电影| 中文字幕av久久爽Av| 无码粉嫩白虎一线天b区| 强奸乱伦动态污图免费| 超碰98综合网| 你懂的在线观看区国产| 夜夜肏2021| 欧美成人精品一区| 再深点灬舒服灬太大了好硬好爽| 久久精品中文字幕女同| 久操com| 亚洲精品欧美专业| 久久婷婷电影网| 亚 欧 美 综合| 精品对白久久不卡| 欧美色婷婷| 全国男人天堂网| 91干熟女| 91精品国产长腿丝袜美女| 岛国黄色大片网站| 91熟女.com| 图片区小说区| 91熟女少妇| 婷婷亚洲五月***久久| 色香91| 国产树林里野战在线看| 国产少妇内射| 黄色av一区二区在线| 91无码人妻精品一区二区三区蜜桃 | 天天久久| 国产日本熟女顶级一区二区三区视频| 亚欧成人一级片在线播放| 久久99热这里只频精品6学生| 蜜桃传媒视频第一区入口在线看| 大香蕉综合在线| 97鸡把在线视频| 免费观看欧美日韩操逼视频| 中日韓欧美高清| 偷窥自拍亚洲色图| 成人一道本免费视频| 丰满少妇高潮无码| 草草网站影院白丝内射| 综合色久欲| 99久在线精品99re8热| 日本色日夜干| 亚洲丝袜色图| 久久精品国产亚洲AV嘿嘿| 亚洲综合另类色图| 天堂岛av| 伊人久久综合影院精品久久久| 国产偷仑| 91干熟女| 五月天亚洲色图| 亚洲少妇在线影音| 久久精品国产72国产精品福利| 久久老熟女| 欧美天天综| 一级特级aaaa毛片免费观看| 就去色综合| 五月天黄色av| 日韩精品黄片免费观看| 大逼色网站| 丝袜制服字幕在线| 日韩少妇一区二区三区| 国产久久久久久| 亚洲激情天堂网| 亚洲激情综合| 美女视频尤物网在线看| 公司1区2区3区精产精| 日本特黄f c2| 欧美日韩 强奸乱伦| 校园春色五月天| x97av| 69精品在线| 郑州宾馆老熟女露脸啪啪| 91熟女丨老女人| 东北老女人的激情视频| 人人扣人人操| 日韩无码三级影院| 天天做天天爱| 亚洲男人天堂2| 岛国AV一区二区电影| 国产三级日产三级韩国三级| 91亚洲高清| 精品二区三四区五电影 | 激情久久av一区av二区av| 高清有码一区二区| 国产精品久久久午夜夜伦鲁鲁| 亚洲另类久操网| 久久精品性| 一级岛国大片| 欧美天天综合网| 九99久久| 久久久久密臀一区二区| 偷拍欧美综合| 91超级碰碰碰| 粉嫩粉嫩一区性色AV片| 立川理惠被中出无码| 亚洲精品蜜桃久久久| 1204av韩国| 色综合一区二区三巨| 天天看,天天做| 国产精品嫩草久久久久| 人人摸人人入| 少妇高潮九九九九| 蜜桃午夜视频一区二区| 新精精品久久精品| 天天综合欧美综合| 九久9热| 国产原创自拍| 性爱av在线免费观看| 国产亚洲精品农村妇女| 久久午夜鲁丝片| 欧美第一页| 91精品人妻一区二区三区蜜桃| 97久久国产精品| 走光一区92下载| 蜜臀人妻少妇久久在线观看| 毛片99-全集电影手机免费观看完整-B029AV | 国产精品天干天干综合网麻豆 | 久久久网站| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 最新国产精品久久精品| 日本一区二区三区四区免费观看| 91精品久久久| 免费?级毛片无码?∨蜜芽试看| 97在线观看免费视频| 日韩小电影| 福利视频网站| 东京热毛片177b2viP| 超碰碰97资源站| 9久久久久久| 日本媚薬中文字幕在线| 快灬快灬 一下爽蜜桃在线观看| 偷窥自拍亚洲| 99热精品在线观看| 黄色工厂这里只有精品| 伊人麻豆传媒| 中文字幕三四五区| 蜜臀久久99精品久久久久久无删减 | 亚州色阁| 国产精品午夜精品| 久久精品国产97欧美精品亚洲 | 1024手机看片欧美日韩| 亚洲色图伊人网| 精品女同一区| 巨乳特殊服务按摩| 青青草好吊色| 午夜操一操| 91大神精品长腿在线观看网站| 日韩欧美操逼xxx| 啪啪视频亚洲第一| 天天干夜夜一操| 亚洲欧美经典一区二区| 一本道综合色图| 久操B网| 金典av| 天天影视综合色| 天天噜| 伊人专区一区二区三区| 成人性爱视频在线看| 久久久精品视频免费观看| 久久丁香五月天| 麻豆天美国美国产| 蜜臀久久久| 久久久一二三四区| 97色网| 日韩美女操b| 国产成人综合网| 97色诱| 亚洲,欧美,综合网| 好色综合| 日韩精品1区2区中文字幕| 一区二区三区四区色图| 欲香欲色天天天综合和网| 国产精品久久久午夜夜伦鲁鲁| 欧美亚洲中文| 国产Aα| 五月天激情网图片| 综合天天网| 91情色在线| 高潮毛片无遮挡高清免费| 激情专区综合| 75大香蕉| 亚洲熟女人妻中文字幕一区二区| 性爱综合一区二区| 欧美日韩成人在线| 中出789在线视频| 欧美色图20P| 中文字幕日韩人妻视频| 久9热| 欧美传媒一区| 91在线免费精品视频| 人人干人人搞人人摸| 日韩丝袜人妻AV| 999热日韩精品| 18禁免费视频| 久妇网| 97精品一区二区视频在线观看| 狠狠色伊人亚洲综合网站色| 97天堂| 免费超碰97久久| 狠狠婷婷亚洲中文综合久久| 日本精品第一视频在'| 欧亚不卡| 在线中文字幕视频| 深夜激情无码| 天堂射| 插入逼91| 深爱激情五月天| 亚洲人精品久久久| 中文字幕一区二区三区高清| 91啪9色| 日韩精品一区二区人人人| 熟女精品va中文字幕| 色五月69夫妻| 精品人妻一区二区三区四区不卡在| 欧美一区二区观看在线| 九九亚洲精品| 伊人操你| 九九热精品在线| 天天射夜夜骑| 亚洲色久| 一本久久久精品| 欧美久久伊人| 日本孕妇孕交| 国产中文大片资源中文字幕| 男人的天堂色偷偷青青草视频婷婷网| 欧美爱爱97| 一本一道人妻久久一区二区三区| 综合自拍| 欧美视频在线视频免费va| 国产精品久久久久999| 欧美经典一区二区三区| 亚洲揄拍网| www亚洲免费| 欧美日韩国产电影| 国产一区免费午夜视频| 欧美一区二区成人一卡| 青青免费在线视频一区| 国产精品2020| 国产美女口爆吞精视频| 三级片大波波| 欧美色www亚洲国产阿娇要播| 国产原创精品| 欧美夜夜草视频| 亚洲精品欧洲精品| 精品国产一区二区三区四区在线看| 丝袜综合| 精品九九国产无码| 97精品国产精品免费观看| 欧美日韩国产中文精品字幕自在自线| 青青草成人视频在线观看二区| 操逼天美3区| 欧美成人一区二区| 国产精品久久久久中文字幕| 夜夜嗨免费视频| AV综合中文字幕干| 东北熟女91| 麻豆黄色五月天| 国产AAAAAABBBBB| 91麻豆一二三区| 自拍鲍鱼一区在线高清观看免费| 亚春色色| 最新加勒比丝袜在线| 美日韩男女操屄视频| 欧美日韩亚洲五月天婷婷| 人干人人人操人人摸| 激情内射| 99re9在线| 欧美午夜视频免费观看| 日韩特一级久久| 99热这里| 成人性爱av| 老鸭窝在线视频播放| 亚洲日产专区| 香蕉黄色一级视频| 日韩特一级久久| 亚 欧 美 综合| 午夜亚洲国产理论秋霞| 蜜桃臀一区二区三区久久| 亚洲激情网一二三四区| 一级AV性爱| 乱操9999| 91女在线观看| 国产强奸超碰AV| 97国产人人| 亚洲高清在线se| 97资源制服丝袜| 啪啪免费| 国产精品视屏| 龙兴卡官方查询| 91超碰人人| 亚州AV无码国产精品| 亚洲国产综合图区中文字幕| 国产视频小说| 花野真衣| 亚洲色图殴美色图激情乱伦| 啊啊啊操死我| 91老熟女91老女人| 综合日韩激情另类图片| 乱伦熟女区| 免费观看性欧美一级| 老熟女天天操| 中文字幕精品久久久久人妻红杏ⅰ| 五月婷婷激情网| 日韩精品在线观看观看| 欧美天天弄| 亚洲蜜臀精品视频久久| 日韩情色AV| 老女人爆菊| 99碰碰| 日日摸夜夜夜夜爽| 九九无码| 亚洲毛片久久| 日韩熟女视频二区| 久久曰曰| 97在线免费看| 综合五月婷婷| 欧美亚洲日本视频久久久| 国产高清视频无码在线| 欧美精品庄| 疯操AV| 玖玖草久草99蜜月一区二区三区| 116美女午夜| 日日干日日| 国产无套粉嫩白浆在| 色婷婷视频| 综合伊人激情| 亚洲色欧美| 久久精品国产亚洲粉嫩| 欲色啪| 91老熟女老女人国产老太| 99.色网| 日本一区三级韩国| 99热成人| 91九色在线| 日本精品一区二区中文字幕| 五十路三级片| 岛国黄| 国产精品久久久久亚洲av| 无码区蜜乳| 一级做a爰片性色毛片久久| 日本一道在线播放高清| 酒色综合网| 日日操夜夜操天天操免费观看麻豆| 亚洲日本大香蕉1| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 色五月av| 欧美高清色| 欧美亚洲综合高清在线| 一本久道久久综合狠狠爱一密臀精 | 91狠狠综合久久久久久| 91在线欧色| 青娱乐 成人娱乐在线| 久无码| 欧美日韩免费专区在线| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 1769国内精品视频| 被男人吃奶很爽的毛片| 国产精品成人久久一区二区三区| 国产精品福利视频播放| AV一区观看| 五月婷网站| 国产精品蜜乳AV| 日韩另类| 东京热男人的天堂网| 大香蕉伊利av| 97在线欧洲| 加勒比伊人影院| 国产超碰欧美| 欧美熟妇精品黑人巨大91| 日日超碰亚洲| 中字幕人妻一区二区三区| 美日韩男女操屄视频| 福利社区午夜一区二区| 免费在线观看国内色片网站网址| 免费毛片在线播放| 精品超碰中文在线| 爱欲AV| 超碰伊人在线| 超碰碰97资源站| 日本羞羞的视频在线播放| 久久久久久久久久久免费精品| 精品欧美А∨无码黑人大荫蒂| 国产精品无码论坛| 男人的天堂不卡一区二区 | 在线五区| 欧美黑人与女人91~| 蜜屁Av| 精品一区二区三区18| 男女无套 免费网站| 日韩国产欧美伦理在线| a在线视频免费观看| 东北夫妻性偷拍| 噜噜噜亚洲精品| 97Ai亚洲| 日韩性爱毛片操骚逼| 丁香五月久久| 超碰97玖玖爱| 亚洲人妻色图| 人人玩人人添人人澡免费|