使用VBA基于一个单元格中的值对多列中的值执行函数

时间:2013-06-13 14:43:34

标签: excel-vba excel-2007 vba excel

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

1 个答案:

答案 0 :(得分:0)

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

Range("E10,I610").Value

对于初学者来说,Range("E10,I610")是一系列仅两个单元格,您猜对了:E10I10。使用冒号创建连续范围对象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

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

将来,最好发布所有或尽可能多的代码,包括变量声明等,这样我们就不必问诸如“什么类型的变量是schedType?“