我还没有人发布过这个问题,如果我错了就不要开枪! :P
我有一个怪物,如果其他结构大约300-400行。使用外壳结构,我可以将其降低到100或更低。麻烦的是,您只能找到具有固定值而不是单元格值的选择案例。
代码的作用是什么?
C17-C22可以赋值1或0.如果值为1,则将文本复制到工作表中,如果值为0,则不会发生任何操作。
Select case ???
Case "C17" = 1
show me text!!
Case "C18" = 1
show me text!!
...
End select
我知道我可以用不同的选择案例来做这件事
Select case "C17".value
Case 1
show me text!!
End select
...
但我认为应该可以在一个BIG Select Case中进行,而不是多个Select Case。
非常感谢!
答案 0 :(得分:1)
Select语句用于区分变量可以有的不同值。即Select Case
是等式的左侧,以下case
个等式是等式的不同右侧。我认为你的任务不是Select case
如果每个单元格的情况相同,则遍历您的范围并对每个单元格执行选择。但是如果你只检查单元格是0还是1,那么使用if
类似的东西:
For each c in SourceRange
if c.value Then
...
end if
Next c
答案 1 :(得分:1)
听起来你试图将问题塞进Select Case
构造中,让自己的生活变得更加复杂。顺便说一下,Select Case
几乎与If Else
完全相同;区别主要是化妆品,你原则上可以use them interchangeably。
为什么不这样:
Dim i As Long
Dim varFlags As Variant
Dim varText As Variant
' Load flags from sheet.
varFlags = Range("C17:C22")
' Load text associated with each flag. Here I'll just hardcode them.
varText = Array("Text17", "Text18", "Text19", "Text20", "Text21", "Text22")
For i = LBound(varFlags, 1) To UBound(varFlags, 1)
If varFlags(i, 1) = 1 Then
'It's a 1. Copy the relevant text.
'Here I just MsgBox it.
MsgBox varText(i - 1) 'Sorry for the i-1, my varText array is zero-based!
Else
'It's not a 1. Do nothing.
End If
Next i