我有一张数据并且我正在尝试检查E10到I610列以查看其中的值是否超过11538并且单元格J5中的值是"每周"。如果条件为真,则添加大于11538的值并将它们乘以8.4。我该怎么做呢?
vba不太强,所以请耐心等待。
If schedType = "Weekly" And Range("E10,I610").Value > 11538 Then
Range("H6").Value = "WOW"
ElseIf schedType = "Monthly" Then
Range("H6").Value = "10"
End If
我尝试了上述方法来实现我想要的。虽然上面的代码不会在之后进行精确的计算,但它只是一个测试。就像我说的那样,我试图搜索范围E10到I610的任何大于11538的值,然后总计它们,最后找到总数的8.4%。 它有点复杂,非常感谢任何帮助。
答案 0 :(得分:0)
由于很多原因,这不起作用,其中最重要的是:
Range("E10,I610").Value
对于初学者来说,Range("E10,I610")
是一系列仅两个单元格,您猜对了:E10
和I10
。使用冒号创建连续范围对象Range("E10:I610")
。此外,多单元格范围的.Value
属性将始终只返回左上方单元格中的值。
因此,由于E10
的值不是> 11538
,因此第一个If
语句返回False
,并且省略了该块中的其余代码。< / p>
然后,它将继续失败,因为您没有正确构造代码。
有多种方法可以处理多个单元格/范围,我会给你一个效率不高的例子,但它可以用于你的目的。我将使用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
?“