• ベストアンサー

エクセルのマクロでゴールシークの繰り返し

こんにちは。マクロ初心者です。 現在、エクセルのゴールシーク機能を繰り返し使うためにマクロを作っています。 下のプログラムでアクティブセルのゴールシークは行えるようになったのですが、これをアクティブセルが空白になるまで繰り返すことはできますか? できればiを使わないようにしたいのですが‥ ActiveCell.goalseek Goal:=ActiveCell.Offset(0, -1).Value, ChangingCell:=ActiveCell.Offset(0, -3).Range( _ "A1") ちなみに違う人が使っていた Do Until ActiveCell.Previous.Value = "" を使おうと思ったらパソコンが動かなくなってしまいました‥ 基本ができていない為にめちゃくちゃなことをしているのかもしれませんが、どうかアドバイスをお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.5

シートの構成、 コードの貼り付けの具体的な手順もなしに 原因などわかりません。 エラーの部分は無視します。 ActiveCellは単一のセルを返しますので、 【E2だけを選択】して下方向に連続処理するなら、 下のコード。その部分に対しては答えておきます。 (ま、これも現在のそちらの状況では 動きませんが。) Dim myRng As Range, r As Range With ActiveCell  Set myRng = Range(.Cells(1), .End(xlDown)) End With For Each r In myRng  With r   .GoalSeek _    Goal:=.Offset(0, -1).Value, _    ChangingCell:=.Offset(0, -3)  End With Next

rikta
質問者

お礼

説明が不十分で申し訳ありませんでした。 エラーの部分は時間ができたらもう一度自分で考えてみようと思います。 今回はなんとかDo Until文で解決できました。 お手数をおかけしてすみませんでした。 何度もご回答いただきありがとうございました。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

ANo.2です。 >Debug.Print r.Value >の文がうまくコンパイルされません。 提示したコードは参考程度のもので、直接の回答ではありません。 Debug.Print r.Value はイミディエイトウィンドウに結果を表示して確認するだけですので、コンパイルエラー? って言うのも・・・?

rikta
質問者

お礼

そうですか‥ 何も知らないでそのままやろうとしたのでめちゃくちゃになってしまったみたいですね。 お手数おかけしてすみませんでした。 Do Until文で何とか動かすことができましたので、もう大丈夫です。 ありがとうございました!

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.3

No.1です。追加します。 下の表のE2:E5を選択しておいて、 その範囲だけゴールシークを 適用するなら、ActiveCellではなく Selectionを使ってください。 __A_____B__C____D_____E_ 1_____変化___目標値___数式_ 2_x1_1.618343_y1____1_1.000692_ 3_x2_2.000009_y2____2_2.000027_ 4_x3_2.302777_y3____3_3.000003_ 5_x4_2.561646_y4____4_4.000383_ Dim r As Range For Each r In Selection With r .GoalSeek _ Goal:=.Offset(0, -1).Value, _ ChangingCell:=.Offset(0, -3) End With Next

rikta
質問者

補足

大変失礼致しました。 誤ってn-junさんのところへ補足を書いてしまいました‥ このようなおっちょこちょいなので初歩的なミスをしているのでしょうが、何かご意見があれば宜しくお願い致します。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

例えばセルA1からA列の最終行までの値を出したいのであれば、 Sub try() Dim r As Range For Each r In Range("A1", Cells(Rows.Count, 1).End(xlUp)) Debug.Print r.Value Next End Sub こんな感じでも出来ますけど。 (アクティブなセルでなければいけないのなら、ちょっと違うかな。)

rikta
質問者

お礼

失礼致しました。 n_na_ttoさんへのお礼と場所が入れ違ってしまいました‥ ご回答ありがとうございます。 n-junさんにお答えいただいたことも、私のやりたいことと合ってはいると思うのですが、こちらもエラーが出てきてしまいました。 Debug.Print r.Value の文がうまくコンパイルされません。 よろしければ、ご意見いただけますでしょうか。

rikta
質問者

補足

詳しくお答えいただき、ありがとうございます。 そして質問の仕方がわかりにくくてすみません。 n_na_ttoさんのデータ例で言えば、E2をアクティブセルにして Eが空白になるまで繰り返したいということだったのですが‥ なので、No.1でお答えいただいたことで私のやりたいことには 合っているのですが、どちらのNo.1、No.3どちらも「SubまたはFunctionが定義されていません」とエラーが出てきてしまいました。 お時間があれば、どこが間違っているのか教えていただけますか。

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.1

"アクティブセルが空白になる" の意味がつかめないのですが、 例えば下のようにE列に数式が入っているとして、 "E列を上から順に空白になるまで処理する" なら... __A_____B__C____D_____E_ 1_____変化___目標値___数式_ 2_x1_1.618343_y1____1_1.000692_ 3_x2_2.000009_y2____2_2.000027_ 4_x3_2.302777_y3____3_3.000003_ 5_x4_2.561646_y4____4_4.000383_ Dim myRng As Range, r As Range 'E列の数式が入っている範囲に限定 Set myRng = ActiveSheet.Range("E:E") _   .SpecialCells(xlCellTypeFormulas) For Each r In myRng '上の範囲だけループ  With r   .GoalSeek _    Goal:=.Offset(0, -1).Value, _    ChangingCell:=.Offset(0, -3)  End With Next

関連するQ&A

専門家に質問してみよう