これは多くの理由で機能しません。そのうちの少なくとも 1 つが次のとおりです。
Range("E10,I610").Value
まず、は、ご想像のとおり、 との2 つのセルのみRange("E10,I610")
の範囲です。コロンを使用して、連続範囲オブジェクト を作成します。さらに、複数セル範囲のプロパティは常に、左上のセルの値のみを返します。E10
I10
Range("E10:I610")
.Value
したがって、 の値E10
は ではなかった> 11538
ので、最初のIf
ステートメントは を返しFalse
、そのブロック内の残りのコードは省略されます。
その後、コードが正しく構成されていないため、引き続き失敗します。
複数のセル/範囲を操作するにはいくつかの方法があります。あまり効率的ではない例を 1 つ挙げますが、目的には合っています。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
将来的には、「変数の型は何ですか?」などの質問をする必要がないように、変数の宣言などを含め、コードのすべてまたはできるだけ多くを投稿することが常に最善です。