-1

OK、いくつかの範囲で、次のような計算を行うワークシート「目標0」があります...

(A1で)

=SUM(G2:G68)*I17

次に、62-G68 の値のいずれかを追加/変更すると、セルが自動計算されます (主に負の数値と正の数値)。

目的は: 範囲の合計に従って、A1 の結果が 0 以上になる I17 の値を見つけます (0 から開始し、1 ずつインクリメントします。小数は必要ありません)。

目標に達するまで手動で変更 i17 を追加できます。どのように自動的に作成したいので、G2からG68の範囲の値が変更された場合、I17の値を再計算します(A1の計算が0以上の値になるまで)が、すでに0以上である場合何もしない。

私はそれをうまく説明することを願っています

編集:今、私はこのコードを作成しました...

Function IncreaseTheValue()
    If Range("A1") < 0 Then
        Range("I17").Value = 0

        Do While Range("A1").Value < 0
            Range("I17").Value = Range("I17").Value + 1
        Loop
    End If
End Function

そして完璧に動作しますが、私が変更しても起動しません。それ、どうやったら出来るの...

これをA2セルに追加しようとしましたが、うまくいきませんでした...

=IF(A1 < 0, IncreaseTheValue(), "")

よろしく

4

1 に答える 1

1

Functionこれを;として実際に行うべきではありません。お気づきのように不適切ですが、FunctionwhereSubまたはイベント ハンドラーの適切な使用も適切ではありません。

要件に基づいて、コードをWorksheet_Changeイベント ハンドラーに配置します。範囲内で変更が行われたときにのみ起動するように微調整する必要がありますG2:G68

これを試してください(テストされていません):

Private Sub Worksheet_Change(ByVal Target as Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("G2:G68")) Is Nothing Then
    If Range("A1") < 0 Then
        Range("I17").Value = 0
        Do While Range("A1").Value < 0
            Range("I17").Value = Range("I17").Value + 1
        Loop
    End If
End If
Application.EnableEvents = True
End Sub

pnuts コメントごとに更新。以下のこのメソッドは、セルが変更されるたびにマクロをトリガーします。これはやり過ぎかもしれません。または、G2:G68 が他のセルへの変更に基づいて変更される数式である場合に必要になるかもしれません。どちらの方法も、正確なニーズに合わせて微調整できます。

Private Sub Worksheet_Change(ByVal Target as Range)
Application.EnableEvents = False
    If Range("A1") < 0 Then
        Range("I17").Value = 0
        Do While Range("A1").Value < 0
            Range("I17").Value = Range("I17").Value + 1
        Loop
    End If
Application.EnableEvents = True
End Sub
于 2013-08-20T12:20:51.633 に答える