ゴールシークは計算された結果(式)から、代入値(目標値)になるように、逆算するです
式(A1)の結果(10~-10)を求める為に逆算しB1の値を変更します。
ゴールシーク使わずループでB1に値を設定して、
A1の値を確認すれば良いかと
Sub Macro1()
Dim i As Integer
With ThisWorkbook.Sheets(1)
.Select
'10回繰り返す。
For i = 1 To 10
'C列にある変数をB1に設定
.Range("B1") = .Cells(i, 4)
'A1の値が範囲内ならループを抜ける
If .Range("A1") >= -10 And .Range("A1") <= 10 Then
Exit For
End If
Next
End With
End Sub
'B1の値を求める為なら・・・
Sub Macro3()
Dim i As Integer
With ThisWorkbook.Sheets(1)
.Select
'10回繰り返す。
For i = 1 To 10
'A1の計算式で目標値(D1~D10)にする為にB1の値を変更する。
.Range("A1").GoalSeek Goal:=.Cells(i, 4), ChangingCell:=.Range("B1")
'B1の値が範囲内ならループを抜ける
If .Range("B1") >= -10 And .Range("A1") <= 10 Then
Exit For
End If
Next
End With
End Sub
ゴールシークは計算式を逆算する処理なのでA1は値ではなく
計算式でなければなりません。
私にはやりたい事がさっぱり理解できていません。
(10回繰り替えしても10回目の値がB1に出力されているだけでは?)
なのでてきとーなマクロを作成しています。
B列に入力された値をA1で合計している。
D列に設定した目標値に対してB1をゴールシークを使って変更
E列にその結果を出力してます。
------------------------------
A1に計算式=SUM(B1:B10)
B1~B10には適当な値を入力しておく
D1~D10には目標値を入力しておく(-10~10)
E1~E10には結果
Sub Macro1()
Dim i As Integer
With ThisWorkbook.Sheets(1)
.Select
'10回繰り返す。
For i = 1 To 10
'A1の計算式で目標値(D1~D10)にする為にB1の値を変更する。
.Range("A1").GoalSeek Goal:=.Cells(i, 4), ChangingCell:=.Range("B1")
'結果をE1~10に
.Range("E" & i) = .Range("B1")
Next
End With
End Sub
お礼
回答、有難うございました。 早速、利用させて頂きました。 大変、助かりました。