日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

VBA實(shí)戰(zhàn)指南:玩轉(zhuǎn)Excel教務(wù)掛科統(tǒng)計(jì)與自動(dòng)化報(bào)表生成

VBA實(shí)戰(zhàn)指南:玩轉(zhuǎn)Excel教務(wù)掛科統(tǒng)計(jì)與自動(dòng)化報(bào)表生成 1. 項(xiàng)目背景為什么教務(wù)數(shù)據(jù)要用VBA來(lái)處理高校教務(wù)管理里掛科數(shù)據(jù)統(tǒng)計(jì)是非常高頻的一項(xiàng)工作。學(xué)期末考試結(jié)束各科成績(jī)出來(lái)教務(wù)員或者輔導(dǎo)員需要回答一系列問(wèn)題每個(gè)班掛了幾科哪個(gè)科目掛科率最高哪些學(xué)生掛科超過(guò)三門需要預(yù)警重修名單怎么生成這些問(wèn)題看起來(lái)簡(jiǎn)單但當(dāng)學(xué)生數(shù)量上千、科目幾十門、數(shù)據(jù)分散在多個(gè)Excel文件里的時(shí)候手工處理就變得極其痛苦。我第一次接到這個(gè)需求是在某高校期末階段。對(duì)方拿來(lái)的原始數(shù)據(jù)是一張全校成績(jī)總表大概四千多行每行是一個(gè)學(xué)生的某一門課程成績(jī)字段包括學(xué)號(hào)、姓名、班級(jí)、課程名稱、學(xué)分、成績(jī)。需求也很直接掛科名單、掛科率統(tǒng)計(jì)、分?jǐn)?shù)段分布、以及預(yù)警名單掛科超過(guò)兩門的要單獨(dú)列出來(lái)。說(shuō)實(shí)話這些需求用Excel自帶的數(shù)據(jù)透視表和篩選功能也能做一部分但涉及到多條判定規(guī)則、跨科目統(tǒng)計(jì)、批量格式化和生成多個(gè)報(bào)表還是VBA更合適。寫這篇博文就是把這套處理掛科數(shù)據(jù)的完整思路和代碼實(shí)戰(zhàn)過(guò)程拆開(kāi)來(lái)講。從數(shù)據(jù)清洗、掛科判定、按科目統(tǒng)計(jì)、按學(xué)生聚合、生成預(yù)警名單到最后的報(bào)表自動(dòng)排版每一步都給出可以直接復(fù)用的方案。適合輔導(dǎo)員、教務(wù)員、教學(xué)秘書以及任何處理過(guò)這類考核數(shù)據(jù)的辦公人員參考。如果你只會(huì)Excel的基礎(chǔ)操作這篇文章會(huì)告訴你VBA處理批量數(shù)據(jù)的基本套路如果你已經(jīng)有點(diǎn)VBA基礎(chǔ)也可以從中找到一些邊界情況處理和代碼組織的方法。2. 項(xiàng)目整體設(shè)計(jì)與思路拆解2.1 先搞清楚數(shù)據(jù)長(zhǎng)什么樣拿到數(shù)據(jù)的第一步不是寫代碼而是觀察數(shù)據(jù)。我用的是某高校模擬項(xiàng)目X的成績(jī)總表字段和真實(shí)教務(wù)系統(tǒng)導(dǎo)出的格式基本一致。以下是原始數(shù)據(jù)的一個(gè)簡(jiǎn)化樣例學(xué)號(hào)姓名班級(jí)課程名稱學(xué)分成績(jī)20230101張某計(jì)科2301高等數(shù)學(xué)55820230101張某計(jì)科2301大學(xué)英語(yǔ)37120230102李某計(jì)科2301高等數(shù)學(xué)56220230102李某計(jì)科2301線性代數(shù)34320230102李某計(jì)科2301大學(xué)英語(yǔ)355仔細(xì)觀察有幾個(gè)關(guān)鍵點(diǎn)決定了后續(xù)代碼怎么寫一行為一個(gè)學(xué)生的一門課成績(jī)所以一個(gè)學(xué)生占用多行數(shù)據(jù)。按學(xué)生聚合統(tǒng)計(jì)掛科門數(shù)就不能用簡(jiǎn)單的篩選而是需要按學(xué)號(hào)分組。成績(jī)字段的格式可能不統(tǒng)一有的單元格是文本類型有的看起來(lái)是數(shù)字但其實(shí)是缺考或緩考字樣。這種臟數(shù)據(jù)必須先清洗。掛科的判定線和課程學(xué)分有關(guān)不同學(xué)??赡苡兴煌S械膶W(xué)校60分及格有的課程按五級(jí)制優(yōu)、良、中、及格、不及格這些都要在寫代碼前問(wèn)清楚。2.2 方案選型為什么不用公式和透視表在處理這類數(shù)據(jù)時(shí)很多人第一反應(yīng)是用COUNTIFS加IF嵌套不就行了。確實(shí)如果只需要統(tǒng)計(jì)個(gè)掛科人數(shù)公式完全可以勝任。但這套需求里有一個(gè)場(chǎng)景是公式不太好處理的判斷每個(gè)學(xué)生掛科是否超過(guò)兩門并把超過(guò)兩門的學(xué)生自動(dòng)歸入預(yù)警名單。這樣做是可行的但操作相對(duì)繁瑣需要在輔助列里拉公式再對(duì)結(jié)果做二次篩選。根本的問(wèn)題在于公式方案是靜態(tài)的。數(shù)據(jù)源一旦更新比如補(bǔ)考成績(jī)錄入、緩考學(xué)生決定參加考試所有統(tǒng)計(jì)結(jié)果都得跟著改輔助列里的公式范圍需要重新調(diào)整生成的報(bào)表還得手工重建。VBA方案是動(dòng)態(tài)的原始數(shù)據(jù)放在Sheet1運(yùn)行一次宏自動(dòng)在Sheet2生成掛科名單Sheet3生成科目掛科率統(tǒng)計(jì)Sheet4生成預(yù)警名單。下次數(shù)據(jù)更新了再運(yùn)行一次就行所有流程完全自動(dòng)化。還有一個(gè)原因是邏輯可維護(hù)性。把代碼讀一遍就知道成績(jī)小于60且不為空算掛科缺考標(biāo)記為-1也按掛科處理掛科超過(guò)2門預(yù)警這些規(guī)則寫在哪里。對(duì)后接手的人來(lái)說(shuō)理解一套VBA代碼并修改規(guī)則比在一大堆嵌套公式里翻找要容易得多。2.3 整體處理流程梳理整個(gè)方案分成五個(gè)階段數(shù)據(jù)清洗、基本校驗(yàn)、掛科判定與統(tǒng)計(jì)、學(xué)生維度聚合、報(bào)表生成。每個(gè)階段相對(duì)獨(dú)立便于單獨(dú)測(cè)試和調(diào)試。第一階段規(guī)范成績(jī)字段——把文本數(shù)字轉(zhuǎn)成數(shù)值、識(shí)別特殊標(biāo)記、剔除無(wú)效行。第二階段檢查有沒(méi)有缺失關(guān)鍵字段的行比如學(xué)號(hào)為空的學(xué)生記錄直接跳過(guò)。第三階段遍歷所有成績(jī)記錄按課程名稱統(tǒng)計(jì)考試人數(shù)、掛科人數(shù)、掛科率同時(shí)輸出每條掛科記錄到名單表。第四階段再遍歷一次或者復(fù)用前面收集的數(shù)據(jù)按學(xué)號(hào)匯總每個(gè)學(xué)生的掛科門數(shù)生成預(yù)警名單。第五階段用VBA控制格式設(shè)置邊框、列寬、單元格顏色把掛科率高和預(yù)警級(jí)別高的信息突出顯示。3. 核心邏輯與關(guān)鍵代碼實(shí)現(xiàn)3.1 字典對(duì)象跨行聚合的利器做學(xué)生維度的掛科統(tǒng)計(jì)時(shí)最常用的技巧是使用VBA的Dictionary字典對(duì)象。它類似于哈希表可以按學(xué)號(hào)存儲(chǔ)一個(gè)學(xué)生的累計(jì)掛科門數(shù)。遍歷成績(jī)記錄時(shí)每遇到一條掛科記錄就在字典里把對(duì)應(yīng)學(xué)號(hào)的計(jì)數(shù)加1。最后把需要預(yù)警的學(xué)生計(jì)數(shù)值大于2輸出到名單表。Dim dict As Object Set dict CreateObject(Scripting.Dictionary) 遍歷成績(jī)數(shù)據(jù)統(tǒng)計(jì)每個(gè)學(xué)生掛科數(shù)量 For i 2 To lastRow scoreVal Trim(CStr(ws.Cells(i, 6).Value)) 成績(jī)列 stuID Trim(CStr(ws.Cells(i, 1).Value)) 學(xué)號(hào)列 判斷是否掛科成績(jī)?yōu)閿?shù)字且小于60或包含缺考等標(biāo)記 If IsNumeric(scoreVal) Then If CDbl(scoreVal) 60 Then If dict.Exists(stuID) Then dict(stuID) dict(stuID) 1 Else dict(stuID) 1 End If End If ElseIf InStr(scoreVal, 缺考) 0 Or InStr(scoreVal, 緩考) 0 Then If dict.Exists(stuID) Then dict(stuID) dict(stuID) 1 Else dict(stuID) 1 End If End If Next i這段代碼并不復(fù)雜卻解決了最關(guān)鍵的按學(xué)生聚合問(wèn)題。成績(jī)總表里同一個(gè)學(xué)生出現(xiàn)多行如果不想辦法聚合就沒(méi)法判斷掛科超過(guò)兩門。字典在這種場(chǎng)景下的處理思路值得反復(fù)參考。建議在處理學(xué)生數(shù)據(jù)時(shí)先想清楚需要按哪個(gè)維度聚合這個(gè)維度是否適合作為字典的Key。3.2 成績(jī)數(shù)據(jù)的邊界情況處理成績(jī)數(shù)據(jù)遠(yuǎn)沒(méi)有想象的那么干凈這是我在實(shí)際處理中遇到最多坑的地方。真實(shí)數(shù)據(jù)里常見(jiàn)的情況包括成績(jī)單元格顯示為缺考或緩考。這類情況通常要按掛科處理因?yàn)閷W(xué)生沒(méi)有成績(jī)。成績(jī)?yōu)榭盏膯卧?。不能?jiǎn)單判斷為掛科需要先和對(duì)方確認(rèn)空值含義。在我的模擬項(xiàng)目X數(shù)據(jù)里空值表示該學(xué)生本學(xué)期沒(méi)有選修這門課屬于無(wú)效記錄應(yīng)當(dāng)跳過(guò)。成績(jī)是文本格式的數(shù)字比如單元格左上角有個(gè)綠色小三角。直接比較會(huì)導(dǎo)致類型不匹配報(bào)錯(cuò)需要先用IsNumeric判斷。成績(jī)包含具體分值但帶備注比如55作弊。這種數(shù)據(jù)格式不統(tǒng)一要么在數(shù)據(jù)源頭規(guī)范要么在代碼里做截取處理。我的建議是在VBA代碼里先做一個(gè)數(shù)據(jù)清洗模塊統(tǒng)一處理這些情況。這樣主邏輯里的成績(jī)判斷就不用到處處理異常代碼也更清晰。寫一個(gè)獨(dú)立函數(shù)來(lái)判斷這條記錄是否為掛科把所有邊界情況封裝進(jìn)去Function IsFail(scoreCell As Range) As Boolean Dim raw As String raw Trim(CStr(scoreCell.Value)) 空值不算掛科視為無(wú)效記錄 If raw Then IsFail False Exit Function End If 缺考或緩考視為掛科 If InStr(raw, 缺考) 0 Or InStr(raw, 緩考) 0 Then IsFail True Exit Function End If 純數(shù)字小于60算掛科 If IsNumeric(raw) Then IsFail (CDbl(raw) 60) Exit Function End If 其他文本標(biāo)記按非掛科處理 IsFail False End Function注意掛科判定線60分是我在模擬項(xiàng)目X中使用的規(guī)則。實(shí)際部署時(shí)這個(gè)臨界值應(yīng)該定義成常量或者放在配置單元格里方便不同院系按各自規(guī)則調(diào)整。3.3 按科目的掛科率統(tǒng)計(jì)科目維度的統(tǒng)計(jì)相對(duì)直接遍歷所有成績(jī)記錄按課程名稱分組記錄兩個(gè)數(shù)字——考試人數(shù)和掛科人數(shù)??荚嚾藬?shù)指該課程有效成績(jī)記錄數(shù)排除空值掛科人數(shù)是其中判定為掛科的記錄數(shù)。掛科率就是兩者之比。這個(gè)統(tǒng)計(jì)邏輯用字典也能實(shí)現(xiàn)但字典存的值是數(shù)組會(huì)有些別扭。更穩(wěn)妥的方式是直接在內(nèi)存里維護(hù)兩個(gè)字典一個(gè)存考試人數(shù)一個(gè)存掛科人數(shù)。遍歷結(jié)束后再合并輸出?;蛘哂酶匀坏姆绞健葎?dòng)態(tài)收集所有課程名稱到字典A中第二次遍歷時(shí)按課程統(tǒng)計(jì)。我在實(shí)踐里更喜歡用Collection或字典來(lái)維護(hù)課程列表因?yàn)檎n程名稱不一定在原始數(shù)據(jù)里有現(xiàn)成的枚舉清單。你無(wú)法提前知道全校開(kāi)了多少門課動(dòng)態(tài)收集才是正解。以下是用字典統(tǒng)計(jì)科目掛科率的核心邏輯Dim examCount As Object, failCount As Object Set examCount CreateObject(Scripting.Dictionary) Set failCount CreateObject(Scripting.Dictionary) For i 2 To lastRow courseName Trim(CStr(ws.Cells(i, 4).Value)) If courseName Then GoTo NextRow 有效成績(jī)記錄計(jì)入考試人數(shù) If examCount.Exists(courseName) Then examCount(courseName) examCount(courseName) 1 Else examCount(courseName) 1 End If 掛科記錄計(jì)入掛科人數(shù) If IsFail(ws.Cells(i, 6)) Then If failCount.Exists(courseName) Then failCount(courseName) failCount(courseName) 1 Else failCount(courseName) 1 End If End If NextRow: Next i統(tǒng)計(jì)完成后遍歷examCount字典把課程名稱、考試人數(shù)、掛科人數(shù)、掛科率逐行寫入輸出表。掛科率保留一位小數(shù)或百分比形式同時(shí)用條件格式把掛科率超過(guò)20%的科目標(biāo)紅方便快速定位問(wèn)題課程。3.4 多字段核心判斷組合掛科數(shù)據(jù)處理中有一個(gè)容易忽略的點(diǎn)同一個(gè)學(xué)生某一門課掛科了但在另一門課里是緩考緩考雖然也算掛科但定義略有不同。比如學(xué)??赡苡幸?guī)則緩考學(xué)生可以直接參加補(bǔ)考不占用掛科名額也不會(huì)進(jìn)入學(xué)業(yè)預(yù)警名單。這種細(xì)微差別落到代碼里就是一個(gè)布爾變量的調(diào)整。我的經(jīng)驗(yàn)是把是否掛科和是否計(jì)入預(yù)警拆成兩個(gè)獨(dú)立的判斷函數(shù)。掛科名單里包含缺考和緩考但預(yù)警名單只考慮成績(jī)60的真實(shí)不及格。這樣代碼雖然多了一個(gè)函數(shù)但語(yǔ)義清晰也方便應(yīng)對(duì)不同院系的不同規(guī)則。Function IsWarningFail(scoreCell As Range) As Boolean Dim raw As String raw Trim(CStr(scoreCell.Value)) 只有純數(shù)字且小于60才計(jì)入預(yù)警 If IsNumeric(raw) Then IsWarningFail (CDbl(raw) 60) Else IsWarningFail False End If End Function這種把規(guī)則拆解到函數(shù)級(jí)別的寫法是我在多次處理績(jī)效數(shù)據(jù)的過(guò)程中逐漸養(yǎng)成的習(xí)慣。一次性把所有邏輯寫在一個(gè)事件處理程序里看起來(lái)省事但后期要調(diào)整一個(gè)規(guī)則時(shí)改動(dòng)影響范圍會(huì)比較大容易顧此失彼。4. 完整實(shí)操流程與報(bào)表生成4.1 環(huán)境準(zhǔn)備與數(shù)據(jù)約定實(shí)際操作前先約定輸入輸出格式。我用一個(gè)獨(dú)立的工作簿來(lái)處理這類數(shù)據(jù)文件里通常包含四個(gè)工作表原始數(shù)據(jù)、掛科名單、科目統(tǒng)計(jì)、預(yù)警名單。輸入數(shù)據(jù)固定在原始數(shù)據(jù)表中運(yùn)行宏后會(huì)清空其他三個(gè)表并重新填充內(nèi)容。在寫代碼前先確認(rèn)幾個(gè)約定成績(jī)?cè)谠紨?shù)據(jù)表的第6列F列表頭行是第1行。學(xué)號(hào)在第1列姓名第2列班級(jí)第3列課程名稱第4列學(xué)分第5列。所有列的數(shù)據(jù)都不允許包含合并單元格如果原始導(dǎo)出文件里有合并單元格先用Excel取消合并并填充。提示在模擬項(xiàng)目X的實(shí)際操作中出現(xiàn)過(guò)原始數(shù)據(jù)用Excel公式生成導(dǎo)致部分單元格值為0但公式未計(jì)算的情況。建議拿到數(shù)據(jù)后先做一次粘貼為值處理再進(jìn)入VBA流程。4.2 主流程代碼結(jié)構(gòu)整個(gè)宏的主體結(jié)構(gòu)如下包含了數(shù)據(jù)清洗、校驗(yàn)、統(tǒng)計(jì)、輸出四個(gè)環(huán)節(jié)并結(jié)合輸入標(biāo)題VBA實(shí)戰(zhàn)案例處理掛科數(shù)據(jù)的全部需求點(diǎn)。該主過(guò)程采用模塊化的設(shè)計(jì)方便按需裁剪或調(diào)試。Sub ProcessFailData() Dim wsData As Worksheet, wsFail As Worksheet, wsStat As Worksheet, wsWarn As Worksheet Set wsData ThisWorkbook.Sheets(原始數(shù)據(jù)) Set wsFail ThisWorkbook.Sheets(掛科名單) Set wsStat ThisWorkbook.Sheets(科目統(tǒng)計(jì)) Set wsWarn ThisWorkbook.Sheets(預(yù)警名單) Dim lastRow As Long lastRow wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row If lastRow 2 Then MsgBox 原始數(shù)據(jù)為空請(qǐng)檢查數(shù)據(jù)表。 Exit Sub End If 清空輸出表舊數(shù)據(jù)保留表頭 ClearOutputSheets wsFail, wsStat, wsWarn 第一階段遍歷并過(guò)濾寫入掛科名單 Dim i As Long Dim failRow As Long, statRow As Long, warnRow As Long failRow 2 statRow 2 warnRow 2 Dim dictStu As Object, dictExam As Object, dictFail As Object Set dictStu CreateObject(Scripting.Dictionary) Set dictExam CreateObject(Scripting.Dictionary) Set dictFail CreateObject(Scripting.Dictionary) For i 2 To lastRow 跳過(guò)無(wú)效記錄學(xué)號(hào)為空或姓名為空 Dim stuID As String, stuName As String stuID Trim(CStr(wsData.Cells(i, 1).Value)) stuName Trim(CStr(wsData.Cells(i, 2).Value)) If stuID Or stuName Then GoTo ContinueLoop Dim courseName As String, scoreCell As Range courseName Trim(CStr(wsData.Cells(i, 4).Value)) Set scoreCell wsData.Cells(i, 6) 科目考試人數(shù)統(tǒng)計(jì) If examCountExist(dictExam, courseName) Then dictExam(courseName) dictExam(courseName) 1 Else dictExam(courseName) 1 End If 判斷掛科寫入掛科名單表 If IsFail(scoreCell) Then 寫入掛科名單 wsFail.Cells(failRow, 1).Value stuID wsFail.Cells(failRow, 2).Value stuName wsFail.Cells(failRow, 3).Value wsData.Cells(i, 3).Value wsFail.Cells(failRow, 4).Value courseName wsFail.Cells(failRow, 5).Value wsData.Cells(i, 5).Value wsFail.Cells(failRow, 6).Value scoreCell.Value failRow failRow 1 科目掛科人數(shù)統(tǒng)計(jì) If failCountExist(dictFail, courseName) Then dictFail(courseName) dictFail(courseName) 1 Else dictFail(courseName) 1 End If End If 按學(xué)生聚合預(yù)警計(jì)數(shù)僅真實(shí)不及格 If IsWarningFail(scoreCell) Then If dictStu.Exists(stuID) Then dictStu(stuID) dictStu(stuID) 1 Else dictStu(stuID) 1 End If End If ContinueLoop: Next i 輸出科目統(tǒng)計(jì) Dim key As Variant For Each key In dictExam.Keys wsStat.Cells(statRow, 1).Value key wsStat.Cells(statRow, 2).Value dictExam(key) If dictFail.Exists(key) Then wsStat.Cells(statRow, 3).Value dictFail(key) wsStat.Cells(statRow, 4).Value Format(dictFail(key) / dictExam(key), 0.0%) Else wsStat.Cells(statRow, 3).Value 0 wsStat.Cells(statRow, 4).Value 0.0% End If statRow statRow 1 Next key 輸出預(yù)警名單 Dim stuIDKey As Variant For Each stuIDKey In dictStu.Keys If dictStu(stuIDKey) 2 Then wsWarn.Cells(warnRow, 1).Value stuIDKey wsWarn.Cells(warnRow, 2).Value GetStudentName(stuIDKey, wsData, lastRow) wsWarn.Cells(warnRow, 3).Value dictStu(stuIDKey) Dim stuClass As String stuClass GetStudentClass(stuIDKey, wsData, lastRow) wsWarn.Cells(warnRow, 4).Value stuClass warnRow warnRow 1 End If Next stuIDKey 格式化輸出表格 FormatOutputSheets wsFail, wsStat, wsWarn MsgBox 處理完成掛科名單 (failRow - 2) 條科目 (statRow - 2) 門預(yù)警 (warnRow - 2) 人。 End Sub寫這段代碼時(shí)有一個(gè)反復(fù)權(quán)衡的點(diǎn)預(yù)警名單里需要補(bǔ)充學(xué)生的班級(jí)信息。若在遍歷成績(jī)記錄時(shí)把學(xué)號(hào)、姓名、班級(jí)對(duì)應(yīng)關(guān)系存入字典內(nèi)存開(kāi)銷會(huì)明顯增加但訪問(wèn)速度更快。我在模擬項(xiàng)目X里選擇了單獨(dú)寫一個(gè)GetStudentName和GetStudentClass函數(shù)每次按需在原始數(shù)據(jù)表里查找。學(xué)生人數(shù)在兩千以內(nèi)時(shí)速度尚可如果數(shù)據(jù)量超過(guò)一萬(wàn)行建議換成字典緩存方式。4.3 輔助函數(shù)實(shí)現(xiàn)上面主流程中用到了一些輔助函數(shù)這里一并列出來(lái)。重點(diǎn)看一下從字典中判斷鍵是否存在的寫法因?yàn)檫@幾段代碼在不同版本的Office里兼容性有細(xì)微差別Function examCountExist(dict As Object, key As String) As Boolean On Error Resume Next examCountExist Not IsError(dict(key)) Err.Clear End Function Function failCountExist(dict As Object, key As String) As Boolean On Error Resume Next failCountExist Not IsError(dict(key)) Err.Clear End Function Function GetStudentName(stuID As String, wsData As Worksheet, lastRow As Long) As String Dim i As Long For i 2 To lastRow If Trim(CStr(wsData.Cells(i, 1).Value)) stuID Then GetStudentName wsData.Cells(i, 2).Value Exit Function End If Next i End Function Function GetStudentClass(stuID As String, wsData As Worksheet, lastRow As Long) As String Dim i As Long For i 2 To lastRow If Trim(CStr(wsData.Cells(i, 1).Value)) stuID Then GetStudentClass wsData.Cells(i, 3).Value Exit Function End If Next i End Function補(bǔ)充說(shuō)明判斷字典中是否存在某個(gè)鍵還有一種更標(biāo)準(zhǔn)的寫法是使用字典的Exists方法。上面之所以用錯(cuò)誤捕獲方式是因?yàn)樵诓糠掷习姹炯嫒輬?chǎng)景下直接調(diào)用Exists對(duì)中文鍵的支持有一些量化差異。但如果你用的Office版本較新2016及以上直接用dict.Exists(key)更穩(wěn)妥代碼也更短。實(shí)際部署時(shí)建議優(yōu)先用Exists方法If Not dictExam.Exists(courseName) Then dictExam.Add courseName, 1 Else dictExam(courseName) dictExam(courseName) 1 End If4.4 報(bào)表格式化技巧數(shù)據(jù)統(tǒng)計(jì)完成后報(bào)表的呈現(xiàn)直接影響使用者閱讀效率。以下這段是格式化輸出的實(shí)現(xiàn)重點(diǎn)在于用單元格邊框和顏色把信息分層Sub FormatOutputSheets(wsFail As Worksheet, wsStat As Worksheet, wsWarn As Worksheet) 設(shè)置統(tǒng)一表頭樣式 Dim headerRng As Range Set headerRng wsFail.Range(A1:F1) headerRng.Font.Bold True headerRng.Interior.Color RGB(0, 102, 204) headerRng.Font.Color RGB(255, 255, 255) 掛科名單邊框 Dim lastFailRow As Long lastFailRow wsFail.Cells(wsFail.Rows.Count, 1).End(xlUp).Row If lastFailRow 2 Then wsFail.Range(A2:F lastFailRow).Borders.LineStyle xlContinuous wsFail.Range(A2:F lastFailRow).Borders.Weight xlThin End If 科目統(tǒng)計(jì)表掛科率超過(guò)20%的標(biāo)記為紅色 Dim lastStatRow As Long lastStatRow wsStat.Cells(wsStat.Rows.Count, 1).End(xlUp).Row For i 2 To lastStatRow Dim rateVal As Double rateVal 0 If IsNumeric(wsStat.Cells(i, 4).Value) Then rateVal CDbl(wsStat.Cells(i, 4).Value) End If If rateVal 0.2 Then wsStat.Cells(i, 4).Font.Color RGB(192, 0, 0) wsStat.Cells(i, 4).Font.Bold True End If Next i 自動(dòng)調(diào)整列寬 wsFail.Columns(A:F).AutoFit wsStat.Columns(A:D).AutoFit wsWarn.Columns(A:D).AutoFit End Sub格式化時(shí)有一個(gè)經(jīng)常被忽略的細(xì)節(jié)AutoFit對(duì)中文表頭有時(shí)不夠友好特別是當(dāng)表頭文字較長(zhǎng)時(shí)自動(dòng)列寬可能讓單元格顯示不全。遇到這種情況建議單獨(dú)給表頭列設(shè)置一個(gè)最小寬度值。wsFail.Columns(A).ColumnWidth 12 wsFail.Columns(B).ColumnWidth 10 wsFail.Columns(C).ColumnWidth 144.5 一鍵運(yùn)行的入口設(shè)計(jì)為了讓不熟悉VBA的教務(wù)老師也能方便使用我在工作簿中增加了一個(gè)刷新報(bào)表按鈕并指定宏為ProcessFailData。這樣使用者只需要在原始數(shù)據(jù)表粘貼新數(shù)據(jù)點(diǎn)擊按鈕所有結(jié)果就自動(dòng)更新。按鈕的添加方式很簡(jiǎn)單開(kāi)發(fā)工具選項(xiàng)卡中插入表單控件按鈕右鍵指定宏。如果所在的Excel版本不顯示開(kāi)發(fā)工具選項(xiàng)卡需要在文件-選項(xiàng)-自定義功能區(qū)里勾選開(kāi)發(fā)工具。這一步驟對(duì)于沒(méi)有VBA經(jīng)驗(yàn)的人來(lái)說(shuō)也可能卡住所以我在交接說(shuō)明里特意寫清楚了路徑。5. 實(shí)操過(guò)程中遇到的坑與排查技巧5.1 成績(jī)列存在隱藏空格導(dǎo)致比較失敗實(shí)際處理中碰到過(guò)一個(gè)很隱晦的問(wèn)題成績(jī)列的值在表面上是58但實(shí)際上是58 數(shù)字后面帶空格或者是全角數(shù)字。這些字符在視覺(jué)上和半角數(shù)字幾乎一致但CStr轉(zhuǎn)換后參與判斷就會(huì)出問(wèn)題。排查這類問(wèn)題的最快方式是在VBA代碼里臨時(shí)輸出每個(gè)成績(jī)單元格的ASCII碼。我當(dāng)時(shí)用了一個(gè)調(diào)試小工具逐格檢查才發(fā)現(xiàn)空格的問(wèn)題。解決方案是統(tǒng)一用Trim加一個(gè)自定義的清理函數(shù)把全角字符轉(zhuǎn)成半角Function CleanStr(text As Variant) As String Dim result As String result Trim(CStr(text)) 全角數(shù)字轉(zhuǎn)半角 Dim i As Integer For i 1 To Len(result) Dim ch As String ch Mid(result, i, 1) If Asc(ch) 65281 And Asc(ch) 65374 Then ch Chr(Asc(ch) - 65248) End If result Left(result, i - 1) ch Right(result, Len(result) - i) Next i CleanStr result End Function全角轉(zhuǎn)半角這段邏輯雖然簡(jiǎn)單但它解決了一類非常典型的數(shù)據(jù)導(dǎo)入問(wèn)題。教務(wù)系統(tǒng)從網(wǎng)頁(yè)端導(dǎo)出的數(shù)據(jù)經(jīng)?;烊肴亲址惶幚淼脑捄罄m(xù)的學(xué)號(hào)匹配、姓名匹配都可能靜默失敗。5.2 同一課程名稱表述不一致導(dǎo)致統(tǒng)計(jì)被拆開(kāi)教務(wù)數(shù)據(jù)里同一門課在不同老師那里可能表述不同。比如高等數(shù)學(xué)在某些記錄里寫成高數(shù)大學(xué)英語(yǔ)有時(shí)寫成英語(yǔ)。這種情況下科目維度的統(tǒng)計(jì)會(huì)被錯(cuò)誤地拆分成兩行掛科率算出來(lái)也會(huì)偏小。解決思路有兩個(gè)方向一是在數(shù)據(jù)源頭統(tǒng)一課程名稱找教務(wù)系統(tǒng)重新導(dǎo)出或者在Excel里做一次查找替換二是在VBA代碼里維護(hù)一個(gè)課程名稱映射表。映射表更適合場(chǎng)景固定、課程數(shù)量有限的情況。我當(dāng)時(shí)做了一個(gè)Dictionary映射把常見(jiàn)別名歸一化到規(guī)范名稱Dim courseMap As Object Set courseMap CreateObject(Scripting.Dictionary) courseMap.Add 高數(shù), 高等數(shù)學(xué) courseMap.Add 英語(yǔ), 大學(xué)英語(yǔ) courseMap.Add 線代, 線性代數(shù)在遍歷數(shù)據(jù)時(shí)每讀到一個(gè)課程名稱先查映射表若有別名就替換成規(guī)范名再參與統(tǒng)計(jì)。這樣做還有個(gè)額外好處輸出報(bào)表里的課程名稱是統(tǒng)一的不會(huì)讓看報(bào)表的人產(chǎn)生困惑。5.3 數(shù)據(jù)量增大時(shí)性能變慢模擬項(xiàng)目X的初期版本四千多行數(shù)據(jù)跑一次宏大約需要十幾秒主要耗在輸出環(huán)節(jié)和GetStudentName/GetStudentClass的反復(fù)全表查找上。如果每個(gè)預(yù)警學(xué)生都要遍歷一次全表性能開(kāi)銷確實(shí)不小。優(yōu)化思路有兩個(gè)預(yù)警名單輸出前已經(jīng)知道哪些學(xué)號(hào)需要查詢姓名和班級(jí)可以邊遍歷邊收集學(xué)生信息而不是最后再查。也就是在第一次遍歷時(shí)把每個(gè)學(xué)號(hào)對(duì)應(yīng)的姓名、班級(jí)存入字典后面直接取用。關(guān)閉屏幕更新和自動(dòng)計(jì)算。在宏開(kāi)頭加上Application.ScreenUpdating False和Application.Calculation xlManual宏結(jié)束再恢復(fù)。這段小改動(dòng)通常能帶來(lái)三到五倍的性能提升。Sub ProcessFailData() Application.ScreenUpdating False Application.Calculation xlManual ... 原有邏輯 ... Application.Calculation xlCalculationAutomatic Application.ScreenUpdating True End Sub5.4 常見(jiàn)問(wèn)題速查問(wèn)題現(xiàn)象可能原因排查與解決辦法運(yùn)行宏時(shí)提示類型不匹配成績(jī)列存在文本或全角字符用CleanStr統(tǒng)一轉(zhuǎn)換數(shù)據(jù)或用IsNumeric先做類型判斷科目統(tǒng)計(jì)中同一課程出現(xiàn)兩行課程名稱不統(tǒng)一建立課程別名映射表歸一化名稱后再統(tǒng)計(jì)預(yù)警名單漏人判斷函數(shù)沒(méi)覆蓋缺考標(biāo)記檢查IsWarningFail邏輯確認(rèn)缺考與真實(shí)不及格的區(qū)分規(guī)則輸出表格沒(méi)有邊框/顏色格式化代碼未執(zhí)行檢查FormatOutputSheets是否在主流程末尾被調(diào)用數(shù)據(jù)更新后舊結(jié)果被保留沒(méi)有清空輸出表舊數(shù)據(jù)在輸出前調(diào)用ClearOutputSheets先做整表內(nèi)容清除按鈕點(diǎn)擊后沒(méi)有反應(yīng)宏被禁用文件另存為啟用宏的工作簿.xlsm并在選項(xiàng)里啟用宏學(xué)號(hào)前導(dǎo)0丟失Excel自動(dòng)把學(xué)號(hào)識(shí)別為數(shù)字在原始數(shù)據(jù)里把學(xué)號(hào)列設(shè)置為文本格式或從教務(wù)系統(tǒng)導(dǎo)出時(shí)選文本格式6. 這套方案還可以延伸去做什么處理掛科數(shù)據(jù)只是VBA教務(wù)自動(dòng)化的一個(gè)入門場(chǎng)景。同一套思路——遍歷、字典聚合、條件判定、格式化輸出——遷移到其他場(chǎng)景時(shí)基本不需要大改。比如說(shuō)綜合測(cè)評(píng)排名。原始數(shù)據(jù)換成多個(gè)維度的評(píng)分項(xiàng)判定規(guī)則換成加權(quán)得分計(jì)算輸出表?yè)Q成排名表核心代碼框架可以原樣復(fù)用。再比如說(shuō)選課名單核查。把掛科判定換成沖突檢測(cè)判斷邏輯可以檢查同一個(gè)時(shí)間段內(nèi)是否分配了兩門課程。再比如畢業(yè)資格審核按學(xué)號(hào)聚合各學(xué)生已修學(xué)分和必修課完成情況輔助判斷是否達(dá)到畢業(yè)條件。我個(gè)人實(shí)際使用這套方案時(shí)最大的體會(huì)就是永遠(yuǎn)不要在原始數(shù)據(jù)表里手工改數(shù)據(jù)。把數(shù)據(jù)清洗、統(tǒng)計(jì)、輸出分成三個(gè)相對(duì)獨(dú)立的過(guò)程每次有新的數(shù)據(jù)文件就新開(kāi)一個(gè)工作簿把原始數(shù)據(jù)粘貼進(jìn)去運(yùn)行宏生成結(jié)果。這樣原始數(shù)據(jù)永遠(yuǎn)可追溯結(jié)果也隨時(shí)可以重新生成不會(huì)出現(xiàn)改了一個(gè)單元格結(jié)果忘記刷新統(tǒng)計(jì)的尷尬情況。另一個(gè)經(jīng)驗(yàn)是交給別人使用的工具界面友好度比代碼優(yōu)雅度更重要。我在最終版本里特意在預(yù)警名單表頂部加了一行說(shuō)明文字提示預(yù)警規(guī)則是真實(shí)掛科超過(guò)兩門避免使用者和教務(wù)辦對(duì)預(yù)警口徑有不同的理解。代碼里每一處規(guī)則都寫了注釋防止半年后自己回來(lái)看的時(shí)候還得重新猜邏輯。如果你剛接觸VBA建議先拿這個(gè)案例的數(shù)據(jù)結(jié)構(gòu)——一張成績(jī)表、幾個(gè)統(tǒng)計(jì)需求——練手。把代碼一行行在本地跑通再試著修改掛科線、增加一個(gè)統(tǒng)計(jì)維度、或者把輸出格式改得更符合自己的偏好。VBA的學(xué)習(xí)曲線不算平緩但這種接到一個(gè)真實(shí)需求解決一個(gè)具體問(wèn)題的學(xué)習(xí)方式比單純看語(yǔ)法書要有效得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
黄色AAAAA欧美| 性爱动态120秒| 亚洲精品xxx| 亚洲城人男人的天堂| 久久人妻一区二区三区高清| 小情侣高清国产在线视频| 午夜福利久久久噜久噜久久综合| 蜜桃臀一区二区三区久久| 欧美强奸乱能| 欧美另类自拍| 国产99久久99热这里只有精品15 | 亚洲国产97在线精品一区| 天天狠操| 久久综合av| 亚洲激情在线观看一区| 中文字幕一区二区三区人妻少妇在线| 国产毛片片精品天天看视频| 任你艹| 久久精品99| 久久久久久国产无码精品| 国产60区。| 中文字幕三四区| 天天流夜夜操| www.久久制服糖| 久久国产对白激情浪潮| 国产欧美日韩一区二区三区| 婷婷国产精品一区二区| 蜜桃视频精品一区二区| 手机在线播放国产福利| 欧美春色| 熟女自慰久久久| av天堂天堂av日韩| 日本天天干天天日一区| 九色婷婷| 麻豆精品一区二区三区四区免费观看| 成人日本精品九区| 做爱A级亚欧| 97超碰总站| 国产一进一出视频网站| 日韩精品午夜操呦呦不卡影院| 性爱av网站| 唯美清纯 妖精视频| 狠狠干综合| 天天综合网网欲色| 夜夜人妻爽| 亚洲天堂7777| 富女玩鸭子一级毛片| 熟女在线视频| 久久国产乱子伦精品免费女人| 久草线上视频免费看| 人人考人人摸人人干| 97综合久久| 91夜色chaopeng| 国产亚洲色婷婷久久99精品91葵花宝典 | 91狠狠综合| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 97伦综合| 色av中文字| 熟女这里只有精品6| 懂色av中文字幕| 91麻豆va国产精品| 国产女同视频在线播放| 999热这里只有精品| 中文字幕视频一区视频二区| 俺去俺来也在线www| 丝袜足交视频| 偷拍99| http://qxhbdz.com| 无码最新| 日韩三A大片在线观看| 97操B| 亚洲视频二区 | 国产一区麻豆免费观看| 国产欧美日韩在线观看麻豆传媒公司 | 中亚av| 欧美系列在线一区二区| 啊啊啊好想要| 国产久久久久久| 一本久久精品中文字| 加勒比大香蕉视频在线| 免费中文在线| 国产美女裸体秘 永久无遮挡| 久久久一二三四区| 久久精品高清无码一区| 五月婷婷影院| 亚洲天堂无码| 熟女乱伦A| 高清无码久操视频| 最新国内自拍av免费| 亚洲色天| 天天看天天日天天操| 91热色| 九九九草| 少妇人妻精品| 97久久久精品| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 中文字幕免费在线观看| 91精品人妻五十路| 免费国产| 亚洲女人毛茸茸91| 97在线观看视频| 成人一级二级| 国产av色网| 亚洲国产中文字幕| 夜夜做夜夜爽精品视频| 就去色综合| 国产女人9999| 一本色道久久综合狠狠操| 亚洲性少妇| 91视频成人福利网站在线一区| 日韩AV中文字幕电影| 色婷婷六月| 超碰三级秋霞| 色香阁在线| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲蜜桃V妇女| 亚洲免费成人在线高清无码视频 | 足交视频老司机| 中文字幕神马久久| 9久精品视频在线观看| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 欧美激情亚洲情色| 男人的天堂日韩| 国产在线激情| 99re超碰| 五月天久久综合网| 日韩不卡av一二三| 美女黄页| 国产综合久久久鬼色| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV | 人妻中文字幕精品无码| 八人操人人摸人人看| 秋霞蝌科网日本一区| 日韩性爱电影一区| 亚洲男人天堂网久久| 亚洲色图加勒比| 国产久久一区二区| 亚洲风情综合网| 中日韓欧美高清| 伊人久久综合影院精品久久久| 日韩无码三级影院| AV 少妇 人妻 偷拍| 深夜啪啪啪视频免费| 射丝袜高跟鞋99| 伊人国产视频| 亚洲国产综合图区中文字幕| 天天日天天搞天天干| 国产熟女完整版中字| 国产成人精品亚洲日本| 青青草视频这里只有精品| 久久曰曰| WWW.操逼.COM| 亚洲精品a人片在线观看视| 日韩AC| 91 国产丝袜在线放观看 | 国产亚洲在线| 精品无吗久久| 亚洲 欧美综合| 国产主播福利| 亚洲精品亚洲人成人网| 男人天堂综合| 99无码狠狠久久| 欧美日韩 强奸乱伦| 九九九九久久久| 偷拍综合亚洲| 久久精品午夜国产亚洲AV无码| 大香网站| 人人综合| 日韩欧美成人午夜福利| 狠狠操狠狠插| 天天搞欧美| 99这里只有精品| 蜜臀久久99精品久久久久久-DVD原版全| 久久精品久久九九精品| www.四虎在线| 五十路一区无码| 亚洲一区中文字幕一区| 麻豆激情综合| 国产JDAV无码视频在线观看| 狠狠操狠狠插| 大香蕉92| 女人高潮大叫一级毛片| 激情综合网一盗摄| 久久精品 六十路 熟女 欧美| 日韩黄色一区二区三区| 午夜福利在线合集| 岛国黄片网站| 亚洲中文电影| 亚洲欧美另类激情小说| 欧洲成人性爱视频| 综合网久久| 麻豆AV一区二区天美传媒| 欧美性巨大╳╳╳╳╳高跟鞋| 亚洲色9| 青娱乐二区免费| 天堂九九九九九九九九九| 一区超碰一区| 3P乱轮视频| 黑人与人妻| 超碰97人人cao| 日本免费一区二| 97超碰欧美精品| 韩日无码在线观看| 加勒比性爱成人在线| 国产高清成人mv在线观看| 亚洲 se图 欧美电影| 在线免费观看高清无码视频| 蜜臀va69| 呻吟 欧美 日本 中出| 一区二区三区在线资源| julia ann久久| 免费观看国产不卡av| 亚洲一区二区三区麻豆传媒| 97超碰超碰| 26uuu欧美| 欧中美三级一区二区三区| 91在线精品| 成熟熟女国产精品一区二区| 777AV电影| 精品人妻一区二区三区夜夜| 欧美丰满少妇xx高潮| 青青草精品| 夜草网站| 亚洲综合九| 成人区人妻精品一| 大香蕉啪啪啪| 中国熟女老妇仑乱一区二区三区| 超碰激情808| 精品久久久av无码免费| 97视频在线视频| 国产精品久久成人免费| 亚洲校园激情| 日本天天操| 中文字幕第2页| 六六久久日韩不卡| 91精品国产91久久福利| 精品美女少妇一区二区三区| 亚洲精品中文字幕一区在线视频| www.男人的天堂| 欧美 亚洲 综合 制服| 国产白丝精品在线观看| 日韩无码AB| 97最新在线播放视频| 神马麻豆福利院| 成人丁香五月| 久久久999| 中文久久96| 久久性爱免费送| 水多多映视AV| 少妇特黄一区二区三区| 69超碰综合| 一级岛国大片| 蜜桃AV天堂| 国产精品肉丝自拍| 美女自卫慰黄网站免费| 国内偷拍精品一区二区| 2020中文字幕在线| 国产视频一区二区在线| 久久98| 女性91网站| 91 综合 色| 九九亚洲| 国产精品一二三区18| 亚洲色性| 伊人991| 五月丁香综合啪啪| 日本性爱欧美性爱| 亚洲最新Av| 国产97av| 青青草原成人| 九九成人精品| 亚洲 日本 一 二 三| 26uuu性物| 性色aV一区二区三区噜噜| 九一综合网| 欧美精品人妻视频| 欧美日韩91| 欧美一区二区福利在线| 囯产精品久久久久久久久久梁医生| 午夜精品久久久久| 天天综合影院91| 伊人AAA| 97国产成人精品免费视频| 人妻性爱一区二区| 日韩人妻无码不卡网站| 亚洲麻豆18发?| 国产无遮挡| 69超碰综合| JULIA一区二区三区在线播放| 久久久久免费看少妇A片特黄| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 97亚洲在线| 五月天人妻综合| 亚洲熟久久| 啊操爽品善一区二区三区| 久久啊哟| 蜜桃中文字日产乱幕4区| 色情综合| 丁香五月激情综合| 超碰在线99| 久久9视频| 天堂8在线新版官网| 欧美强奸乱能| 午夜无码精品免费看性色| www.久久制服糖| 另类亚洲一区二区三区| 国产精品人妻熟女aⅴ| 亚洲黄色电影| 日韩BBN| 熟妇一区二区| 亚洲综合影院| 操屄日韩| 日韩欧美午夜一区二区| 狠狠中文字幕| 手机在线人成免费视频| 深田咏美亚洲精品福利社| 熟女精品va中文字幕| 成年女人黄网站| 国产尤物AV尤物在线观看不卡| 99在线无码精品秘 入口黑人| 色狠狠 - 百度| 欧亚性爱视频免费看| 亚洲二区精品在线观看| 青青草天天亲夜夜操网| 亚洲1区| 精品超碰中文在线| 春色校园综合网| 麻豆 亚洲 97| chaopen97久久| 老熟妇91| 日韩无码黄色片| 欧美日韩性爱无码| 色五月婷婷久久| 91爽啪| 干b在线性社区| 天天看高清麻豆| 久久99久久99精品天美传媒棢·纸:.| 性91| 欧美精品日韩久久久九| 久热大香蕉| 亚洲少妇诱惑| 色综九九九一区| 啊啊啊啊网站| 干婷婷综合网| 久草视频制服诱惑| 精品人妻15区| 韩国一级做a久久久久| 免费的黄片有限公司| 久久精品国产亚洲AV片多多| 精品女人999| 免费久久9999| 91女日逼| 四虎影视永久在线免费| 人妻啊啊人妻啊| 97日视频| 欧美成人精品欧美一级乱黄一区二…| 日韩中文字幕国产| 天堂精品在线| 欧美玖玖爱免费玖玖| 91宗合网| 天堂中文日本在线观看| 亚洲男人天堂网久久| 啊啊啊啊啊好舒服视频| 久久产精品一区二区三区电影| 国产操偷| 亚洲色图欧美色图制服丝袜| 老鸭窝成人| 伊人网免费视频| 91久久久久久久久18| 91九九九小逼| 日本色日夜干| 天天舔天天 | 在现视频女上位好爽| 青青草玖玖爱| 国产av激情无码久久天堂| 婷婷五月成人| 亚洲天天天| 午夜福利av电影在线| 好淫网一二三视区| 欧美天天射| 天堂种子在线www网资源| 日本一天色道久久久精品视频| 一二三区精品视频| 99爱爱| 超碰综合97在线| 国产精品永久免费10000| 欧美日日夜夜| 欧美v亚洲v综合v国产v妖精| 亚洲色堂免费视频| 亚洲图片欧美色| 激情婷婷丁香| 欧美综色欧| 97最新在线播放视频| 99精品高潮| 日日插夜夜| 色婷婷婷五月天激情四射| 91搡老女人老妇女老熟女歌词翻译| 国产一级αv免费看片| 精品性爱久久视频| 日本免费人成视频播放120秒| 亭亭丁香激情| yaouchengrenav| 亚州综合电影| 中文日本免费高清| 超碰免费欧美7| 亚洲成人在线高清| 91在线丝袜| 亚洲成av人片色午夜乱码| 亚洲自拍青操视频| 日本理论在线| 日韩有码专区| 青春草A| 日韩精品一区二区日韩| 乱码人妻一区二区三区| 国产精品自在自拍视频| 亚洲图片欧美偷拍| 天无日色综合| 在线人成亚洲视频免费观看| 亚洲天天精品| 色色国产| 夜夜操美女| 老熟妇综合| 中文字幕aⅴ在线视频| 亚洲有薄码区久久在线一区| 久久极品伊人| 国产精品国产亚洲区艳妇糸列| 久草资源在线视频官方总站日韩丝袜美腿| 欧美性爱日韩高清| 日韩电影免费网站麻豆视频| 中文啪啪视频| 天天躁日日躁AAAAXXXX国产 | 女人一区| 日操粉逼逼| 亚洲Av诱惑| 中文乱码99| 中文字幕乱在线伦视频中文字幕乱码在线 | 人妻少妇被猛烈进入中| 亚洲色图片区| 99啪啪| 影音先锋视频在线| 乱人乱色一区二区三区免费| 九九九午夜| 国模私拍一区二区三区神乳| 青青操国产夫妻| 97人人爱人人做人人乐| 欧美黄片欧美黄片xxx| 亚州综| 欧美情色贴图| 色色国产| 亚洲成?V人片在线观看福利| 99国产精品| 国产精品高朝久久久久久久| 东京热男人的天堂网| 亚洲国产精品99久久久| 性欧美91| 物业黑人 AV一区| 熟妇人妻精品一区二区视频色欲| 婷婷丁香五月天亚洲天堂网| 国产无马在线| 熟女91网站| 在线情色电影 91大 | 3p国产欧美99热| 色吧5亚洲| 久久久啊啊啊| 97草草| 欧美精品丝袜久久久中文字幕| 999岛国大片| 涩涩涩综合| 黑人综合网| 精品制服美女中文一区二区三区| 1区2区3区中文字幕日韩| 激情五月天婷婷| AV不卡在线| 一级AV性爱| 久久久久久久97| 小电影欧美91| 国产人妻精品一区二区三区秋霞| 大鸡吧尹人在线| 九热视频| 激情五月天色色| 看一级特黄a大一片| 亚洲欧美国产va在线播放频| 97国产精品| 亚洲黄色| 久久久性爱| 天天射天天色成人| 久久精品无码一区二区三区| 精品久久久一本一道| Julia Annxxxxx| 欧美久久草熟女| 中文字幕在线观看AV| 日韩人妻大香蕉| 91色久| 午夜大香蕉| 综合网色| 亚洲麻豆精品二区三区| 久久草草欧美精品| 黑操B| 亚洲五月丁香花狠狠干一区二区三区| 操逼视频免费日韩无码| 欧美亚洲色图另类国产| 成人无遮挡毛片免费看| 久久无码一区二区二三区性色| 色在线视频导航| 久夜操| 久久久性爱| 偷拍 亚洲 欧美| 国产高清成人免费视频| 玖玖爱在线视频免费观看| 人人操人人爽人人操人人| 一级性爱视频免费观看| AV和黑人在线播放| 国产小视频91| 六月丁香五月婷婷| 久久国色天香香蕉| 在线观看视频91| 国产第11页| 青草伊人网| 97爱综合| 久久社区一区二区三区| 亚洲福利中文字幕在线| 日本有码久久| 中文字幕88av在线| 亚欧美色图| 亚洲色图欧美| 亲子敌伦对白在线播放| 特级毛片特黄久久免费看| 中文字幕性感少妇av| 大奶啊啊好爽| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 天天夜夜rb| 日韩无限资源| 天天干干天天干干| 丁香五月激情五月| 99青青草国产视频| 一二三四区电影| 91熟女在线| 久久riav中文精品| 熟女突然公开看18禁影片| 日韩久久超碰色| 亚洲女人毛茸茸91| 国产中出内射一区二区| 97欧美性爱| 欧美成人9797| 骚人妻少妇视频| 亚洲欧洲激情卡通另类文学四射小说网站 | www.狠狠干.coom | 蜜臀亚洲中文| 麻豆视频一区二区| 人人看欧美性爱| 嗯啊不要在线观看嗯啊| 九九热午夜欧亚国产视频| 丁香九月婷婷| www.av在线观看| 欧美内射少妇| 欧美日韩久久精品爱爱| 久久成人午夜精品影院| 极品白嫩福利在线| 综合网亚洲在线| 在线亚洲 欧美 日本专区 | 日本精品五区| 柠檬AV导航| 性色av一区二区| 夜夜爽夜夜爽| 久综合网| 伊人嫩草| 国产精品视频一区二区三区八戒| 亚洲情色1区| 爱爱啊啊啊| 超碰国产在线| 97操97干| 午夜男人一级A片7777| 中文字幕久久精品一区| 激情五月天中文字幕色| 丁香激情网| 亚洲欧美内射| 永久免费发布性爱网| 91成人国产综合久久精品蜜月| 啊啊啊骚| 成人资源中文字幕在线观看天天| 另类图片五月天| 风流老熟女一区二区三区l| 男人天堂站| 曰韩中文人妻视频| 日韩草久视频| 起碰97| 国产欧美日韩女同性恋ww喷水精品| 99色在线| 高清在线偷拍自拍视频| 麻豆色99999| 一起草精品人妻| 欧美一区二区三区成人性生活| 日本不卡高清视频| 99热这里只有精品1| 欧美黄片欧美黄片xxx| 青青草无码视频| 操逼操逼视频操逼| 国产超碰97| 日韩人妻一区二区精品| 91中文字幕在线观看| HEYZO高无码国产精品227| 曰本特级特黄特色黄色A级网站高清在线免费看 | 成人一级二级| 爱我干综合| 校园激情狠狠四射| 久久人人妻| 天天看天天日天天操| 爱欲AV| 欧美日产国产在线成人第一区| a人欧美综合天堂麻豆| 成人av影院在线观看| 狠综合网| 色婷婷成人| 大肥女高潮bbwbbwhd视频| 男人下部插入女人下部 | 人妻天天爽夜夜爽2| 免费A V在线| 精品视频一区二区| 翘臀vidoes| 欧美激情性爱视频网站| 久久精品无码熟妇一区二区三区视频导航| 中文操嬖片。| 另类图片综合| 精品一二三区女同| 久久丁香| 一二三四视频中文字幕在线看| 热的中文 热的有码 热的国产| 操逼操操操91| 国产黄色剧情影片麻豆免费播放| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 天天影视之亚洲综合网| 日韩中文字幕在线视频观看| 亚洲无码 国产无码| 色偷偷超碰亚洲| 欧美日韩丝袜| 欧美熟女操屄| 国产精品com| 熟女熟妇伦久久影院毛片一区二区| 久久99久久99精品免视看婷婷| 亚洲中文字幕熟女| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 99色在线| 亚洲一区二区三区AV无码| 乱性AV| 东京男人天堂| 97天天弄| 九九无码久久精品视频| 美女操逼福利视频| 国产精品懂色tv影视免费观看| 欧美日本视频一区| 欧美日本久久精品一区 | 少妇无码av专区线| 亚洲欧美日韩激情不卡| 欧美在线综合| 97视频7| 超碰三级秋霞| 国产粉嫩出水在线播放| 久久青青草原免费视频| 啊啊啊啊啊啊好多水| 经典丝袜一区| 欧美视频激情久久久久久| 久青草影院| 久久精品国产96精品亚洲拳交| 亚洲麻豆av一区二区| 性欧美999| 中出后入| 欧美日韩亚洲五月天婷婷| 人人爽天天爽| www.国产高潮精品| 国产美女高潮叫床视频| 欧美激情性爱视频网站| 国产偷人伦激情在线观看| AV中文字幕三四五| 亚洲自拍青操视频| 免费97视频| 国产乱码精品久久久久久| 日本免费中文一区二区三区四区| 一级特级aaaa毛片免费观看| 久久日韩精品一区二区| 一级乱伦网站| 久久久久久久9最新免费视频观看| 色吧5亚洲| 无码国产精品久久久久| 大香蕉强奸乱伦| 2019天天干天天操| 91天堂色男人的天堂| 亚洲一卡二卡在线免费| 久操网无码在线| 超碰国产精品无码| 国产野战露脸在线播放| 综合 欧美 亚洲 日本| 蜜乳AV.COM| 亚洲精品a人片在线观看视| 亚洲春色欧美激情自拍| 精品一区二区三区丰满熟女-亚洲欧美一区| 五月婷婷六月丁香| 天天干美少妇一区| 91欧美长吊| 色悠久久久av| 欧美综合色| 97伊人超碰| 精品久9| 91四海无码日韩欧美| 久久女女| 久久老熟女| 国产精品农村妇女| 精品天堂| 啊啊啊操死我| 久久中文字幕不卡人妻| 韩国手机不卡无码三级视频| 在线播放一级无码视频| 欧美极品性爱天天射| 国产操偷| 色色婷| 禁片 高清 在线观看视频网站| 屌逼麻豆| 国产婷婷一区| 一区二区三区色综合| 久久视频,这里只有精品 | 国产又色又粗又黄又爽| 精品丝袜无码一区二区三APP| 国产亚洲女v在线观看| 免费看欧美美女黄色大片 | 三级AV入口| 播播亚洲小说亚洲| 丝袜美腿欧美| 高潮综合网| 自拍啪啪视频| 日本不卡一区二区| 国产高清26uuu| 91啪啪视频| 精品一区二区三区蜜桃臀赵总 | 日韩精品电影| 亚洲少妇视频| 国产精品探花色| 久久精品国产72国产精品福利| 91丨九色丨43老版熟女| 欧美黄色图片| 尤物AV免费网站| 欧美人与动性人交a| 91呆哥人妻| 欧美性暴力猛交XXXX| 久久久久96| 91福利网在线观看| 自拍偷拍2025在线观看| 97国产精品国| 久久九九精品一区二区| 国产精品久久久久久久无码AV| 成人网站 免费观看| 精精夜夜| 国产乱码精品久久久久久| 久久春色| 天天草天天干天天日| 香蕉一区二区三区在线视频| 伊人久大| 亚洲第一精品在线视频| 亚洲人妻一区二区三区| 国产吹潮女在线观看| 一本色道无码DVD中文字幕| 无套内射性感少妇视频| 精品十三区| 男人综合网| 天天草天天干天天日| 九热大香蕉| 日本一区二区三区四区五区六区七区八区九区| 性爱Av免费| 日本不卡三级网在线播放| 偷拍欧美亚洲| 中国女人内射6XXXXX| 九九热视频这里只有精品| 亚洲午夜精品久久久中文影院| 亚洲精品国产专区在线观看| 久久久久久久久久久久久9999| 中文字幕第二页| 国产综合网站在线播放 | 色诱中文字幕| 国产自制av蜜乳| 久久99国产综合精品女同| 91n免费处女| 日本黄色大片一级视频免费麻豆| 色妹子A V| 精品人妻av区天天看片| 另类在线| 激情婷婷丁香| 久久性爱大全| 99热线麻豆| 人妻精品一区二区在线| 97超碰免费生活| 色就色综合| 成人一区二区三区四区| 国产av激情无码久久天堂| 另类亚洲图色| 久久久新亚洲AV| 嗯嗯嗯不要不要免费视频| 国产精品白丝| 人妻夜夜爽天天爽麻豆三区网站| 久久69| 黑操B| 少妇久久久久久久| 啊嗯好大视频在线观看| 久久性爱视频免费看| 日韩偷拍色图| 黄色免费一级在线毛片| 欧美性,亚州色| 最近2018中文字幕在线高清第一页| 麻豆久久久久久久久丝袜| 香蕉国产精品麻豆亚洲欧美日韩| 熟妇视频一区二区三区在线观看| 日韩在线地址一| 欧美91精彩| 丁香九月激情| 天天躁日日躁狠狠躁| 午夜天堂网| 午夜无码精品免费看性色| 欧美综合777| 久热大香蕉| 超碰诱惑| 一区二区三区男女操逼黄色小电影| www.伪伪| 就去色综合| 丰满人妻一区二区三区四| 国产欧美日本亚洲精品| 久日综合网| 婷婷亚洲综合| 操国产逼| 国产精品欧美激在线| 亚洲系列第一页| 欧洲站一级二级三级h| 激情文学网伊人| 亚洲一区二区三区中文字幕| 中文字幕第二页| 99热97| 中文字幕中文字幕一区二区| 91痴汉| 75大香蕉| 日本岛国黄色网址| 欧美第一页| 91少妇香蕉久久精品| 亚洲五月天激情| 国产成人久久精品蜜臀| 国产性刺激| 成人国产精品三级A片| 男人的天堂 在线一区| 伦理日韩国产久久| 日韩av熟女一区二区三区成人| α√在线| WWW.操逼.COM| 九草九九九| 超碰1024久久| 亚洲色吧网| 九九视频黄色片| 亚洲图片另类| 偷拍新久久| 玖玖综合色| www.五月天| 亚洲成人福利电影免费| 免费精品无码一级毛片牛牛影视| 蜜臀一二三| A啊啊在线观看| 99热精品在线观看| 伊人网青青| 国产强奸无码乱伦| 欧美成人贴图| 天天摸天天舔天天操| 日韩伦理久 久久 清纯| 精品亚洲国产成人av网站| 国产婷婷综合在线观看| 国产一区二区精品久久久不卡蜜臀| AV丝袜少妇| 殴美性色a级欧美| 五月天色色网站| 婷婷影院入口| 成年人三级黄色片视频| 国产超碰AV在线精品| 大香蕉伊人75| 美女91网| 亚洲情色 无码专区| 欧美日韩精品久久| 一区 欧美 日韩 麻豆| 国产亚州日韩欧美看片| 欧亚性爱啪啪| 欧美性爱1080p| 久久久久久久九九九九九九| 激情小说在线视频| 2020中文字幕在线观看| 后入合集| 在线播放中文字幕| 色色青青久久| 激情四射熟女丝袜| 亚洲人久久久网| 欧美一区二区成人一卡| 69精品人人人人| 开心婷婷五月| 亚洲色吧网| 99∨VTV| 久久性爱视频| 婷婷综合久久| 91视频国品一二三区| 国产乱码久久| 色老汉色| 好看的91视频| 精品人妻一区春色| 久久久久9| 91成人久久| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 牛牛操视频逼| 黄视频免费| 精品一区二区三区国产| 日本精品一级二级三级| 亚洲AV麻豆Aⅴ无码电影一| 欧美色www亚洲国产阿娇要播| 天天射日日干| 成全动漫视频观看免费下载| 久久久久久久久久久免费精品| 人人干黄色| 少妇3P性爱自拍| 在线观看黄色电话| 91在线视频观看国产| 婷婷91| 日韩人妻精品久久久久| 欧美日韩高潮喷水91| 大香蕉在线视频15| 99xav| 欧美中字不卡| 欧美综合另类| 国产精品一区二区亚洲人成毛片| 26uuu国产日韩综合在线观看| 啪啪啪精品视频| 五月婷丁香| 亚洲 图片 欧美 色图| 久久人妻少妇| 青娱乐91| 中文字幕日韩专区精品系列| 国产AV激情无码久久无码| 国产精品午夜高潮呻吟久久av| 国内自拍 日韩激情 99| 亚洲天堂另类美腿| 97精品国产手机| 日天天九九天堂666| 搡老女人老熟女91| 亚洲1区2区三区高清中文字幕| 在线强奷到舒服的无码视频| www.狠狠干.coom | 中文字幕乱碼在线| 色香91| 少妇久久久久久| 思思在线免费视频| 操穴国产| 97视频在线观看网站| 9999久久久| 国产精品一区二区三区,亚洲综合| 无码天天操| 强奸少妇AV导航网| 曰本道人妻久久久在线不卡色视频| 九九九九精品精| 曰本人妻人人澡人人夹| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 欧美A片中文字幕| 九九热精品| 夜夜久久| 亚洲天堂资源网| 欧美不卡二区| 91在线视频免费中出| 九九九久| 日欧亚洲二三区大片不卡| 天美av在线观看| 一本色道久久综合狠狠操| 88xx成人精品视频| 九九亚洲视频| 青青草成人视频在线观看二区| 欧美色网| AV中文在线| 午夜无码熟妇丰满人妻| 黄色香蕉视频网站一区| 九九色综合| 狠狠图片青青草| 91免费看一区二区三区| 午夜婷婷| 国产97综合| 无码国产Av| 97欧美精品综合| 久久久久成人网| 成人aⅴ一区二区三区| 久久久久久久久久久久久久9999| 中出20p| 欧美日本中字另类在线| 色爱综合网欧美| 老司机香蕉| 91在线精品| 人妻激情在线视频| 91人妻最真实刺激绿帽| 5252色欧美在线| 91欧美情色| 亚洲精品日韩国产欧美| 日韩一区二区熟女| 91激情| 精品久久久av| 天天澡天天爽日日AV| 大香蕉97久久| 本道综合精品| 五月天黄色激情视频| 欧美色图中文字幕| 国产一区二区三区高清视频| 91熟女熟妇视频网站| 熟妇色99| 深夜啪啪啪视频免费| 麻豆区久久久久亚| 亚洲日本韩国在线| 91精品婷婷国产综合久久| 日韩免费看黄片| 亚州精品人妻一二三区| 久久精品福利影院| 校园春色宗合网| 亚洲二区精品在线观看| 伊人aaa| 亚洲欧美国产成人综合不卡| AV丝袜少妇| 人人插人人摸人人| 久久久天美| www久| 欧美色院| 亚州 综合 色图| 韩国黄片aaaa| 色婷婷久久综合超碰| 亚洲一欧洲中文字幕在线| 九99久久| 亚洲性爱高潮影院| 大学生美女口爆| 久久亚洲不卡一区二区三区| 欧美精品23| 97超碰总站| 欧日韩不卡视.频| 伊人网免费视频| ai欧美亚洲小说| 无套内射性感少妇视频| 国产精品大屁股999| 97资源制服丝袜| 国产日韩手机视频在线| 色爽——AV| 久操精品网| 美女性91| 自拍欧美| 黄片在线免费在线观看| www亚洲欧美| 国产一区96在线| 2019天天干天天操| 91情色在线| 在线综合 亚洲 欧美中文字幕| 上海一级黄片| 四虎精品永久在线播放| 亚洲欧美国产中文字幕| 免费看久久久性性| 国产高清自拍视频| 亚洲91网。| 99在线观看| 久久精品 六十路 熟女 欧美| 啊啊啊不要嗯嗯在线观看| www.超碰| 男人天堂网站| 久久久久久久久久久久久久久久9| www.99在线| 色在线综合| 日本中文字幕一区| 18一区二区三区| 国产视频不卡在线观看| 91香蕉国产尤物视频| 熟女久久久| 磁力99AV| 天天做天天爱天天高潮| 中文字幕国产| 亚洲牲交| 91亚洲网站| 九九av| 精品国产污一区二区三区| 强免费黄色网址| 久久黄色性爱视频| 91在线免费精品视频| 久久久久久99999国产精品| 青青草在线视频欧美| 狼天天狼天天大香蕉| 亚欧韩av| 岛国色情视频在线观看| 懂色Av| 欧美97超碰| 亚洲好色人妻| 日韩资源网| 欧美性色综合网| 高清不卡一二三区视频......| 国产女人成人精品视频| 久久riav中文精品| 国产强奸AV在线| av影片在线观看不卡| 亚洲中文sv| 欧美天天在线| 午夜后入| 色网综合网| 国产又大又粗又长视频在线| 欧美极品女人的天堂| 超碰久热| www99热| 97人人干人人操| 色爱三区| 在线综合 亚洲 欧美中文字幕| 国产精品分类在线观看| 久久久久久久久999| 男人的天堂久久| 97av,com| 久久精品99| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 欧美人妻一区二区| 区自美91| 劲爆欧美人妖三区91| 国产丝袜美女诱惑| 97青青操视频| 成人影 天天操 亚洲| 天堂蜜桃无码视频一区二区| 国产精品自拍欧美在线| 性爱av在线免费观看| 秋霞一级视频在线观看免费| 日美免费黄片| 国产综合在线视频网站| 日韩性爱人人爱人人操| 18啪啪手机免费性爱| 性暴力欧美猛交在线直播| 99re98| 日韩欧美亚欧在线视频| 国产一区二区成人av在线播放| 日本色色色网站免费看不卡| 国产精品丝袜在线| 97免费在线视频| 国产精品黑人一区二区三区| 久久日韩肥臀| 免费看污网站| 免费看污网站| 自拍二页| 使劲用力艹少妇视频一区二区 | 亚洲九区| 欧美性爱精品一区二区| www.91色综合| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 秋霞 色色| 综合伊人激情| 亚洲AV无码AV吞精久久久久| 欧美综合娱乐久久| 亚洲强奸乱伦影视网| 久久性视频| 欧美亚洲玖玖玖| 欧美性爱网97| 操逼无毒无码免费视频| 女生看匆91网站| 69国产对白刺激| 粉嫩不卡一区二区性爱| 国产成人+综合亚洲+天堂| 婷婷四五区| 久日91在线| 日韩精品 欧美激情| A级在线视频| 亚欧成人中文字幕一区| 99综合网| 97频视在线|