• ベストアンサー
  • すぐに回答を!

excelのソルバーをVBAで複数行繰り返したい

目的セル  A1 変化させるセル  B1:E1 から始めて、A2,B2:E2、A3,B3:E3・・・ というように行を一列ずつずらして繰り返したいと思いプログラミングの知識とか全然ないんですが、あちこち調べて、 Sub Macro1() Dim x As Integer For x = 1 To 5 SolverOk SetCell:="Cells(x,1)", MaxMinVal:=3, ValueOf:="1", ByChange:="Range(Cells(x,2),Cells(x,5))" SolverSolve Userfinish:=True  Next x End Sub というところまで作ってみたんですが、実行してみると一行目は変わるもののそれ以降が変化しません。 理由がまったくわからないんですが、どなたかおかしなところがわかる方お教えくださいm(__)mm(__)m

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数7936
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.1
  • xls88
  • ベストアンサー率56% (669/1189)

ソルバーは使った事がありません。 提示されたコードを見ると、引数の設定が、"(ダブルクオーテーション)で挟まれています。 これでは単なる文字列ということになってしまいます。 セル番地を入れればよいのでしょうか? SolverOk SetCell:="Cells(x,1)", MaxMinVal:=3, ValueOf:="1", ByChange:="Range(Cells(x,2),Cells(x,5))" を SolverOk SetCell:=Cells(x, 1).Address, MaxMinVal:=3, ValueOf:="1", ByChange:=Range(Cells(x, 2),Cells(x, 5)).Address とするとどうなるでしょうか?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • VBAでソルバーを停止せずに動かすには

    こんにちは。 VBAで、ソルバーを含んだコードを書いていますが、実行の時にソルバーで計算している度にメッセージボックスが表示されて、OKを押す必要があります。メッセージが表示されない、またはOKが自動的に押されるようにするにはどうすればいいでしょうか。コードは、次のようになっています。 Range("E164").Value = "0.1" Range("E165").Value = "0" SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130",  ByChange:="$C$38" SolverSolve Range("AE7").Value = Range("J3").Value Range("E164").Value = "0.1" Range("E165").Value = "0.1" SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130", ByChange:="$C$38" SolverSolve Range("AE8").Value = Range("J3").Value Range("E164").Value = "0.1" Range("E165").Value = "0.2" Then SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130", ByChange:="$C$38" SolverSolve Range("AE9").Value = Range("J3").Value Range("E164").Value = "0.1" Range("E165").Value = "0.3" SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130", ByChange:="$C$38" SolverSolve Range("AE10").Value = Range("J3").Value ・・・ などの繰り返しになっています。 どうぞよろしくお願いいたします。

  • エクセルマクロ:ソルバーの反復計算を中止する

    マクロを使ってソルバーを用いた計算をしているのですが、反復回数が制限に達した時、自動的に中止して次の計算に進みたいのですが、どのように記述すればよろしいでしょうか。 現在は以下のような記述です。 SolverOk SetCell:="$F$33", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$27:$O$27" SolverSolve Userfinish:=True 宜しくお願いいたします。

  • VBA エクセル 2003作成→2007実行について

    コマンドボタンを押すとソルバーが実行されるものを2003で作成したのですが、2007で実行しようとすると、 コンパイルエラー プロジェクトまたはライブラリが見つかりません。 と表示されて実行できません。 ご教授お願いします。 Private Sub CommandButton5_Click() SolverOk SetCell:="$E$176", MaxMinVal:=2, ValueOf:="0", ByChange:= _ "$D$173:$I$173,$H$167,$F$129:$J$129,$G$130:$J$130,$H$131:$J$131,$I$132:$J$132,$J$133" SolverSolve End Sub

その他の回答 (1)

  • 回答No.2
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんばんは。 ソルバーのマクロは、もともと旧マクロですから、それをVBAで行うには、ちょっとしたコツが必要なはずですが、単に、クォーテーションの囲んだ部分を、Address に変えてそれで出来るようになれば、こちらからのアドバイスは必要ありません。単に、記録マクロだけではうまくいかないような気がしますが、ご質問では、数式などの情報がありませんので分かりません。 >変化させるセル  B1:E1 仮に出来ても、そのまま変化されていったら、5回やっても、同じ結果が出るのではないかと思います。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • マクロでソルバーを使えますか?

    VBAは未経験です。エクセルでソルバーをマクロで記録し、実行しようとしたらエラーメッセージが出てしまいました(コンパイルエラーsubまたは functionが定義されていません)。 マクロにソルバーを組み込むこと自体ができないのでしょうか? 宜しくお願いします。 Range("E4:M4").Select Selection.Copy Range("E11").Select ActiveSheet.Paste Range("E4:M4").Select Selection.Copy Range("E12").Select ActiveSheet.Paste SolverOk SetCell:="$E$7", MaxMinVal:=3, ValueOf:="20", ByChange:="$D$5:$K$5" SolverSolve Range("E4").Select End Sub

  • 【Excel】マクロにソルバーを組み込んだ時の対処方法

    下記のようにマクロを組みましたが、ソルバーが解を見つけた時にいちいちOKをクリックしないと貼り付けに進みません。以下の作業を何回も繰り返すのですが、すべて自動的に行くにはどのように修正すればよろしいでしょうか? 宜しくお願いいたします。 Sheets("optimise").Select ActiveWindow.ScrollRow = 1 Range("B7").Select Selection.Copy Range("E7").Select ActiveSheet.paste SolverOk SetCell:="$E$35", MaxMinVal:=1, ValueOf:="0", ByChange:="$E$29:$R$29" SolverSolve Range("E29:R29").Select Selection.Copy Sheets("Table").Select Range("G7").Select ActiveSheet.paste Application.CutCopyMode = False Sheets("optimise").Select Range("B8").Select Selection.Copy Range("E7").Select ActiveSheet.paste SolverOk SetCell:="$E$35", MaxMinVal:=1, ValueOf:="0", ByChange:="$E$29:$R$29" SolverSolve Range("E29:R29").Select Selection.Copy Sheets("Table").Select Range("G8").Select ActiveSheet.paste

  • EXCELマクロを実行したときのコンパイルエラー

    EXCELでSolverをマクロで実行出来るようにしたいのですが、 マクロの記録のボタンをクリック→ツールでソルバーを選択→目的セル、目標値、変化させるセルを選択→実行→OK→記録終了で、マクロを作成し、 マクロを開いて実行をすると、コンパイルエラーが表示され、「subまたはFunctionが定義されていません」と表示されて止まってしまいます。ちなみに、EXCEL2003でも2007でも同じ状況です(ToT)。 マクロのソースは下記のようになっていて「SolverOk」のところがblueに反転してとまっています。 どなたか対処方法をご存知でしたら教えて頂けないでしょうか?よろしくお願いいたします(m_m) Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2011/9/13 ユーザー名 ' ' SolverOk SetCell:="$E$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$E$7" SolverSolve End Sub

  • VBAでの、マクロ参照をするソルバー

    ソルバー中の変数が、マクロを実行した値の場合はどのようにすればいいのでしょうか? たとえば操作するセルを変えても、あるマクロを実行しないと目的のセルが変わらない場合です。 solversolveのshowrefを利用して以下のように書きましたが、最適化はされたと表示されますがマクロを実行してくれませんでした。 Sub Macro() SolverReset SolverOk SetCell:="$C$17", MaxMinVal:=1, ValueOf:="0",   ByChange:="$B$17:$B$18" SolverOptions MaxTime:=900, Iterations:=900, Precision:=0.01, AssumeLinear:= _ False, StepThru:=True, Estimates:=1, Derivatives:=1, SearchOption:=1, _ IntTolerance:=10, Scaling:=False, Convergence:=0.1, SolverSolve UserFinish:=False, ShowRef:="macro1"

  • エクセル ソルバー セル参照をVBAで

    エクセル ソルバーのセル参照を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つ参照するよう」など,場合に応じてマクロを指示するためですが,ためしに試みた時点で上記内容でつまずいてしまいました. よろしくご教示お願いします.

  • エクセルのマクロでのソルバーの使い方に関して教えてください。

    エクセルのマクロでのソルバーの使い方に関して教えてください。 下記のようなソルバーを含むマクロを組んでいます。(一部です。) SolverReset SolverOk SetCell:="$B$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$M$46" a = SolverSolve(True) If a = 0 Then SolverFinish KeepFinal:=1 Else SolverFinish KeepFinal:=0 End If ソルバーを起動させ、"B10"が0になるように計算させ、 ソルバーの返り値をaに入れます。このとき、a=0の場合は、つまり最適値を得た場合のみ, 解を保存したく、a=0の場合、SolverFinish KeepFinal:=1で、保存するようにしています。  しかし、実際は、a=0の場合でも解を保存してしまい、元の値に戻せていません。  最適値を得られなかった場合に、元の値に戻したい場合は、どのように記載すれば良いでしょうか?  よろしくお願いします。

  • SubまたはFunctionが定義されていません

    こんばんは。私はエクセル2007のVBA(マクロ)についてわからなくなってしまったので質問させてください。今回私はエクセルのマクロで記録をしたのですが、記録が終了した後再びそのマクロを実行しようとした際、「subまたはfunctionが定義されていません」とでてしまいました。 まずは作成したコードを、 Sub 記録a2() ' ' 記録a2 Macro ' ' SolverReset Cells(1, 3) = "推算値" Cells(1, 4) = "残差平方" Cells(12, 3) = "残差平方和" Cells(1, 5) = "y=a*b*x/(1+b*x)" Cells(2, 5) = "a" Cells(2, 6) = "b" Cells(3, 5) = "1" Cells(3, 6) = "1" Cells(2, 3) = "=R3C5*R3C6*RC[-2]/(1+R3C6*RC[-2])" Range("C2").Select Selection.AutoFill Destination:=Range("C2:C11"), Type:=xlFillDefault Range("C2:C11").Select Range("D2").Select ActiveCell.FormulaR1C1 = "=(RC[-2]-RC[-1])^2" Range("D2").Select Selection.AutoFill Destination:=Range("D2:D11"), Type:=xlFillDefault Range("D2:D11").Select Range("D12").Select ActiveCell.FormulaR1C1 = "=SUM(R[-10]C:R[-1]C)" Range("D13").Select SolverOk SetCell:="$D$12", MaxMinVal:=2, ValueOf:="0", ByChange:="$E$3:$F$3" SolverAdd CellRef:="$E$3:$F$3", Relation:=3, FormulaText:="0" SolverOk SetCell:="$D$12", MaxMinVal:=2, ValueOf:="0", ByChange:="$E$3:$F$3" SolverSolve End Sub 私はこのマクロの名前を「記録a2」と名前付けました。もちろん記録が終了した後にもそれを確認しました。しかし、このエラーは調べてみたところ、名前subやfunctionの名前のところが定義されていない、もともと存在しない時に出るということを知りました。 ちなみに、エクセル上のエラーかとも思ったので、一度エクセルを落として新しく立ち上げたエクセルにまた別の名前をつけて同様に作業したところ、同じ結果になりました。 それでは今回の場合はなにが原因なのでしょうか・・・わかる方どうぞよろしくお願いします。

  • マクロ教えてください(繰り返しの方法)

    マクロ、VBAは超初心者です。 Sheets("optimizer").Select Range("C7").Select Selection.Copy Range("E6").Select ActiveSheet.Paste SolverOk SetCell:="$F$34", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$28:$O$28" SolverSolve Userfinish:=True Range("F28:Q28").Select Selection.Copy Sheets("table").Select Range("D7").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("optimizer").Select Range("C8").Select Selection.Copy Range("E6").Select ActiveSheet.Paste SolverOk SetCell:="$F$34", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$28:$O$28" SolverSolve Userfinish:=True Range("F28:Q28").Select Selection.Copy Sheets("table").Select Range("D8").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False 上のように同じことを何回も繰り返すのですが、2行目の Range("C8").SelectがC9, C10, C11・・・・、また下から3行目の Range("D8").SelectがD9, D10, D11・・・と貼り付けていくところだけを変えていきたいのです。 今は長いプロシージャを書いているのですが、簡単でする方法があればご教授ください。 宜しくお願いいたします。

  • マクロの自動記録

    Excelのマクロ自動記録に関する質問です。 ソルバーを繰返し含む処理をマクロの自動記録で実行したいのですが、Excelのシート上で1つづつ手で実行すると問題なく処理出来ている手順を自動記録して実行すると“コンパイルエラー:SubまたはFunctionが定義されていません”とエラーが出ます。 下記の“SolverOk”の部分に問題があると表示されます。 Range("D19").Select ActiveCell.FormulaR1C1 = "180" Range("D19").Select Selection.Copy Range("J19").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("D24").Select Application.CutCopyMode = False Selection.Copy Range("J22").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False SolverOk SetCell:="$M$18", MaxMinVal:=3, ValueOf:="0", ByChange:="$D$19" SolverSolve   ---   --- どうすれば解決できるか教えて下さい。 よろしくお願いします。

  • エクセルVBAで複数セルをコピーの制御構文

    エクセルVBAで A8~I8のセルをコピーしてJ7~R7にコピーし、2行下に移り空白セルまで繰り返すという 処理をしたいと考えています Sub copy() Dim i As Integer i = 7 Do Until Cells(i, 1) = "" Cells(Cells(i,10),Cells(i,18).Value = Cells(Cells(i+1,1),Cells(i+1,9).Value i = i + 2 Loop End Sub と作ってみたところエラーで動きませんでした。 上記のプログラムはどこら辺がおかしいでしょうか? よろしくお願いします。