实例需求:工作表中按钮实现单元格A内容循环变化,备选内容为京东,唯品,阿里
,例如当前单元格内容为京东
,点击按钮则单元格内容变为唯品
,如果单元格内容为阿里
,点击按钮则单元格内容变为京东
。
这个需求并不难,实现逻辑也不复杂,常规思路就是多个If嵌套。
Sub Demo1()
With Range("A1")
If .Value = "阿里" Then
.Value = "京东"
ElseIf .Value = "京东" Then
.Value = "唯品"
ElseIf .Value = "唯品" Then
.Value = "阿里"
End If
End With
End Sub
代码解析:
根据A1单元格的当前值,将相应的值赋值给单元格,第3~4行代码实现了循环切换,即由阿里
变为京东
。
对于这种If嵌套代码可以使用Select Case预计实现,整体逻辑是相同的,代码会更加简洁一些。
Sub Demo2()
With Range("A1")
Select Case .Value
Case "阿里"
.Value = "京东"
Case "京东"
.Value = "唯品"
Case "唯品"
.Value = "阿里"
End Select
End With
End Sub
无论是If和Select Case,整体代码行数都比较多,并且如果备选内容比较多的话,需要写很多行代码,并且如果内容新增内容,例如增加百度
,就需求增加ElseIf或者Case语句,下面给出一个更简洁的实习方案,并且去扩展性更佳。
Sub Demo3()
Dim sKey As String
sKey = "京东 唯品 阿里 百度 京东"
[A1] = Split(sKey)(Int(InStr(1, sKey, [A1]) / 3) + 1)
End Sub
代码解析:
第3行代码构建一个字符串,注意此处首尾是相同的,同为京东
,这样才可以实现循环效果。
第4行代码中Split函数将sKey字符串拆分为一个数组,其下标下界为0。
Instr返回A1的内容在sKey中第一次出现的位置,例如A1单元格当前值分布为京东,唯品,阿里,百度
时,则相应的函数返回值为1,4,7,10
。
上述返回值除以3,然后使用Int函数取整之后加1,得到的结果为1,2,3,4
。
增加备选内容只需要在百度
之后插入就可以了。