由于很多原因,这不起作用,其中最重要的是:
Range("E10,I610").Value
对于初学者来说,Range("E10,I610")
是一个只有两个单元格的范围,你猜对了:E10
和I10
. 使用冒号创建连续范围对象,Range("E10:I610")
. 此外,.Value
多单元格范围的属性将始终只返回顶部左侧单元格中的值。
因此,由于E10
was not的值> 11538
,第一条If
语句返回False
,并且该块中的其余代码被省略。
然后,它将继续失败,因为您没有正确构建代码。
有几种方法可以处理多个单元格/范围,我将给您举一个效率不高的示例,但它可以满足您的目的。我将使用一个For each
循环来遍历 中的每个单元格Range("E10:I610")
,然后对照 来检查这些值11538
,将大于 的值相加11538
。
Sub TotalCells()
Dim schedType as String
Dim rng as Range
Dim cl as Range
Dim myTotal as Double
Set rng = Range("E10:I610")
schedType = Range("J5").Value
'## Check what schedType we are working with:
If schedType = "Weekly" Then
For each cl in rng.Cells
If cl.Value > 11538 Then myTotal = myTotal + cl.Value
Next
'## Multiply the sum by 8.4%
myTotal = 0.084 * myTotal
'## Display the result:
MsgBox "The weekly total is: " & myTotal, vbInformation
ElseIf schedType = "Monthly" Then
' You can put another set of code here for Monthly calculation.
End If
## Print the total on the worksheet, cell H6
Range("H6").Value = myTotal
End Sub
正如我所说,这效率不高,但它说明了一个很好的起点。您也可以使用公式CountIfs
或SumIfs
使用工作表的AutoFilter
方法,然后对可见单元格等进行求和。
以后总是最好把你的代码全部或者尽可能多的贴出来,包括变量的声明等等,这样我们就不用问“什么类型的变量是schedType
什么?”之类的问题了。