-2

データのシートがあり、列 E10 TO 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

これは多くの理由で機能しません。そのうちの少なくとも 1 つが次のとおりです。

Range("E10,I610").Value

まず、は、ご想像のとおり、 との2 つのセルのみRange("E10,I610")の範囲です。コロンを使用して、連続範囲オブジェクト を作成します。さらに、複数セル範囲のプロパティは常に、左上のセルの値のみを返します。E10I10Range("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将来的には、「変数の型は何ですか?」などの質問をする必要がないように、変数の宣言などを含め、コードのすべてまたはできるだけ多くを投稿することが常に最善です。

于 2013-06-13T16:24:34.230 に答える