• ベストアンサー
  • 困ってます

エクセル:マクロ メッセージボックスを消す

  • 質問No.2630207
  • 閲覧数1994
  • ありがとう数5
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 89% (84/94)

エクセル作業中に発生するエラーメッセージ等、出てくるメッセージボックスをすべて包括的にキャンセル(C)あるいは中止(A)するマクロを記述することは可能でしょうか?宜しくお願いいたします。

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

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

ベストアンサー率 57% (3570/6233)

追加です。

こちらでは、Solver のマクロの数が増えたせいなのか、DummyMacro の挙動がヘンです。確か、設定によっては、意味のないマクロは、削除とかされてしまった気がします。

Sub DummyMacro()
Dim v as Variant
 v = Range("A1").Value
End Sub

こんなものにして、実質的な中身を入れてください。
お礼コメント
gucchi-you

お礼率 89% (84/94)

ありがとうございます。
しかし残念ながらご教示いただいたことを試してみましたが、状況は変わりませんでした。Wendy02さんの2003で動くものが私の2003でダメということは、やはり設定の問題かと思いますが私の能力では分析できません。
いろいろと親身にお教えいただき誠に感謝しております。解決はしませんでしたが、この質問に関して教えていただいた記述は大変勉強になりました。今後の参考になると思います。
投稿日時:2006/12/29 11:37

その他の回答 (全4件)

  • 回答No.4

ベストアンサー率 57% (3570/6233)

こんばんは。Wendy02です。

こちらでは再現できませんが、確かに、そのようなメッセージが出た覚えがあります。しばらくやっていれば、見つけられるとは思いますか゛まだ、分かりません。

気になる点があります。

マクロと手動で違う点というのは、Reset が入らないことです。

Sheets("optimizer").Select の後に、
SolverReset
が入っていないことですね。必ずしも、SolverReset が必要だとは思いませんが、しかし、一番大きな違いとすれば、そこになってしまいます。ですから、以下のようなコードにしなくてはなりません。

若干違う部分は、以下です。選択がありません。
D19:M19>-0.40
D19:M19<0.40

もうひとつは、MaxTime:=300, Iterations:=300 というのは、論理的にはおかしいです。
昔、一度、同じ機能の Iteration(回数) とマクロのスピードを計測したことがありますが、300秒=5分ですから、Iteration が300ということはありませんので、以下のように、3万にしてみました。マクロですと、100万とかありますが、ソルバーでは、少し多いような気がします。


Sub TestMacro2()
  Sheets("optimizer").Select 
  SolverReset
  SolverOk SetCell:="$N$19", MaxMinVal:=1, ValueOf:="0", ByChange:="$D$19:$M$19"
  ' MaxMinVal:=3 かもしれない
  SolverOptions MaxTime:=300, Iterations:=30000, StepThru:=False
  
  SolverAdd CellRef:="$D$19:$M$19", Relation:=3, FormulaText:="-0.4"
  SolverAdd CellRef:="$D$19:$M$19", Relation:=1, FormulaText:="0.4"
  SolverAdd CellRef:="SUMIF($D$19:$M$19,"""">0"""")", Relation:=2, FormulaText:="1"
  SolverAdd CellRef:="SUMIF($D$19:$M$19,""""<0"""")", Relation:=2, FormulaText:="-1"
  SolverAdd CellRef:="$N$19", Relation:=2, FormulaText:="MIN($N$21:$N$23)"
  SolverAdd CellRef:="$N$21", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$6:$M$6)"
  SolverAdd CellRef:="$N$22", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$7:$M$7)"
  SolverAdd CellRef:="$N$23", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$8:$M$8)"
  
  SolverSolve Userfinish:=True, ShowRef:="DummyMacro"
  SolverFinish 1
End Sub

Sub DummyMacro()

End Sub
  • 回答No.3

ベストアンサー率 57% (3570/6233)

こんにちは。Wendy02です。

>それともやはりおっしゃるような致命的なものでしょうか?
きちんとソルバー自身は手動で動くのですね?
それを確かめていただいていますか?時々、それがそうでなかったりします。

>キャンセルせずに当該ファイルを選択すると「"ファイル名.xls"に"DummyMacro"は見つかりません。

一応、そのマクロは、標準モジュールに入れてあると思いますが、ある設定で、このような反応があったような記憶がありますが、どこの設定でそうなったか覚えていません。

ここのカテゴリのどこかで書いたのですが、現行のソルバーは、数学的に近似値を求めるものは、公差を大きくして、最後は人間の手で行うしかありませんし、数学的に不可能なものは、いくらソルバーでも不可能なのはご存知だと思います。

今回、試しているものは、前回と同じです。
マクロの内容は変わりましたか?もし、違うようでしたら、マクロコードと、サンプルデータと求める条件を出していただけませんか?

それで、もう一度、新たに考えてみます。
補足コメント
gucchi-you

お礼率 89% (84/94)

度々のご回答ありがとうございます。

>きちんとソルバー自身は手動で動くのですね?

はい、動きます。

>現行のソルバーは、数学的に近似値を求めるものは、公差を大きくして、最後は人間の手で行うしかありませんうしかありませんし、数学的に不可能なものは、いくらソルバーでも不可能なのはご存知だと思います。

はい、存じております。膨大なバックテスティングを行っているのですが、それをある程度補完するために初期値を何回か入替えて計算し、出た結果を比較しています。それでも最適解とはならないケースがあることも承知した上でソルバーを使用しています。

>マクロの内容は変わりましたか?もし、違うようでしたら、マクロコードと、サンプルデータと求める条件を出していただけませんか?

ありがとうございます。余り変わっていませんが、簡略化して示します。
D6:M8にデータ数値(計30個)が入っています。正も負もあります。
求める結果はD19:M19です。N19の最小値を最大化するものです。
ソルバー部分だけ下に抜き出しますが、実際にはD6:M8の値を変えて何回も繰り返し計算します。また精度を上げるためにソルバーも繰り返しますし、初期値も入替えて数回計算しています。

制約条件
D19:M19>-0.40
D19:M19<0.40
SUMIF(D19:M19,">0")= 1
SUMIF(D19:M19,"<0")= -1

N19 =MIN(N21:N23)
N21 =SUMPRODUCT(D19:M19,D6:M6)
N22 =SUMPRODUCT(D19:M19,D7:M7)

N23 =SUMPRODUCT(D19:M19,D8:M8)

Sub Macrooptim()

Sheets("optimizer").Select
SolverOk SetCell:="$N$19", MaxMinVal:=1, ValueOf:="0", ByChange:="$D$19:$M$19"
SolverOptions MaxTime:=300, Iterations:=300, StepThru:=False
SolverSolve Userfinish:=True, ShowRef:="DummyMacro"

End Sub
Sub DummyMacro()

End Sub
投稿日時:2006/12/28 14:14
お礼コメント
gucchi-you

お礼率 89% (84/94)

説明が簡略化すぎましたので、思い直してもう少し詳しく書きますと、実際のデータの数は100個です(D6:M15、N21~N30)。N19: =MIN(N21:N30)
データは乱数に近いものですが(データですので乱数ではありません)、概ね+0.1から-0.1の間で0を山としてほぼ正規分布する性格の数字です。
投稿日時:2006/12/28 14:36
  • 回答No.2

ベストアンサー率 57% (3570/6233)

こんにちは。

>今まではエクセル2000でShowRef:="DummyMacro"という記述を以前この欄で教えていただき使用していたのですが

それは、私の書いた
http://oshiete1.goo.ne.jp/qa2388268.html
エクセルマクロ:ソルバーの反復計算を中止する

ですね。そのときのマクロは、Excel2003で、今も試してみましたが、特に変わりないですね。もともと、このマクロは、Ver.4 のマクロですから、もしも、Excel2003で不都合があれば、致命的なものです。

ただ、今回、動かないのは、参照設定されていないからではないでしょうか?Visual Basic Editor のツール-参照設定の
SOLVER のチェックを入れてください。
お礼コメント
gucchi-you

お礼率 89% (84/94)

Wendy02さん、その節は大変ありがとうございました。その他にも何回かご回答いただいており仕事の効率化に大変役立っています、重ねて御礼申し上げます。
ところで今回の件ですが、参照設定はなされております。2003で"DummyMacro"を記述した場合は、最大回数に達すると「値の更新」というファイル選択のポップアップがなされ、キャンセルを押すと次にマクロエラーとなります(ここでいちいちマニュアルで中止を選択しています)。キャンセルせずに当該ファイルを選択すると「"ファイル名.xls"に"DummyMacro"は見つかりません。2つの理由が考えられます。・指定された名前は定義されていません。・指定した名前はセル参照以外で定義されています。名前を確認し、もう一度実行してみてください。」というメッセージが出て、その後マクロエラーとなります。
何か解決方法はあるでしょうか?それともやはりおっしゃるような致命的なものでしょうか?宜しくお願いいたします。
投稿日時:2006/12/28 12:40
  • 回答No.1

ベストアンサー率 55% (658/1196)

全てかどうかはわかりませんが、マクロの中で
Application.DisplayAlerts = False
とするとエラーや警告のダイアログの表示を抑止できます。
元に戻すときは
Application.DisplayAlerts = True
です。
お礼コメント
gucchi-you

お礼率 89% (84/94)

ご回答ありがとうございました。残念ながら私が本当に消したいメッセージは頂いた記述では消せませんでした。消したかったのはソルバー計算の時、指定反復回数に達した際に出るメッセージ「試行状況の表示:最大の反復回数に達しました。このまま続けますか?」で、表示されないか、あるいは自動的に「中止」を選択する方法を探しています。今まではエクセル2000でShowRef:="DummyMacro"という記述を以前この欄で教えていただき使用していたのですが、エクセル2003にバージョンアップした途端に働かなくなってしまいました。何か別の対処方法があれば宜しくお願いいたします。
投稿日時:2006/12/28 11:23
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ