dポイントプレゼントキャンペーン実施中!

エクセル ソルバーのセル参照をVBAコードで変更しようとしていますが,複数のセル参照がうまくいきません.

まず,マクロの記録でセルc3の値を2にするようにC2とC4の値を変更するというコードを記録させました.

SolverOk SetCell:="$C$3", MaxMinVal:=2, ValueOf:="6",ByChange:="$C$2,$C$4"

次にセル参照をコードで操作するために"$C$3"の部分はcells(3,3)と置き換えてもうまく起動したのですが,"$C$2,$C$4"の部分は,cells(2,3),cells(4,3)と置き換えると,
コード内でエラーメッセージ「コンパイルエラー,修正候補,名前付き引数」とでます.この場合どう修正すればいいのでしょうか.

コードでセル参照を操作しようという動機は,例えば「アクティブセルから下のセルを順に3つ参照するよう」など,場合に応じてマクロを指示するためですが,ためしに試みた時点で上記内容でつまずいてしまいました.

よろしくご教示お願いします.

A 回答 (3件)

以下のように修正してみてください



Range(cells(2,3),cells(4,3))
    • good
    • 0
この回答へのお礼

ご回答,ありがとうございます.
作動確認し,うまくいきました.
ありがとうございました.

お礼日時:2007/04/24 23:28

こんにちは。

#2です。

別にユーザー任意でやっているものに、問題があるはずはありません。
ただ、シナリオにして保存しておくとか、選択値や数式自体をマクロでするなり方法はあるかと思うだけです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました.

お礼日時:2007/04/27 21:20

こんにちは。



>例えば「アクティブセルから下のセルを順に3つ参照するよう」

通常、ActiveCellに対して、Solver の引数を入れるような書き方はありえないと思います。それは、ByChange の引数は、それ自体がワークシート上の計算式で、引数になっているはずです。単独では成立しないと思います。

あえて、それは無視して回答します。

  Dim rng As Range
  Set rng = Range("C2,C4") '"$C$2,$C$4"
  ' Set rng = ActiveCell.Resize(4) 'アクティブセルから下に3つ
  rng.ClearContents
  Solverreset  'SOLVER.Reset_all 'Ex2003
  SolverOk SetCell:="$C$3", MaxMinVal:=2, ValueOf:="6", ByChange:=rng.Address
  SolverSolve
  
  Set rng = Nothing
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます.

ご指摘の点ですが,Activecellを使おうとしたのは,
目的変数,説明変数,制約式の計算式が1つの列にあり,この列を複数の列にコピーして,説明変数の初期値が違う計算をいくつも実行する場合,どの列の計算をするのかの参照にActivecellのセル番地を利用しようという意図です.

この場合の問題点があれば,お時間があればご指摘くだされば助かります.

お礼日時:2007/04/24 23:38

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