-2

我有一张数据表,正在尝试检查 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%。它有点复杂,非常感谢任何帮助。

4

1 回答 1

0

由于很多原因,这不起作用,其中最重要的是:

Range("E10,I610").Value

对于初学者来说,Range("E10,I610")是一个只有两个单元格的范围,你猜对了:E10I10. 使用冒号创建连续范围对象,Range("E10:I610"). 此外,.Value多单元格范围的属性将始终只返回顶部左侧单元格中的值。

因此,由于E10was 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

正如我所说,这效率不高,但它说明了一个很好的起点。您也可以使用公式CountIfsSumIfs使用工作表的AutoFilter方法,然后对可见单元格等进行求和。

以后总是最好把你的代码全部或者尽可能多的贴出来,包括变量的声明等等,这样我们就不用问“什么类型的变量是schedType什么?”之类的问题了。

于 2013-06-13T16:24:34.230 回答