我整天都在研究这段代码,并最终让一切都完美无缺。唯一的问题是代码确实运行得很慢。考虑到它将用于具有数千行的工作簿,我想改变它。我对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
答案 0 :(得分:4)
每一个条件都在执行,无论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
但这仍然使得" XYZ"只有在评估了每一个案例之后才进行评估。
更好的选择可能是设置Dictionary
。参考 Microsoft Scripting Runtime 库。
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)
Static
字典只会在程序第一次运行时填充。然后简单地使用闪电般的字典查找来获取ActiveCell.Value
。
现在,的仍然非常慢。您不需要2个循环:迭代行(只有您知道需要检查的那些),然后执行H
和{{1在一次传递中。这就是将执行时间减半。也避免使用L
;你根本不需要工作.Activate
。
答案 1 :(得分:1)
在这种情况下,我更喜欢数组,尽管Dictionary是个不错的选择。 示例代码就像这样....
class SocketListener extends React.Component {
state = {
messages: []
}
componentDidMount() {
socket.on('new-message', (data) => {
this.setState({ messages: this.state.messages.concat(data) })
});
}
render() {
return (
<Dashboard
messages={this.state.messages}
/>
)
}
}
答案 2 :(得分:0)
我建议使用switch-case语句而不是if语句。见这里:https://www.tutorialspoint.com/vba/vba_switch_statement.htm
您的代码存在的问题是,即使第一个语句适用,也会检查所有if语句。