Excel VBA批量排座

花了三個(gè)小時(shí),做了一個(gè)自動(dòng)排坐的程序和模板,自動(dòng)匹配排座。效果如下圖

原始數(shù)據(jù)

座位模板

生成效果


源碼:

Option Explicit

Type typData

? ? NianJi As String

? ? BanJi As String

? ? XueHao As String

? ? XingMing As String

? ? ShiShiHao As String

? ? ZuoWeiHao As Integer

? ? WeiZhi As String

End Type

Sub ExamRoom()

? ? Dim i As Integer

? ? Dim j As Integer

? ? Dim r(1 To 64) As Integer

? ? Dim c(1 To 64) As Integer

? ? Dim DataStr() As typData

? ? Dim d As Object

'? ? Dim Loc() As String

'? ? Dim MaxNum() As Integer

? ? Dim Loc

? ? Dim MaxNum

? ? Dim LocCount As Integer

? ? Dim cnt As Integer

? ? Dim Has As Boolean

? ? Dim rng As Range

? ? Dim wb As Workbook

? ? Dim osht As Worksheet

? ? Dim sht As Worksheet

? ? LocCount = 0

? ? Set osht = ActiveSheet

? ? For i = 1 To 64

? ? ? ? For Each rng In Worksheets("64人").UsedRange

? ? ? ? ? ? If rng.Value = "空座" & i Then

? ? ? ? ? ? ? ? r(i) = rng.Row

? ? ? ? ? ? ? ? c(i) = rng.Column

? ? ? ? ? ? End If

? ? ? ? Next rng

? ? Next i


? ? Set d = CreateObject("scripting.dictionary")


? ? cnt = Cells(65536, 1).End(xlUp).Row - 2

? ? ReDim DataStr(0 To cnt)

? ? ReDim MaxNum(0 To 0)

? ? ReDim Loc(0 To 0)

? ? For i = 1 To cnt

? ? ? ? DataStr(i).NianJi = Cells(i + 2, 1)

? ? ? ? DataStr(i).BanJi = Cells(i + 2, 2)

? ? ? ? DataStr(i).XueHao = Cells(i + 2, 3)

? ? ? ? DataStr(i).XingMing = Cells(i + 2, 4)

? ? ? ? DataStr(i).ShiShiHao = Cells(i + 2, 6)

? ? ? ? DataStr(i).ZuoWeiHao = Cells(i + 2, 7)

? ? ? ? DataStr(i).WeiZhi = Cells(i + 2, 8)


? ? ? ? d(DataStr(i).WeiZhi) = d(DataStr(i).WeiZhi) + 1


'? ? ? ? Has = False

'? ? ? ? For j = 0 To UBound(Loc)

'? ? ? ? ? ? If Loc(j) = DataStr(i).WeiZhi Then

'? ? ? ? ? ? ? ? MaxNum(j) = MaxNum(j) + 1

'? ? ? ? ? ? ? ? Has = True

'? ? ? ? ? ? ? ? Exit For

'? ? ? ? ? ? End If

'? ? ? ? Next j


'? ? ? ? If Has = False Then

'? ? ? ? ? ? ReDim Preserve Loc(0 To UBound(Loc))

'? ? ? ? ? ? ReDim Preserve MaxNum(0 To UBound(MaxNum))

'? ? ? ? ? ? Loc(UBound(Loc)) = DataStr(i).WeiZhi

'? ? ? ? ? ? MaxNum(UBound(MaxNum)) = 1

'? ? ? ? End If

? ? Next i


? ? Loc = d.keys

? ? MaxNum = d.items


? ? Sheets(Array("40人", "48人", "56人", "64人")).Copy

? ? Set wb = ActiveWorkbook


? ? wb.Worksheets("40人").Range("3:3,7:7,11:11,15:15,19:19,23:23,27:27,31:31").ClearContents

? ? wb.Worksheets("48人").Range("3:3,7:7,11:11,15:15,19:19,23:23,27:27,31:31").ClearContents

? ? wb.Worksheets("56人").Range("3:3,7:7,11:11,15:15,19:19,23:23,27:27,31:31").ClearContents

? ? wb.Worksheets("64人").Range("3:3,7:7,11:11,15:15,19:19,23:23,27:27,31:31").ClearContents


? ? For i = 0 To UBound(Loc)

? ? ? ? If MaxNum(i) <= 40 Then

? ? ? ? ? ? wb.Sheets("40人").Copy After:=Sheets(Sheets.Count)

? ? ? ? ? ? ActiveSheet.Name = Loc(i)

? ? ? ? End If


? ? ? ? If MaxNum(i) <= 48 And MaxNum(i) > 40 Then

? ? ? ? ? ? wb.Sheets("48人").Copy After:=Sheets(Sheets.Count)

? ? ? ? ? ? ActiveSheet.Name = Loc(i)

? ? ? ? End If


? ? ? ? If MaxNum(i) <= 56 And MaxNum(i) > 48 Then

? ? ? ? ? ? wb.Sheets("56人").Copy After:=Sheets(Sheets.Count)

? ? ? ? ? ? ActiveSheet.Name = Loc(i)

? ? ? ? End If


? ? ? ? If MaxNum(i) <= 64 And MaxNum(i) > 56 Then

? ? ? ? ? ? wb.Sheets("64人").Copy After:=Sheets(Sheets.Count)

? ? ? ? ? ? ActiveSheet.Name = Loc(i)

? ? ? ? End If


? ? ? ? If MaxNum(i) > 64 Then

? ? ? ? ? ? MsgBox Loc(i) & "安排學(xué)生數(shù)量超過(guò)64!"

? ? ? ? ? ? Exit Sub

? ? ? ? End If



? ? Next i


? ? For i = 1 To cnt

? ? ? ? wb.Worksheets(DataStr(i).WeiZhi).Cells(r(DataStr(i).ZuoWeiHao), c(DataStr(i).ZuoWeiHao)) = DataStr(i).XueHao & DataStr(i).XingMing

? ? ? ? If DataStr(i).ZuoWeiHao = 1 Then

? ? ? ? ? ? wb.Worksheets(DataStr(i).WeiZhi).Cells(1, 1) = "(" & DataStr(i).NianJi & ")年級(jí)第一次月考(" & Format(DataStr(i).ShiShiHao, "00") & ")試室"

? ? ? ? End If

? ? Next i

? ? Application.DisplayAlerts = False

? ? wb.Sheets(Array("40人", "48人", "56人", "64人")).Delete

? ? Application.DisplayAlerts = True

? ? MsgBox "輸出完畢!"


End Sub

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本例為設(shè)置密碼窗口 (1) If Application.InputBox(“請(qǐng)輸入密碼:”) = 1234 Th...
    浮浮塵塵閱讀 14,724評(píng)論 1 20
  • 1.1 VBA是什么 直到90年代早期,使應(yīng)用程序自動(dòng)化還是充滿挑戰(zhàn)性的領(lǐng)域.對(duì)每個(gè)需要自動(dòng)化的應(yīng)用程序,人們不得...
    浮浮塵塵閱讀 22,141評(píng)論 6 49
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,854評(píng)論 0 10
  • 第一章 VBA是什么 Visual Basic Application 一個(gè)Excel文件就是一個(gè)工作簿(Work...
    PyJack閱讀 1,958評(píng)論 0 2
  • “幺妹” “要得”、“老孩”……自從我來(lái)了這以后,每天都能聽(tīng)到這些詞匯,帶著濃濃的川味,像他們的火鍋一樣...
    wkj閱讀 715評(píng)論 0 0

友情鏈接更多精彩內(nèi)容