電子書籍の厳選無料作品が豊富!

エクセルのマクロで、
セル値[A1]が、範囲内(10から-10)に成るまで、
「ゴールシーク」を、10回だけ繰返す、
マクロ文を教えて下さい。 (変数セル[B1])

A 回答 (2件)

ゴールシークは計算された結果(式)から、代入値(目標値)になるように、逆算するです


式(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
    • good
    • 0
この回答へのお礼

回答、有難うございました。
早速、利用させて頂きました。
大変、助かりました。

お礼日時:2010/02/23 11:23

ゴールシークは計算式を逆算する処理なので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

この回答への補足

早々、回答有難うございます。
説明が、不十分で申し訳有りません。
セル[A1]には、式が、設定されています。
ゴールシークを実施後、計算結果の、セル値[A1]を確認し、
セル値[A1]が、10から-10の間なら、
計算を終了し、(10から-10)以外の場合に、
もう一度、ゴールシークを実行するようしたいのです。
但し、10回ゴールシークを実行しても、
セル値[A1]が、(10から-10)以外の場合でも、
終了となるように、処理をしたいと思っています。
宜しく、お願いします。

補足日時:2010/02/22 15:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!