今だけ人気マンガ100円レンタル特集♪

下記のようにマクロを組みましたが、ソルバーが解を見つけた時にいちいち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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ユーザーの入力を求めるダイヤログのことでしょうか?


DisplayAlert は、Application(Excelの意味)属性ですから、役には立たないと思います。
'SolverSolveの部分を

SolverSolve Userfinish:=True
としてみてください。

それから、

これは、まとめられると思います。
Sheets("optimise").Select
ActiveWindow.ScrollRow = 1
Range("B7").Select
Selection.Copy
Range("E7").Select
ActiveSheet.paste


Sheets("optimise").Activate '(Selectでも可能です)
Range("B7").Copy Range("E7")
暇があったら、試してみてください。
    • good
    • 4
この回答へのお礼

ありがとうございます、できました!現在サクサク動いています。大変助かりました。記述をまとめる方もこれからやってみます。

お礼日時:2005/03/28 13:33

検証していませんが



確認のメッセージが表示されるコードを
Application.DisplayAlerts = False

Application.DisplayAlerts = True
ではさんでみてはいかがでしょう
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。下記のようにやってみましたが、残念ながら結果は一緒でした。やり方が間違っているのでしょうか?宜しくお願いいたします。

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"
Application.DisplayAlerts = False
SolverSolve
Application.DisplayAlerts = True
Range("E29:R29").Select
Selection.Copy
Sheets("Table").Select
Range("G7").Select
ActiveSheet.paste
Application.CutCopyMode = False

お礼日時:2005/03/28 09:44

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

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

Aベストアンサー

ソルバーは使った事がありません。

提示されたコードを見ると、引数の設定が、"(ダブルクオーテーション)で挟まれています。
これでは単なる文字列ということになってしまいます。
セル番地を入れればよいのでしょうか?

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

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

Aベストアンサー

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

Range(cells(2,3),cells(4,3))

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

マクロを使ってソルバーを用いた計算をしているのですが、反復回数が制限に達した時、自動的に中止して次の計算に進みたいのですが、どのように記述すればよろしいでしょうか。
現在は以下のような記述です。

SolverOk SetCell:="$F$33", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$27:$O$27"
SolverSolve Userfinish:=True

宜しくお願いいたします。

Aベストアンサー

こんばんは。

ご質問は、Solver が、設定された反復回数が終わっても、目的の値に達しない場合、ダイアログを出さない方法はないか、と意味だと思います。

ご質問の状況は良く分かりませんが、以下のサンプルを作ってみました。

以下は、整数の場合は、絶対に、目的の解が出ません。したがって、途中で、中断することになります。
オプション(SolverOptions)の 反復回数(Iteration)は、以下では感知されません。Maxtime が優先されるようです。SolverSolve の ShowRef:="DummyMacro"を入れて、行います。また、SolverOptions の 引数 StepThru が False にします。このオプションは、省略してもよいです。ShowRef のマクロは、なぜか動いてはいません。しかし、実際にないマクロを指定すると、エラーを返します。

実務的には、
Application.ScreenUpdating = False
'実行プログラムコード
Application.ScreenUpdating = True
で、画面の切り替わりの部分のマクロを挟んだほうが、ちらつきがなく、マクロは速く終了すると思います。


'ワークシート上

 A  B  C
 2    =A1*B1
 2    =A2*B2
 2    =A3*B3
 2    =A4*B4
 2    =A5*B5
     =SUM(C1:C5)


'標準モジュール

Sub TestSolver()
  Range("B1:B5").ClearContents
  Range("E1:E6").ClearContents
  SolverReset
  SolverOk SetCell:="$C$6", MaxMinVal:=3, ValueOf:="89", ByChange:="$B$1:$B$5"
  SolverOptions MaxTime:=3, Iterations:=10, StepThru:=False
  SolverAdd "$B$1:$B$5", 4, FormulaText:="整数"
  SolverAdd "$B$1:$B$5", 3, FormulaText:="0"
  SolverSolve UserFinish:=True, ShowRef:="DummyMacro" '←ここに入れる
  SolverFinish 1
  
  Call CopySolveredRange '次のマクロ
  
End Sub
Sub DummyMacro()
 '実際は意味がない
End Sub
Sub CopySolveredRange()
  Range("E1:E6").Value = Range("C1:C6").Value
End Sub

(なお、こちらは、Excel 2003 のアドインのSolverですが、エラーのダイアログは、Excel Ver.4マクロです。次期 Ver.4マクロを追い出しにしたら、このアドインも当然、再開発することになるのかと思います。Excel2003では、調子が悪いという報告もあります。)

http://support.microsoft.com/kb/819033/ja
Excel 2003 でソルバー アドインが機能しないか、解を得られない

こんばんは。

ご質問は、Solver が、設定された反復回数が終わっても、目的の値に達しない場合、ダイアログを出さない方法はないか、と意味だと思います。

ご質問の状況は良く分かりませんが、以下のサンプルを作ってみました。

以下は、整数の場合は、絶対に、目的の解が出ません。したがって、途中で、中断することになります。
オプション(SolverOptions)の 反復回数(Iteration)は、以下では感知されません。Maxtime が優先されるようです。SolverSolve の ShowRef:="DummyMacro"を入れて、行いま...続きを読む

Qグリッドについて,エクセルのアドインについて

1)グリッド上で文字を直接入力したいのですが,どのようにすればよいのでしょうか。具体的には,エクセルのようにグリッド上をクリックしたら,そのグリッドがテキスト入力モードになるような方法を教えて頂きたいと思います。

2)MSFlexGridに描かれる垂直スクロールバーの,幅の値を得る方法を教えてください。(スクロールバーを表示させるとグリッドの右端が切れてしまうため)

3)エクセルのソルバーアドインを,VBから使用することはできますか? 複雑な回帰分析を行わせようと考えておりますので,できればエクセルのアドインをそのまま使えれば…,と考えております。

以上,よろしくお願いいたします。

Aベストアンサー

まず2つ質問です。
1.1番の質問はフレックスグリッドについての質問ですよね?
2.フレックスグリッドでなければいけないのですか?DataGridではダメなのですか?もしくは直接エクセルではダメなのですか?

わかる範囲で書きますね。
1番(仮にフレックスグリッドだと思って勝手に書きます)
基本的な標準機能では、存在しません。
マウス座標、表示上のLEFT/TOPのグリッド位置、グリッドの幅高さから計算して、テキストボックスを表示/非表示といった方法しか考えられませんが・・・

2番 現在スクロールバーが表示されてるか非表示されてるかは、Cols/RowsとWidthで自分で計算する方法しかわかりません・・・
幅/高さについては
Private Const SM_CXHSCROLL = 21&  '水平スクロールバーの矢印の幅
Private Const SM_CYHSCROLL = 3&   '水平スクロールバーの高さ
Private Const SM_CXHTHUMB = 10&   '水平スクロールバーのスクロールボックス(つまみ)の幅
Private Const SM_CXVSCROLL = 2&   '垂直スクロールバーの幅
Private Const SM_CYVSCROLL = 20&  '垂直スクロールバーの矢印の高さ
Private Const SM_CYVTHUMB = 9&   '垂直スクロールバーのスクロールボックス(つまみ)の高さ
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

  Debug.Print GetSystemMetrics(SM_CXVSCROLL)
で、何とかなるのかな?
参考URL参照

3番 アドインはエクセルのセル型を読み取って、エクセル内部による処理を行います。基本的には無理だと思います。機能を生かすだけなら、一度エクセルにデータを貼り付けて、解析をさせて、結果を読み取る必要があります。しかしエクセル任せになるので、ダイアログなどが表示されるかもしれません。(未検証)

参考URL:http://www.microsoft.com/JAPAN/developer/library/jpsetupf/_win32_getsystemmetrics.htm

まず2つ質問です。
1.1番の質問はフレックスグリッドについての質問ですよね?
2.フレックスグリッドでなければいけないのですか?DataGridではダメなのですか?もしくは直接エクセルではダメなのですか?

わかる範囲で書きますね。
1番(仮にフレックスグリッドだと思って勝手に書きます)
基本的な標準機能では、存在しません。
マウス座標、表示上のLEFT/TOPのグリッド位置、グリッドの幅高さから計算して、テキストボックスを表示/非表示といった方法しか考えられませんが・・・

2番 現在ス...続きを読む

Qエクセル 0や空白のセルをグラフに反映させない方法

以下の点でどなたかお教えください。

H18.1~H20.12までの毎月の売上高を表に記載し、その表を元にグラフを作成しています。グラフに反映させる表の範囲はH18.1~H20.12の全てです。
そのためまだ経過していない期間のセルが空白になり、そこがグラフに反映され見づらくなります。
データを入力する都度グラフの範囲を変更すればいいのですが、うまく算式や設定等で空白や0円となっているセルをグラフに反映させない方法はありますか?

お手数ですが、よろしくお願いいたします。

Aベストアンサー

売上高のセルは数式で求められているのですよね?
それなら
=IF(現在の数式=0,NA(),現在の数式)
としてみてください。
つまり、0の場合はN/Aエラーにしてしまうんです。N/Aエラーはグラフに反映されません。

Qエクセルでマクロを実行するとコンパイルエラー

エクセルでVBエディタでソースコードを記述し、マクロを実行すると、コンパイルエラー、「SubまたはFunctionが定義されていません」とエラーが出ます。これはどういうエラーですか?何が間違っているのですか?

Aベストアンサー

コードの行の中に
ステートメント、関数、などに見つからない行があるということ
abc
と書くとすると、VBAの予想するあらかじめ決まったステートメント、関数、メソッド、プロパティで存在しないので、
関数Functionプロジュアーか
SUBプロシージャー
を書いたものととりあえず解釈して
それを探すが、別の場所に存在しないのでエラー指摘になる。
Sub test01()
asd
End Sub
のようなのをやってご覧。同じエラーがでるよ。
何をasdに間違ったかは、その行の指摘があれば、作っているものは
すぐ気が付くよ。
上記でasdの位置に
RangeSelectを入れた場合は「SubまたはFunctionが定義されていません」だし
Range("A1")Selectは「構文エラー」だ。微妙なものだよ。
ほんとに何かの事情で関数かSubプロシジュアーが消えたか
名前が変えられたか(1字誤って抹消したり、加わったり)もあるかもしれない。

Qソルバー関係のエクセル関数の使用法

エクセルのアドインにソルバーがあります。エクセルの関数にはヘルプが付いてて使い方がよくわかりますが、ソルバー関連のエクセル関数、たとえばSolverAdd、SolverChangeなどにはヘルプがないので使い方が分かりません。これらソルバー関連のエクセル関数の解説はどこかにあるのでしょうか。解説書の市販本があれば教えてください。

※OKWaveより補足:「富士通FMV」についての質問です。

Aベストアンサー

下記などご参考に。

SolverAdd 関数
http://msdn.microsoft.com/ja-jp/library/office/ff838657(v=office.15).aspx

QExcelのsolver実行の手間を省きたい

Excel2000上でソルバーを使って関数のパラメータの最適値を求める作業をできるだけ自動的にできないでしょうか。

例えば、関数が一つだとしても、それを当てはめるべきデータのリストが100個あれば、ソルバーを手作業で100回実行しなければなりません。特に同じワークシートのなかで全ての作業を済ませようとすると、1回ごとに「目的セル」や「変化させるセル」を指定しなければなりません。当てはめを行うワークシートを独立に用意すればソルバーの実行自体は簡単になるかもしれませんが、そこにデータリストをコピーし結果をどこかに保存する手間がかかります。さらに、エクセルのマクロではソルバーは使えないと聞いております。なんとかならないものでしょうか。(OS:WindowsME)

Aベストアンサー

ソルバーはマクロでも使用できますよ。
ソルバーを使用する前に、マクロの記録を行うと、
コードが見れますよね。
コードにできるということは、マクロにすることも
可能ということです。
最初は面倒かもしれませんけど。

ただ、条件を毎回変更するという場合だと、その条件を
一度は入力する必要があり、あまりループにできないので、
使用方法が限られるというだけですね。
制限の値の変更くらいでしたら、結構つかえると思います。
ソルバーを使用し、条件値のセルの値を変更し、
ソルバーを使用といったループを組むことができるますから。

Qエクセル STDEVとSTDEVPの違い

エクセルの統計関数で標準偏差を求める時、STDEVとSTDEVPがあります。両者の違いが良くわかりません。
宜しかったら、恐縮ですが、以下の具体例で、『噛み砕いて』教えて下さい。
(例)
セルA1~A13に1~13の数字を入力、平均値=7、STDEVでは3.89444、STDEVPでは3.741657となります。
また、平均値7と各数字の差を取り、それを2乗し、総和を取る(182)、これをデータの個数13で割る(14)、この平方根を取ると3.741657となります。
では、STDEVとSTDEVPの違いは何なのでしょうか?統計のことは疎く、お手数ですが、サルにもわかるようご教授頂きたく、お願い致します。

Aベストアンサー

データが母集団そのものからとったか、標本データかで違います。また母集団そのものだったとしても(例えばクラス全員というような)、その背景にさらならる母集団(例えば学年全体)を想定して比較するような時もありますので、その場合は標本となります。
で標本データの時はSTDEVを使って、母集団の時はSTDEVPをつかうことになります。
公式の違いは分母がn-1(STDEV)かn(STDEVP)かの違いしかありません。まぁ感覚的に理解するなら、分母がn-1になるということはそれだけ結果が大きくなるわけで、つまりそれだけのりしろを多くもって推測に当たるというようなことになります。
AとBの違いがあるかないかという推測をする時、通常は標本同士の検証になるわけですので、偏差を余裕をもってわざとちょっと大きめに見るということで、それだけ確証の度合いを上げるというわけです。

Qマクロの自動記録

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

Excelのマクロ自動記録に関する質問です。
ソルバーを繰返し含む処理をマクロの自動記録で実行したいのですが、Excelのシート上で1つづつ手で実行すると問題なく処理出来ている手順を自動記録して実行すると“コンパイルエラー:SubまたはFunctionが定義されていません”とエラーが出ます。
下記の“SolverOk”の部分に問題があると表示されます。

Range("D19").Select
ActiveCell.FormulaR1C1 = "180"
Range("D19").Select
Selection.Copy
Range("J19").Select
Selection.PasteSp...続きを読む

Aベストアンサー

「SolverOk 関数」をヘルプで調べてください。
詳しく書いていますよ。

あと、Solver.xls でなくて Solver.xla ですよ。

ヘルプの内容:
この関数を使う前に、ソルバー アドインへの参照を設定しておいてください。Visual Basic モジュールをアクティブにした状態で、[ツール] メニューの [参照設定] をクリックし、[参照可能なライブラリ ファイル] の [Solver.xla] チェック ボックスをオンにします。このチェック ボックスが [参照可能なライブラリ ファイル] に表示されない場合は、[参照] をクリックしてから、Office をセットアップしたフォルダの \Office\Library にある Solver.xla を開きます。


Officeをデフォルトでインストールしたとは、下記を指定します。(Offce2000)

C:\Program Files\Microsoft Office\Office\Library\Solver.xla


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング