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

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來處理高校教務(wù)管理里掛科數(shù)據(jù)統(tǒng)計(jì)是非常高頻的一項(xiàng)工作。學(xué)期末考試結(jié)束各科成績(jī)出來教務(wù)員或者輔導(dǎo)員需要回答一系列問題每個(gè)班掛了幾科哪個(gè)科目掛科率最高哪些學(xué)生掛科超過三門需要預(yù)警重修名單怎么生成這些問題看起來簡(jiǎn)單但當(dāng)學(xué)生數(shù)量上千、科目幾十門、數(shù)據(jù)分散在多個(gè)Excel文件里的時(shí)候手工處理就變得極其痛苦。我第一次接到這個(gè)需求是在某高校期末階段。對(duì)方拿來的原始數(shù)據(jù)是一張全校成績(jī)總表大概四千多行每行是一個(gè)學(xué)生的某一門課程成績(jī)字段包括學(xué)號(hào)、姓名、班級(jí)、課程名稱、學(xué)分、成績(jī)。需求也很直接掛科名單、掛科率統(tǒng)計(jì)、分?jǐn)?shù)段分布、以及預(yù)警名單掛科超過兩門的要單獨(dú)列出來。說實(shí)話這些需求用Excel自帶的數(shù)據(jù)透視表和篩選功能也能做一部分但涉及到多條判定規(guī)則、跨科目統(tǒng)計(jì)、批量格式化和生成多個(gè)報(bào)表還是VBA更合適。寫這篇博文就是把這套處理掛科數(shù)據(jù)的完整思路和代碼實(shí)戰(zhàn)過程拆開來講。從數(shù)據(jù)清洗、掛科判定、按科目統(tǒng)計(jì)、按學(xué)生聚合、生成預(yù)警名單到最后的報(bào)表自動(dòng)排版每一步都給出可以直接復(fù)用的方案。適合輔導(dǎo)員、教務(wù)員、教學(xué)秘書以及任何處理過這類考核數(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é)英語37120230102李某計(jì)科2301高等數(shù)學(xué)56220230102李某計(jì)科2301線性代數(shù)34320230102李某計(jì)科2301大學(xué)英語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)一有的單元格是文本類型有的看起來是數(shù)字但其實(shí)是缺考或緩考字樣。這種臟數(shù)據(jù)必須先清洗。掛科的判定線和課程學(xué)分有關(guān)不同學(xué)??赡苡兴煌?。有的學(xué)校60分及格有的課程按五級(jí)制優(yōu)、良、中、及格、不及格這些都要在寫代碼前問清楚。2.2 方案選型為什么不用公式和透視表在處理這類數(shù)據(jù)時(shí)很多人第一反應(yīng)是用COUNTIFS加IF嵌套不就行了。確實(shí)如果只需要統(tǒng)計(jì)個(gè)掛科人數(shù)公式完全可以勝任。但這套需求里有一個(gè)場(chǎng)景是公式不太好處理的判斷每個(gè)學(xué)生掛科是否超過兩門并把超過兩門的學(xué)生自動(dòng)歸入預(yù)警名單。這樣做是可行的但操作相對(duì)繁瑣需要在輔助列里拉公式再對(duì)結(jié)果做二次篩選。根本的問題在于公式方案是靜態(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也按掛科處理掛科超過2門預(yù)警這些規(guī)則寫在哪里。對(duì)后接手的人來說理解一套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)記、剔除無效行。第二階段檢查有沒有缺失關(guān)鍵字段的行比如學(xué)號(hào)為空的學(xué)生記錄直接跳過。第三階段遍歷所有成績(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é)生聚合問題。成績(jī)總表里同一個(gè)學(xué)生出現(xiàn)多行如果不想辦法聚合就沒法判斷掛科超過兩門。字典在這種場(chǎng)景下的處理思路值得反復(fù)參考。建議在處理學(xué)生數(shù)據(jù)時(shí)先想清楚需要按哪個(gè)維度聚合這個(gè)維度是否適合作為字典的Key。3.2 成績(jī)數(shù)據(jù)的邊界情況處理成績(jī)數(shù)據(jù)遠(yuǎn)沒有想象的那么干凈這是我在實(shí)際處理中遇到最多坑的地方。真實(shí)數(shù)據(jù)里常見的情況包括成績(jī)單元格顯示為缺考或緩考。這類情況通常要按掛科處理因?yàn)閷W(xué)生沒有成績(jī)。成績(jī)?yōu)榭盏膯卧?。不能?jiǎn)單判斷為掛科需要先和對(duì)方確認(rèn)空值含義。在我的模擬項(xiàng)目X數(shù)據(jù)里空值表示該學(xué)生本學(xué)期沒有選修這門課屬于無效記錄應(yīng)當(dāng)跳過。成績(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ù)來判斷這條記錄是否為掛科把所有邊界情況封裝進(jìn)去Function IsFail(scoreCell As Range) As Boolean Dim raw As String raw Trim(CStr(scoreCell.Value)) 空值不算掛科視為無效記錄 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或字典來維護(hù)課程列表因?yàn)檎n程名稱不一定在原始數(shù)據(jù)里有現(xiàn)成的枚舉清單。你無法提前知道全校開了多少門課動(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í)用條件格式把掛科率超過20%的科目標(biāo)紅方便快速定位問題課程。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ī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ù)的過程中逐漸養(yǎng)成的習(xí)慣。一次性把所有邏輯寫在一個(gè)事件處理程序里看起來省事但后期要調(diào)整一個(gè)規(guī)則時(shí)改動(dòng)影響范圍會(huì)比較大容易顧此失彼。4. 完整實(shí)操流程與報(bào)表生成4.1 環(huán)境準(zhǔn)備與數(shù)據(jù)約定實(shí)際操作前先約定輸入輸出格式。我用一個(gè)獨(dú)立的工作簿來處理這類數(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)過原始數(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)。該主過程采用模塊化的設(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 第一階段遍歷并過濾寫入掛科名單 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 跳過無效記錄學(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)存開銷會(huì)明顯增加但訪問速度更快。我在模擬項(xiàng)目X里選擇了單獨(dú)寫一個(gè)GetStudentName和GetStudentClass函數(shù)每次按需在原始數(shù)據(jù)表里查找。學(xué)生人數(shù)在兩千以內(nèi)時(shí)速度尚可如果數(shù)據(jù)量超過一萬行建議換成字典緩存方式。4.3 輔助函數(shù)實(shí)現(xiàn)上面主流程中用到了一些輔助函數(shù)這里一并列出來。重點(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ǔ)充說明判斷字典中是否存在某個(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ì)表掛科率超過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)單開發(fā)工具選項(xiàng)卡中插入表單控件按鈕右鍵指定宏。如果所在的Excel版本不顯示開發(fā)工具選項(xiàng)卡需要在文件-選項(xiàng)-自定義功能區(qū)里勾選開發(fā)工具。這一步驟對(duì)于沒有VBA經(jīng)驗(yàn)的人來說也可能卡住所以我在交接說明里特意寫清楚了路徑。5. 實(shí)操過程中遇到的坑與排查技巧5.1 成績(jī)列存在隱藏空格導(dǎo)致比較失敗實(shí)際處理中碰到過一個(gè)很隱晦的問題成績(jī)列的值在表面上是58但實(shí)際上是58 數(shù)字后面帶空格或者是全角數(shù)字。這些字符在視覺上和半角數(shù)字幾乎一致但CStr轉(zhuǎn)換后參與判斷就會(huì)出問題。排查這類問題的最快方式是在VBA代碼里臨時(shí)輸出每個(gè)成績(jī)單元格的ASCII碼。我當(dāng)時(shí)用了一個(gè)調(diào)試小工具逐格檢查才發(fā)現(xià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ù)系統(tǒng)從網(wǎng)頁端導(dǎo)出的數(shù)據(jù)經(jīng)?;烊肴亲址惶幚淼脑捄罄m(xù)的學(xué)號(hào)匹配、姓名匹配都可能靜默失敗。5.2 同一課程名稱表述不一致導(dǎo)致統(tǒng)計(jì)被拆開教務(wù)數(shù)據(jù)里同一門課在不同老師那里可能表述不同。比如高等數(shù)學(xué)在某些記錄里寫成高數(shù)大學(xué)英語有時(shí)寫成英語。這種情況下科目維度的統(tǒng)計(jì)會(huì)被錯(cuò)誤地拆分成兩行掛科率算出來也會(huì)偏小。解決思路有兩個(gè)方向一是在數(shù)據(jù)源頭統(tǒng)一課程名稱找教務(wù)系統(tǒng)重新導(dǎo)出或者在Excel里做一次查找替換二是在VBA代碼里維護(hù)一個(gè)課程名稱映射表。映射表更適合場(chǎng)景固定、課程數(shù)量有限的情況。我當(dāng)時(shí)做了一個(gè)Dictionary映射把常見別名歸一化到規(guī)范名稱Dim courseMap As Object Set courseMap CreateObject(Scripting.Dictionary) courseMap.Add 高數(shù), 高等數(shù)學(xué) courseMap.Add 英語, 大學(xué)英語 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é)生都要遍歷一次全表性能開銷確實(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ì)算。在宏開頭加上Application.ScreenUpdating False和Application.Calculation xlManual宏結(jié)束再恢復(fù)。這段小改動(dòng)通常能帶來三到五倍的性能提升。Sub ProcessFailData() Application.ScreenUpdating False Application.Calculation xlManual ... 原有邏輯 ... Application.Calculation xlCalculationAutomatic Application.ScreenUpdating True End Sub5.4 常見問題速查問題現(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ù)沒覆蓋缺考標(biāo)記檢查IsWarningFail邏輯確認(rèn)缺考與真實(shí)不及格的區(qū)分規(guī)則輸出表格沒有邊框/顏色格式化代碼未執(zhí)行檢查FormatOutputSheets是否在主流程末尾被調(diào)用數(shù)據(jù)更新后舊結(jié)果被保留沒有清空輸出表舊數(shù)據(jù)在輸出前調(diào)用ClearOutputSheets先做整表內(nèi)容清除按鈕點(diǎn)擊后沒有反應(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í)基本不需要大改。比如說綜合測(cè)評(píng)排名。原始數(shù)據(jù)換成多個(gè)維度的評(píng)分項(xiàng)判定規(guī)則換成加權(quán)得分計(jì)算輸出表換成排名表核心代碼框架可以原樣復(fù)用。再比如說選課名單核查。把掛科判定換成沖突檢測(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ú)立的過程每次有新的數(shù)據(jù)文件就新開一個(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ù)警名單表頂部加了一行說明文字提示預(yù)警規(guī)則是真實(shí)掛科超過兩門避免使用者和教務(wù)辦對(duì)預(yù)警口徑有不同的理解。代碼里每一處規(guī)則都寫了注釋防止半年后自己回來看的時(shí)候還得重新猜邏輯。如果你剛接觸VBA建議先拿這個(gè)案例的數(shù)據(jù)結(jié)構(gòu)——一張成績(jī)表、幾個(gè)統(tǒng)計(jì)需求——練手。把代碼一行行在本地跑通再試著修改掛科線、增加一個(gè)統(tǒng)計(jì)維度、或者把輸出格式改得更符合自己的偏好。VBA的學(xué)習(xí)曲線不算平緩但這種接到一個(gè)真實(shí)需求解決一個(gè)具體問題的學(xué)習(xí)方式比單純看語法書要有效得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
黄色区免费观看中文字幕| 国产不卡精品91| 欧美性生活内射| 不卡啪啪视频| 嗯啊视频免费在线观看| 国产精品 视频| 久久鲁夜| 欧美韩国你懂得在线 | 一起草视频在线| 久久精品视频一区三区小泽玛利亚| 五月婷婷综合激情| 国产小视频91| 日韩99神马视频播放片在线播放| 成人精品视频一区二区| 操少妇很爽av| 免费精品99| 超碰免费在线| 久草成人福利导航| www.狠狠干.coom| 国产精品无码在线| 亚洲成A∨人影院在线欢看| 搡老女人911熟妇老熟女| 色97国产69香蕉| 亚洲日韩欧美一区二区| 丝袜av一区二区三区| 区一在线观看| 色娱乐色呦呦夜夜夜夜av| 亚洲第一页欧美| 伊人综合色网| 亚洲 欧美都市激情| 人妻少妇精品一区二区三区| 亚洲 图片 综合91| 久湿久久| 中字幕人妻一区二区三区| 97精品网| 老熟女乱伦一区| 日韩综合无码一区久久92| 久久精品黄色| 久久性生大片免费观看性| 婷婷超| 国产精品乱码久久久久| 精品无码一区二区三区| 国产中文字幕在线点播| 精品偷拍13p欧美dodk视频| 国产欧美精选激情视频| 六月丁香婷| 蜜桃臀av在线观看| 91亚洲不卡一区| 欧美三级一级| 婷婷五月天无码| 视频二区熟女人妻| 久久久久少妇| www.久久制服糖| 免费1级a做爰片观看| 国产一区二区三区白丝| 五月天黄色av| 亚洲Av噜噜一区二区三区妖精| 欧美成人综合| 天天上日日上日韩精品| 99在线免费观看| 久久精品人体| 超碰精品人妻狠狠干| 情色大香蕉| 国产精品视屏| 亚洲欧综合另类无码一区| 午夜欧美女人操逼| 天天狠| 久久精品老司| 久操国产在线| 国产白嫩漂亮KTV在线| 久碰视频| 呻吟 欧美 日本 中出| 97在线免费观看| 国岛片视频| 伊人综合色网| 精品久久97| 中文字幕日韩精品久久| 九九色色| 欧美日韩系列| 成人a大片在线观看| 99久久婷婷| 人妻熟女一区二区三区在线| 日本韩国国产精品一区| 超碰av在线| 草b在线| 欧美丝袜91| 91精品女厕偷拍视频| 99热这里只有精| 九九综合网| 大象AV在线| 亚洲熟女中文字幕在线| 97精品97| 日韩性爱啪啪视频| 五月天色图影视| wuyechaopeng| 艹比视频国产精品| 骚女高跟AV在线| 91福利网在线观看| 天天综合网国产| 97精品全部| 一区二区三区黄片免费观看| 超碰人妻中文在线| 国内毛片欧美香蕉精品| 色综合中文字幕不卡| juliaann丝袜| 大香蕉人妻| 性交一区二区在线播放| 成全在线观看免费观看| 精品一区二区三区四区外站| 国产日韩欧美三级片| 330dv亚洲成年视频网| 情趣丝袜无码操逼视频| 加勒比综合a∨| 日本人妻伦在线中文字幕| 麻豆天美国美国产| 97干色| 婷婷五月天伊人| 日韩人妻精品| 色官网在线| 麻豆区久久久久亚| 色九区| 青青草一本道福利视频| 六月天婷婷| 欧美日韩色| 婷婷性爱| 国产91啪| 亚洲伊人青青草| 超碰免费人人| 日本黄大片在线观看视频| 欧美色图亚洲特色| 黄色网址久久精品欧美喷水| 啊啊啊免费| 九色97| 久久久久九九九| 九色 人妻 大香蕉| 成人麻豆av电影网站| baiduhicn.com。| 亚洲成人久久一区二区| 青青草原av| 中文字幕二区日韩天堂| 高潮的A片激情扒开一区| 人妻素股| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 亚洲欧洲中文日韩女优乱码| 小明看看网址| 色情五月综合婷婷| 91丝袜在线观看| 丝袜美腿校园春色| 欧美日韩第一页| 超碰91在线| 麻豆AV一区二区| 岛国激情视频在线观看| 国产又粗又长的视频| 少妇超碰在线| 性爱视频无打码在线观看| 中文字幕精品专区搜索结果91| 婷婷性爱| 围产精品一区二区三区视频播放| 欧美加勒比| 亚洲青色欧美| 五月天婷婷基地| 久久男人精品| www.91逼逼.com| KK色在线影院| 粉嫩少妇自慰在线| 99在线免费观看| 丰满岳乱妇一区二区三区| 精品久久97| 欧美视频激情久久久久久| 综合欧美日本三级| 91在线超高颜值国产| 大香蕉78| 男人天堂新在线| 加勒比东京热五月天天堂网| 91麻豆天美国产| 凸凹视频在线观看| 人妻中文字幕日韩电影| 国内亚洲高清无码| 97AV在线观看| 毛片一区二区| 9丨久久九九九 | 亚洲最大成人a毛毛片| 大香蕉综合网| 日本 情色 1区| 中文字幕av丝袜| 蜜桃久久久久久久| 熟女自慰久久久| 欧美日韩91| 成人精品一区二区91毛片不卡| 97av在线观看| 久久久96| 成年人三级黄色片视频| 91九九九馒头| 日本一级婬片试看三分钟| 伊人五月天婷婷| 国产精品点击进入在线影院高清| 久久久精品国产亚洲伊人| 丰满美女一级毛片在线播放| 香蕉视频精品亚洲一区二区三区在线播| 亚州综合AⅤ| 蜜臀av中字字幕网站| 国产成人+综合亚洲+天堂| 无码天天操| 黄色免费一级在线毛片| 日韩精品中文字幕人妻| 强被迫伦姧在线观看无码网站| 夜夜爽夜夜操| 91精片| 天天日天天干少妇日| 果冻传媒一区二区三区| 热的中文 热的有码 热的国产| 欧美 日韩 另类 亚洲| 中文字幕丝袜美腿| 日韩精品影视| 亚洲熟女综合一区二区| 国产精品自拍视频| 国产在线观看一区二区三区| 国产三级在线现体验区| 亚川综合视频| 亚洲日韩美女中文字幕乱| 免费操逼视频下载| 久久色人体 | 国产又黄又粗的视频| 亚洲AV无码乱码| 日日操免费视频| 亚洲精品xxx| 温婉少妇玩3p| 久久精品小视频| 蜜色网色哟哟| 亚洲熟妇综合久久久久久| 亚洲国产中文字幕| 少妇色| www.久久制服糖| 色狠狠 - 百度| 欧美亚洲中文字幕| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 午夜噜噜噜| 91中文字幕| 91人妻最真实刺激绿帽| 99自拍视频在线| 国产老熟女| 欲女人妻性色av| 亚洲欧美情色| 日韩啪啪视频| 免费久久9999| 亚洲在线a| 精品九九国产无码| 亚洲男人天堂Av| 亚洲精品 欧美精品| 粉嫩AV一区二区夜夜| 超碰97人妻免费在线| 日韩不卡毛片Av免费高清| 日本大片日本一区二区免费高清| 青青伊人久久| 日韩中文字墓| 日欧操屄视频| 91色伦综合| 我想要 啊 啊 啊| 午夜.DJ高清在线观看免费7| 激情深爱五月天| 欧美91精彩| 亚洲精品一区二区日本| www.yw尤物| 老鸭窝黄色视频网站| 久热这里只有精品9| 欧美午夜视频免费观看| 久久亚洲天天做| 一区二区影视| 欧美一区二区亚洲天堂| 国产一区二区三区,在线观看观看| 97日亚洲欧美| 国产成人精品亚洲日本| 日本免费一区二区不卡| 九九热久久99精品re| 日日日日日| 夜夜嗨一区二区三区三州加勒比| 免费强奸av| 宗合情欲网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚洲熟久久| 国产1024在线播放| 国产一二三福利视频网| 黄页网站免费高清在线观看| 偷拍色图| 99re公开精品免费视频| 嗯嗯啊好大| 国产黄色在线播放观看| 美女97超碰| 国产性爱强奸乱伦大全| 日韩欧美成人大香蕉| 超碰九7| 亚洲.欧美.丝袜.中文.综合| 91性网| 五月丁香在线| 诱惑网综合| 九九亚洲| 国产日韩无码一区二区三区久久区| 91操碰| 999国产精品999久久久久久| 亚洲免费看片| 91伊人| 精品久一区免费| 97超碰人人模人人拍人人| 一区二区三区精品黑丝白丝酒店对鸡 | 欧美97色| 亚洲视频,小说| 久久伊人亚洲AV无码网站| 91精品成人| 不卡av在线中文字幕| 亚洲精品国产av天美传媒| 日逼逼免费看| 91模特在线观看| 亚洲人人操| 性猛交| 高清不卡视频| 国产精品女生av| 青青草无码视频| 一级久久性爱视频| 美女诱惑久久| 久久熟妇五十路一区| 黄色av网站在线播放| 青青欧美| 亚洲成人在线播放| 中文字幕高清精品一区| 日韩97在线| 色综合加勒比四四季| 久久婷婷综合国际产色怕| 懂色Av一区二区三区| 91九久| 黄色AAAAA欧美| 日日骚一区二区三区| 人妻密肉在线观看| 欧亚在线视频| 久久av一级av少妇av高潮| 性欧美999| 97爱爱影院| 天天草天天干天天日| 视频不卡中文字幕| 最新制服中文第一页| www.操| 操我无码| 高清无码 国产精品| 97日韩超碰超碰中文字幕| 91夜夜蜜桃臀1区2区3区| 少妇干B| 国产精品久久久无码aV去| 18禁久久| 爱妻综合网| 大香蕉伊人亚洲| 久久久久久久久成人av解说| 欧美黄色大片在线观看 | 久久亚洲骚逼综合| 极品极品色影院| 久草精品国产99| 日韩精品永久在线观看| 操逼网站网站| 午夜毛片亚洲精品片国产久久久| 91bbbbbb| 91美女视频直播| 亚州色图欧美| 97国产亚洲中文在线| 亚洲精品一区中文字幕乱码| 国产亚洲精品第一最新| 亚洲小电影免费涩涩成人在线高清 | 91色人妻| 欧美18老人禁| 五月婷亚洲精品天堂| 在线视频资源| 强乱老妇中文字幕| 高潮9999外国| 亚洲丨在线| 大香蕉92| 福利五区| 亚洲双插| 午夜噜噜噜| 久久久精品九| 久久风骚城市人| 高清不卡 中文 人妻| 吉川爱美亚洲二区在线| 亚洲视频二区| 91劲爆| asc国产精品| 久久久久深夜无码| 97伊人超碰| 亚洲春色欧美| 久操国产在线| 精品国产Av无码久久久亚洲| 亚洲成aⅴ人片不卡无码| 亚洲中文字幕在线视频一区二区| 免费人成毛片乱码| 欧美性爱免费短视频| 国产又黄又爽又刺激久久久久久| 免费av在线播放二区| 亚洲熟女精品| AAA久久| 色五月av| 97玖玖人妻| 超碰 另类 欧美 | 九九九九九用不成了| 国产亚洲日本| 亚洲人精品久久久| 中文乱码字幕观看| 欧美精品一区二区少妇免费A片| 免费一级特黄特色大片在线观看看| 操逼操逼视频操逼| www.夜夜| 91超碰碰在线| 亚洲国产综合图区中文字幕| 一区操逼| 久久九九网| 好湿好紧好爽 视频| 97大色网| 欧美91网| 少妇xx精品| 五月丁香影院| 人人妻人人色| 97日韩超碰超碰中文字幕| 97无码视频在线播放| 激情网色| 中文字幕国产精品1区| 1204av韩国| 91久久婷婷| 天天色黄色影院天天操| 任你艹| 国产熟妇一区二区| 99999亚洲| 性色av网站| 青青草在线成人视频| 啊啊啊不要嗯嗯在线观看| 国色综合天| 日韩卡一卡二卡三在线| 清纯唯美激情四射| 97中文热色| 久久久亚洲高清不打码| 久久久久骚| 国产夫妻性生活视频| 欧美日韩另类在线| 97青青操视频| 久草这里只有精品 | 国产无码成人无码| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 9久综合网| 狠狠爱夜夜干| 26uuu性物| 18一区二区三区| 老熟女综合网 | 91精品免费| 狠狠色噜噜狠狠狠狠2018| 久久久久久人妻| 中文无线日韩一区| 美女被艹尤物视频| 蜜桃精品一区二区三区久在线| 欧亚无码视频| 97精品国产97久久久| 国内精品久9| 人人摸人人添人人操| 少妇与黑人高潮在线| 亚洲欧美日韩中文播放| 国模一区二区三区| 亚洲熟女综合一区二区| 久久婷婷精品| 人妻久久| 亚洲天堂电影精品一区| 日韩猛交| 麻豆久久视频在线地址| 亚洲欧美日韩偷拍色图| 91在线欧色| 欧美91精品国产自产| 五月婷婷丁香| 久久精品人妻一区| 日本丝袜美腿人妻九九| 国产亚洲精品A在线观看下载| 国产夫妻一区二区| 日韩激情电影中文字幕| 97欧美色资源| 免费看A片毛毛片在线播| 亚洲男人综合网| 在线无码视频| 中文字幕av一区二区三区人妻少妇| 多乙久久久久久| 亚洲骚男同com| 精品国产精品一区二区| 亚洲日韩美女丝袜美腿人妻视频| 久久欧美1卡2卡3| 三男一女不戴套的A片| 亚洲丝袜B诱惑| 亚洲 欧美 制服 另类 自拍| 精品乱码在线观看| 久操热线| 26uuu最新| 美骚妇av高清在线| 自拍大香蕉乱插| 日韩精品三级| 在线天堂999| 国产专区第一页| 大香蕉在线SuP| 久草大| 84YTCOM性无码| 岛国999| 亚洲人妻av| 国产毛片毛片4p懂色| 欧美夜夜骑视频| 亚洲啪啪性视频| AVE乱伦| 99爱爱| 9久综合网| 亚洲精品xxx| 日本视频一区二区三区| 亚洲熟女综合一区二区| 91 综合 色| 国产按摩一区二区三区| 成人网站 免费观看| 97在线视频网站| 久干网| 天天爱天天韩国日本牛牛牛牛| 国内精品a| 不卡视频一区蜜桃视频 | 2020中文在线一区二区三区| 丰满少妇一区二区三区免费看| 亚洲欧洲日产国产综合网| 伊人婷婷五月天| 欧美日韩国产黄色片| 亚洲丝袜综合| 欧美色图亚洲色,麻豆| 成人日韩中文字幕| 玖色AV| 国产1769在线| 久操网视频| 翔田千里爆乳巨臀无码| 91熟女丨91老女人| av2014 日韩在线中文字幕| www.高清无码诱惑一区.com | 男人天堂久久精品不卡| 黄日韩| 成 人 影视 一区 二区 三区 四区| 爱av免费| 中文字幕成人理论在线| 人人 操人人 操人人| 欧美超碰97| 鸥美中出| 啊啊啊啊免费视频| 精品丰满熟妇人妻一区| 男女香蕉一区二区| 97免费视频在线观看视频| 热久久99999| 美女淫穴| 97视频在线观看高清资源| 精品.99999| 97超碰色五月| 天天干天天日天天射黄色| 人妻激情偷乱视频一区二区三区| 五月婷婷六月激情| 天天干天天干天天| 色蜜AV| 五月天综合| 免费观看啪视频| 欧美成人性爱视频大全| 国产97色在线| 激情五月天婷婷| 亚洲综合激情五月久久| 国产 日韩 欧美 人妻 熟女 中文| 无码日韩网站| 看日韩美女二区三区免费操逼视频| 婷婷色色五月天| a久久| 色女女女导航| 日本啊啊啊啊啊视频| 青青久操| 99热国产| 超碰人妻久久| 久久久久亚洲熟妇熟女| 99国产在线 精品 视频| 日韩不卡毛片Av免费高清| 国产呦精品一区二区三区下载| 午夜福利成人免费视频| 久久怡红院| 亚洲熟妇乱女区二区三区| 久久內射| 日韩精品资源| 秋霞Av理论一级在线| 亚洲国产欧美一区二区潘金莲 | 亚洲激情色片| 久久精品一区一起草| 亚洲精品欧洲色| 亚洲国产一级黄色视频| 99热精品青草在线 | 天天看天天干| 九九性爱网| 天天摸天天插天天日| 性色av一区二区| 青草伊人网| 国产欧美在线观看免费观看| 成人性爱美曰韩| 色综合五月天| 精品欧美日韩在线观看| 粉嫩AV一区二区夜夜| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 色婷视频| 欧亚不卡| 国内一级精品| 国产精品无码av| 激情五月婷婷| 嗯嗯,好大,好爽,好骚| 99超碰网| 亚洲天堂AV在线播放| 亚洲天堂,男人| 国产视频第2页| 日韩在线观看三级电影| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 啊啊啊好爽快点啊啊啊嗯嗯| 久噜噜| 国产精品一区二区三| 人人看欧美性爱| 亚洲国产欧美日韩人妻日中文| 欧美91丝袜| 免费岛国一级片| 色婷婷综合网站| 久久精品中文| 亚洲精品一区二区精品| 偷拍欧美综合| 国产精选视频| 日韩av不卡在线观看| 99天天超碰| 91欧美大片| 色色99| 国产精品对白自产拍| av强奸乱轮| 日本加靬比网站发布页| 国产久久久久久| 激情五月丁香五月| 激情另类激情| 亚洲激情在线一区二区| 成人久久久精品| 人妻丰满熟妇一区二区三| 一区,二区,三区网站| 国产精品熟女一区二区三区| 五月丁香| 91五十路| 淫淫总合网| 97色亚洲| 1024亚洲中文字幕久在线看片你懂的| 夜夜夜爽www精品视频| 亚洲午夜福利视频| 999久久久久久久久| 日韩欧美字幕亚洲一区二区 | 日本在线播放不卡一区| 97视频在线观看网站| 国产男人又猛又粗又爽| 伊人久久亚洲色欲综合网站| 亚洲国产成人精品无码专区| 韩国毛片一区二区三区| 中文字幕在线观看二区三区| 性色高清..……| 五月丁香六月婷| 久久高潮妇女视频| 野狼激情网| 亚洲电影中字一区二区| 日本黄色裸日本黄色裸体| 秋霞久久亚洲精品成人| 青草地一本线一区二区三区| 丁香六月天| 又大又大又大又粗爽高潮观看 | 国产97色在线| 香蕉一区二区三区在线视频| 亚洲天堂一区二区久久| 97久久天天综合色天天综合色电影| 日本国产高清色www视频在线| 老鸭窝成人| 操狠狠| 日B操| 2017天天透天天通天天擦| 亚洲熟女中文字幕在线| 91无遮挡| 亚洲爱爱视频一区二区| 国产精品国产拍高清AV| 欧美天天综合网| 国产成人主播| 国产免费永久精品无码| www.av家庭乱伦| 欧美日韩天堂| 天天综合日韩网| 国产女人高潮嗷嗷嗷叫小说| 亚洲第一页色网| 亚洲色图加勒比| 玖玖爱免费观看视频| 亚洲91色| 精彩久久中文| 性色高清在线| 六月婷婷综合| 国产视频一区二区三区在线免费观看| 欧美九一精品久久久熟妇| 日韩无码嘿咻黑热久| 久久精品国产亚洲AV高级北京| 亚洲熟女人妻中文字幕一区二区 | 自怕偷自怕亚洲精品| 9Ⅰ超碰| 好舒服视频| 久久久久性熟视频| 韩国一级做A片免费的| 国产无码精品无码| 强乱老妇中文字幕| 国产精品久久久久久久久久久久久久久久 | japan日本高清乱xxxx| 91少妇| 久久久无码精品人妻二区| 精品久久久久黄少妇| 婷婷五月天AV| 日韩丰满熟妇| 97资源视频| 日本视频在线中文字幕| 国产丝袜啪啪| 九九人妻| 日韩综合97P| 九九久久国产精品| 99久久com免费视频′| 国产原创剧情在线丝袜 | 骚妻少妇精品性色无码四色A V| 欧美一二三区四五区| 中文字幕人妻丝袜| 九九Av| 无码自拍SM| 中文字幕精品一区二区精| 91福利网在线观看| 91欧美亚洲| 欧美黑人熟妇精品91| 九九精品网| 91中文字幕在线观看| 亚州综合图片| 精品性爱久久视频| 日本黄色裸日本黄色裸体| 久久九七| 樱花草社区www中国| 老熟女熟妇| 亚洲 se图 欧美电影| 精品v1区| 欧美香蕉视xxx| 蜜臀久久99精品久久久久免费观| 亚洲另类色图片| 熟妇人妻一区二区 | 欧美日日操| 又粗又长又爽在线观看| 国产精品一区二区校花| 中文字幕一区二区韩| 欧美性爱三区二区| 在线视频日韩欧美国产| 色色色色综合网| 25国产精品免费观看| 国产这里只有精品| 日韩亚洲美女一区久久| 午夜福利久久久噜久噜久久综合| 精品网站9999| 日韩中文字幕av在线播放| 91爰爱欧美| 美女91av| 亚洲欧美在线丝袜| 国产女人视频三四五区| 女欧美一区二三区| 欧美一级久久久丰满| 久久久久久AⅤ无码免费肉站| 97最新在线播放视频| 天天日日夜夜| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 天美一区在线| 国产精品久久泡妞网站| 国产强奸无码乱伦| 另类小说综合网| 色爱三区| 欧美人妻二区三区| 性交一区二区在线播放| 日本布卡一区二三区| 亚洲人久久久久日| 国产强奸91| www.色操逼| 伊人97色天使| 嗯嗯啊啊啊啊轻点视频| 青娱乐91| 国产高清无码一区三区二区| 99熟女| 韩国三级三级BD在线| 啊啊啊啊,啊啊好多水| 久久久久久九九九九| 国产人妖视频一区在线观看| 91超级碰碰| 欧美激情一区二区| 亚洲日本大香蕉1| 国产精品一区二区a| 久久久久成人亚洲国产| 少妇国产不卡| 日本五区不卡| 亚洲精品一二牛牛| 色99视频| 98精品国产乱码久久久久久| 一区二区影视| 草莓精品视频| 久久最新视频免费观看| 青草精品视频一日本久久久久网站| 国产JDAV无码视频在线观看| 99re久久| 亚洲极品| 欧美一级特黄淫片在线观看| 综精品久久久aaaa| 91美女片在线| 俺去俺来也在线www| 国产传媒一区日韩| 中欧人妻丝袜中文字幕| 国产AV久久久蜜爱影集| 欧美亚洲激情一二三| A一区片| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | www欧美性爱| 男人久久精品| a片自拍直播视频| 夂久色| 久久大香蕉97| 性爱av在线免费观看| 精品无码久久久久| 中国农村熟妇毛片视频| 色av中文字| 成人久久久| 天天干天天爽| 久这精品中文在线观看视频| 久久99网站| 怡红院久久老司机| 欧美 亚洲 偷拍自拍| 超碰9 7女人| 日韩性爱电影一区| 精品乱码在线观看| 国产欧美日韩一区二区三区| 歐美性天天| 中文字幕,人妻,日韩| 亚州再线| 国产在线视频二区| 日本黄色裸日本黄色裸体| Sekablack无码一区| 校园春色欧美色图| 久久久99免费| 欧美大片天天看| 黄色片,com| 久久宗合亚洲| 久草免费在线一区二区| 久久久96精品| 久久五月综合| 国产传媒日韩| 黄色二级片网站| 少妇一区二区三区高速| 秋霞鲁丝午夜无码一区二区三| 欧美一区二区三区入口| 91熟女少妇| 久9热| 男人天堂2017| 欧美熟女妇同| 18禁超污无遮挡无码免费网| 国产精品伦理| 国产suv精品一区二区四区999| 秋霞一级鲁丝片A片| 日本久久综合| 在线视频日韩欧美国产| 熟人人妻少妇精品久久| 久久精品免费| 久久精品国产亚洲AV嘿嘿| 亚洲成人帖图| 久久久久性熟视频| 伊人久久大香线蕉无码| 色欲久久99精品久久| 亚洲 日韩 欧美 国产综合体| 国产精品午夜AV完会免费| 九九九久久久久| 强奸乱伦动态污图免费 | 自拍盗摄一区| 亚洲无码AV九九九| 亚洲久久久久| 久草综合视频| a久久| 日韩精品在线视频在线观看| 久草综合网| 德国一二三不卡| 日韩一区二区三区四区五区| 日韩小电影| 欧美亚洲成人在线一区二区三区| 中文字幕成人| 蜜乳AV.COM| 超碰99在线| 亚洲一区二区 麻豆传媒| 日韩av乱伦| 激情熟女12P| 男人的天堂Va| 国产欧美后入| 久热色情精品| 日本 欧美 国产一区| 操啊国产| 精品对白久久不卡| 男人的天堂久久狠| 丝袜综合色图| 欧美拳交在线播放| 久久久久久久亚洲Av无码| 日日爱99| 91操熟女视频 | 99久久精品无码一区二区| 99re免费| 久久99久久99精品天美传媒棢·纸:. | 久久爽爽精品| 天天综合网一91网| 久久露脸国产老熟女| 成人激情无码在线视频| a片自拍直播视频| 伊人超碰97| 天天综合网合集91| 色色色色色色色色综合| 久久av色| 人妻夜夜爽天天爽麻豆三区网站 | 天天舔天天 | 久久超碰国产一区二区三区| 美女91AV| 91色插| 日韩欧美久久婷婷网站| 国产精品3| 亚洲天堂日本| 九九国产| 色色综合97| 少妇500双飞99| 久久9 9 9精品| 夜夜操2028| 麻豆国产尤物AV| 人人色人人操在线| www成人啪啪18秘 免费| 操逼片中文| 午夜精品五区| 玖玖玖玖精品国产剧情| 无码WWW免费视频网站| 国产东北女人在线视频| 亚洲色图尤物视频| 亚洲色系另类精品国产| 国产精品永久免费10000| 久久性爱视频99| 色色色日本| 国产Av超碰| 天天弄天天操| 中日韩熟女| 国产福利影视| 综合网色| 亚洲成人碰碰| 成人综合色网| 啊啊啊好湿国产一二| 很黄很污的免费网站| 插老姨肥穴| 97视频900| 亚洲97网站| 91精品国产91熟女| 欧美色宗合| 欧美探花网| 国产家庭乱伦网址| 97久久超碰| 伊人综合色网| 欧美国产一区二区三区麻豆传媒| 最新9久久久9免费视频| 亚洲精品久久久久久| 亚洲综合伊人无码久久| 日韩少妇无码| 在线综合 亚洲 欧美中文字幕| 国语国产操逼伊人AV网| 91九色精品熟女内射| 91精品电影18| 91草草草| 99999久久精| 国产毛片片精品天天看视频| 久久av一级av少妇av高潮 | 黄页| 无码人妻精品一区二区三区99不卡| 久久久久久一日韩字幕无码| 91天堂色男人的天堂| 91蜜臀熟女| 加勒比五月天| 日日躁夜夜躁狠狠躁超爽| 妇女性内射冈站HDWWWCOM| 黄片aaaaa一区| 2020视频1区2区3区| 伊人伊人LD| 欧美性暴力猛交| A 在线网址| 日本大片日本一区二区免费高清| 美骚妇av高清在线| 偷拍亚洲视频一区二区三区四区| av激情亚洲五月天| 欧美人妻久久精品二区三区| 亚洲nv男人的天堂网| 天堂射| 亚洲男人电影天堂| 日本在线视频导航| 成人日本精品九区| 综合亚洲网| 在线无码视频| 97WW精品| 久射吧| 国产精品久久久无码aV去| 亚洲无码99| 超碰久在线天天做| 啪啪性爱免费视频| 9 9精品一区二区三区| 中文字幕女同在线| 操逼网站网站| 99视频只有精品| 国产精品乱码久久久、久久| 国产午夜精品理论片一二三区区 | 天天干夜夜鈤| 欧美操逼熟女| 欧美日韩少妇色情| 成人怡红院| 婷婷久热| 天天综合网~91综合网| 青青青国产手线观看视频2| 九九伊人网| 男人天堂久久精品不卡| 久久五月天婷婷丁香中文字幕| 日本三级小说中文字幕| 四虎精品一区二区| 九月婷婷久久| 天堂av最新电影网| 亚洲黄色a级片| 亚洲情色在线| а√天堂资源官网在线资源| 校园春色之综合网| 亚欧成人一级片在线播放| 免费黄色片子| 热热色青青草| 精品国产久热在线观看| 男人的天堂无码| 亚洲国产成人精品无码专区| 嫩草影院永久在线制服丝袜| 成人免费看吃奶视频网站| 久久超碰亚洲人| 强被迫伦姧在线观看无码网站| 青青操97| 1769一区| 啊啊啊啊啊啊好湿好爽视频| PMv在线观看| 亚洲大色堂| 国产乱伦亚洲| 啊啊啊好舒服视频在线观看| 亚洲av综合色区图片亚洲| 农村妇女精品一区二区| 亚洲免费在线探花| 桃色人妻在线视频| 日韩不卡在线一区二区| 久久女女| 99精彩视频| 欧美色院| 少妇六月天| www.91人妻.com| 国产视频第2页| 国内自拍 日韩激情 99| 91高清欧美| 欧美亚涩| 八戒午夜福利理论片| 天天操美美| 免費黃色視頻觀看一| 欧美天天弄| 超碰精品| 亚洲精品人妻吞精av| 色欲久久99国产精品久久久久久| 久操B网| 成人免费看吃奶视频网站| 亚洲清纯唯美| 色色无码| 欧美性爱18观看| 97超碰免费生活| 可以免费观看的AV| 免费精品无码一级毛片牛牛影视 | 亚欧免费| 清纯唯美综合亚洲| 艳美熟妇先锋一二三区| 嗯啊视频免费在线观看| 91天天综合在线观看| 狠狠久久四虎| a级成人毛片免费视频高清| 欧美性色欧美| 韩国女主播青草在线| 8050午夜少妇无码| 国产精品九九九| 中国黄色特级精品一区二区三区片| 天天干,夜夜爽| 99在线免费公开视频| 久久久久久加勒比| 麻豆一区在线| 九九99久久| 久久久久久日韩| 综合久久2017| 99999这里都精品| 四虎AV无码| 日本123区操B视频| 日韩中文字幕视频| 国产农村妇女毛片精品久久| 天堂精品小草| 啊啊啊好爽快点啊啊啊嗯嗯| 超97在线精品视频| 久久97| 91在线观看,天天综合| 欧美日韩婷婷中文| 夜夜爽爽爽| 国产吞精a级片激情电影| 国产精品盗摄 偷窥盗摄| 奶水 人妻 哺乳 在线| 亚洲日韩久久精品一区| 亚洲一二三精品久久网| 国产精品大香蕉| 国产三区免费在线观看| 韩三级a视频在线观看 | 日韩钢筋无码高清啾啾啾| 久久人妻办公室视频| 欧美视频一区二区在线| 波多野结衣AV无码一区| 亚洲在线a| 黑人性欧美| 国产风韵犹存熟妇三区| 超碰夫妻97| 国产精品午夜成人福利| 69人妻人人揉人人躁人人精品| 精品久久99| 久久久免费一级黄片| 国产精品人妻熟女aⅴ| 国产精品免费久久久久久久久久| 骚日日av| 亚洲激情深爱文学小说网站| 大香蕉琪琪日本女优不卡| 操人妻逼91| 中文字幕一二三区| ′ !γ}丶。。久久精品欧美一区二区三区 | 亚洲淫色网中文| 成人网欧美风情| 一区,二区,三区网站| 亚洲夜色在线| 人妻熟女午夜精品在线| 欧美性爱五月天| 久久99网站| 国产亚洲99久久精品| 欧美丰满熟妇XXXX性ppX人交| 99久久e免费热视| AAAAAAAAA黄片| 国产精品久久久久久久黄无码| 黄色电影观看久久9| 一类av片在线看| 人妻 丝袜美腿 中文字幕| 国产亚洲精品美女久久久久久2021| 韩国手机不卡无码三级视频| 国内毛片国产欧美拍| 亚洲精品国产无码高清| 国产午夜在线观看视频| 国产欧美日韩一区二区三区| 淫荡少妇免费| 日本五十路熟女一区二区| 日韩性爱电影一区| 国产精品一区二区黄片| 色啪网| 骚货人妻偷情自拍在线视频| AV色天香在线| 亚洲一二三四区机械| 精品视频97| 欧美成人国产精品| 久久大香蕉97| 人妻铁牛TV| 国产一区二区三区免费视频在性观看 |