我一整天都在研究这段代码,终于让一切都完美地工作了。唯一的问题是代码运行速度相当慢。考虑到它将用于具有数千行的工作簿,我想更改它。我对 vba 非常陌生,所以这里可能有一些东西是错误的或者看起来像是一个糟糕的快捷方式。我想我添加了一些可以加快速度的方法,但我不知道是否可以做其他事情。
Sub Degree_Workboook_Names_major1()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
'Inserts a new column after column H named department names
range("I1").EntireColumn.Insert
range("I1").Value = "DeptName"
Dim abbrRange As range 'range to hold the columns with the department names
Set abbrRange = range("H:H")
'Writes the department name in the the department name column next to the associated abbr
For Each cell In abbrRange
If cell.Value = "ACC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Accounting"
End If
If cell.Value = "ACS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Adolescent, Career and Special Education"
End If
If cell.Value = "AES" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Animal and Equine Science"
End If
If cell.Value = "AGR" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Agricultural Science"
End If
If cell.Value = "AHS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Applied Health Sciences"
End If
If cell.Value = "AHT" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Veterinary Technology and Pre-Veterinary Medicine"
End If
If cell.Value = "Art" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Art and Design"
End If
If cell.Value = "BIO" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Biology"
End If
If cell.Value = "BPA" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Management, Marketing and Business Administration"
End If
If cell.Value = "CCD" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Center for Communication Disorders"
End If
If cell.Value = "CEAO" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Bachelor of Integrated Studies Program"
End If
If cell.Value = "CHE" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Chemistry"
End If
If cell.Value = "CLH" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Community Leadership and Human Services"
End If
If cell.Value = "COM" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Organizational Communication"
End If
If cell.Value = "CSC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Computer Science and Information Systems"
End If
If cell.Value = "ECO" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Economics and Finance"
End If
If cell.Value = "ELE" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Early Childhood and Elementary Education"
End If
If cell.Value = "ENPH" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of English and Philosophy"
End If
If cell.Value = "ELSC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Educational Studies, Leadership and Counseling"
End If
If cell.Value = "GSC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Geosciences"
End If
If cell.Value = "HFA" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Liberal Arts"
End If
If cell.Value = "HIS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of History"
End If
If cell.Value = "INDC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Institute of Engineering"
End If
If cell.Value = "IOE" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Institute of Engineering"
End If
If cell.Value = "JMC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Journalism and Mass Communications"
End If
If cell.Value = "MAT" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Mathematics and Statistics"
End If
If cell.Value = "MLA" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Modern Languages"
End If
If cell.Value = "MMB" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Management, Marketing and Business Administration"
End If
If cell.Value = "MSP" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Military Science Program"
End If
If cell.Value = "MUS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Music"
End If
If cell.Value = "NUR" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Nursing"
End If
If cell.Value = "OSH" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Occupational Safety and Health"
End If
If cell.Value = "POL" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Political Science and Sociology"
End If
If cell.Value = "PSY" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Psychology"
End If
If cell.Value = "THR" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Theatre"
End If
Next
'Inserts a new column after column H named department names
range("M1").EntireColumn.Insert
range("M1").Value = "DeptName"
'Dim abbrRange As range 'range to hold the columns with the dpeartment names
Set abbrRange = range("L:L")
'Writes the department name in the the department name column next to the associated abbr
For Each cell In abbrRange
If cell.Value = "ACC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Accounting"
End If
If cell.Value = "ACS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Adolescent, Career and Special Education"
End If
If cell.Value = "AES" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Animal and Equine Science"
End If
If cell.Value = "AGR" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Agricultural Science"
End If
If cell.Value = "AHS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Applied Health Sciences"
End If
If cell.Value = "AHT" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Veterinary Technology and Pre-Veterinary Medicine"
End If
If cell.Value = "Art" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Art and Design"
End If
If cell.Value = "BIO" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Biology"
End If
If cell.Value = "BPA" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Management, Marketing and Business Administration"
End If
If cell.Value = "CCD" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Center for Communication Disorders"
End If
If cell.Value = "CEAO" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Bachelor of Integrated Studies Program"
End If
If cell.Value = "CHE" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Chemistry"
End If
If cell.Value = "CLH" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Community Leadership and Human Services"
End If
If cell.Value = "COM" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Organizational Communication"
End If
If cell.Value = "CSC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Computer Science and Information Systems"
End If
If cell.Value = "ECO" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Economics and Finance"
End If
If cell.Value = "ELE" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Early Childhood and Elementary Education"
End If
If cell.Value = "ENPH" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of English and Philosophy"
End If
If cell.Value = "ELSC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Educational Studies, Leadership and Counseling"
End If
If cell.Value = "GSC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Geosciences"
End If
If cell.Value = "HFA" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Liberal Arts"
End If
If cell.Value = "HIS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of History"
End If
If cell.Value = "INDC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Institute of Engineering"
End If
If cell.Value = "IOE" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Institute of Engineering"
End If
If cell.Value = "JMC" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Journalism and Mass Communications"
End If
If cell.Value = "MAT" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Mathematics and Statistics"
End If
If cell.Value = "MLA" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Modern Languages"
End If
If cell.Value = "MMB" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Management, Marketing and Business Administration"
End If
If cell.Value = "MSP" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Military Science Program"
End If
If cell.Value = "MUS" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Music"
End If
If cell.Value = "NUR" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Nursing"
End If
If cell.Value = "OSH" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Occupational Safety and Health"
End If
If cell.Value = "POL" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Political Science and Sociology"
End If
If cell.Value = "PSY" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Psychology"
End If
If cell.Value = "THR" Then
cell.Activate
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = "Department of Theatre"
End If
Next
range("I:I").HorizontalAlignment = xlLeft
range("M:M").HorizontalAlignment = xlLeft
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)
每个条件每次都会执行,无论Cell.Value.
在循环中处理单元格和区域无疑是您在 Excel VBA 中可以做的最慢的事情,但是当您只需要检查一个条件时,对十几个条件执行此操作甚至更慢。
将其替换为If...Else If...Else If... ...End If,或使用Select Case块:
Select Case cell.Value
Case "ABC"
'handle 'ABC'
Case "DEF"
'handle 'DEF'
'...
Case "XYZ"
'handle 'XYZ'
Case Else
'handle default
End Select
Run Code Online (Sandbox Code Playgroud)
但这仍然使得“XYZ”只有在评估完所有其他案例后才能评估。
更好的选择可能是设置一个Dictionary. 参考Microsoft 脚本运行时库。
Static map As Scripting.Dictionary
If map Is Nothing Then
Set map = New Scripting.Dictionary
With map
.Add "ACC", "Department of Accounting"
.Add "ACS", "Department of Adolescent, Career and Special Education"
'...add every possible ABC -> Description map
End With
End If
cell.Activate
ActiveCell.Offset(0, 1).Activate
If map.Exists(cell.Value) Then ActiveCell.Value = map(cell.Value)
Run Code Online (Sandbox Code Playgroud)
该Static字典仅在该过程第一次运行时才会被填充。然后,ActiveCell.Value只需通过闪电般快速的字典查找即可获取。
现在,这可能仍然会非常缓慢。您不需要 2 个循环:迭代行(仅迭代您知道需要检查的行),然后在一次传递中执行Hand 。L这就是将执行时间减半。.Activate也要避免;ActiveCell你根本不需要工作。
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |