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

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

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

  • 回答数1
  • 閲覧数1621
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1

SolverをVBAから利用する場合アドイン登録する 必要があります。 以下は古いバージョンですが。 http://support.microsoft.com/kb/843304/ja 2003以上でも同じだと思います。

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

質問者からのお礼

親切なお答え、大変ありがとうございました(^^/)。 おかげ様で無事作動いたしました。 1週間の悩みが・・・・・吹き飛びました。 非常に助かりましたです!!

関連するQ&A

  • 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

  • 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"

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

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

  • 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 ・・・ などの繰り返しになっています。 どうぞよろしくお願いいたします。

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

    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のソルバーを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

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

    エクセルのマクロでのソルバーの使い方に関して教えてください。 下記のようなソルバーを含むマクロを組んでいます。(一部です。) 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の場合でも解を保存してしまい、元の値に戻せていません。  最適値を得られなかった場合に、元の値に戻したい場合は、どのように記載すれば良いでしょうか?  よろしくお願いします。

  • 【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のシート上で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   ---   --- どうすれば解決できるか教えて下さい。 よろしくお願いします。

  • 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の名前のところが定義されていない、もともと存在しない時に出るということを知りました。 ちなみに、エクセル上のエラーかとも思ったので、一度エクセルを落として新しく立ち上げたエクセルにまた別の名前をつけて同様に作業したところ、同じ結果になりました。 それでは今回の場合はなにが原因なのでしょうか・・・わかる方どうぞよろしくお願いします。

専門家に質問してみよう