ちくのう症(蓄膿症)は「菌」が原因!?

VBAでソルバーを実行しようとしましたが、実行出来る時と実行出来ない時があります。実行出来ない時がほとんどです。

SOLVERの参照設定はしております。
原因が分からず困っております。宜しくお願い致します。

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

A 回答 (2件)

> SolverOk SetCell:="$B$2", MaxMinVal:=2, ByChange:="cells(a+7,6)"



んー。これは動かないでしょう?

SolverOk SetCell:="$B$2", MaxMinVal:=2, ByChange:=Cells(a+7,6).Aaddress

なら分かりますが。書き込みミスですか?

セルの RowIndex に変数がある点から見て、どうもループ処理がありそう
ですね。できれば省略しないで、コード全体を見せてもらえますか?

この回答への補足

SolverOk SetCell:="$B$2", MaxMinVal:=2, ByChange:=Cells(a+7,6).Address

に修正致しました。無事に動くようになりました。初めてVBAを使用した初心者で申し訳ありません。

貴重なお時間とお力大変有難うございました。お礼申し上げます。

補足日時:2006/10/25 19:35
    • good
    • 0

こんにちは。



> 実行出来る時と実行出来ない時があります。実行出来ない時がほとんどです。

全て同じ端末での話しですか? 違うなら SOLVER.XLA がインストールされて
ないとか?

この回答への補足

同じ端末です。

参照設定以外に何かsolverに関する設定をしなければならないのでしょうか?循環参照の設定など関わってくるのでしょうか?

下記のコードで実行しているのですが、何か問題はありますでしょうか?

Dim a As Integer
a = 20
SolverOk SetCell:="$B$2", MaxMinVal:=2, ByChange:="cells(a+7,6)"
SolverSolve

宜しくお願い致します。有難うございます。

補足日時:2006/10/25 12:16
    • good
    • 0

この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【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

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

Aベストアンサー

ユーザーの入力を求めるダイヤログのことでしょうか?
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")
暇があったら、試してみてください。

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エクセルのソルバー関数について!

エクセルのソルバー関数について!

実行を押しても、ソルバー関数の「変化させる変数」が全く動かない状態です。
何か理由があるのでしょうか?

詳しい方いらっしゃいましたら、ご教示くださいませ。
宜しく言お願い致します。

Aベストアンサー

数式や入力状態が分からない限りは、動かない理由は分かりません。

典型的なサンプルを示しておきます。

A1~A5  B列空欄  C列
1         =A1*B1
2
3
4
5

C6: =SUM(C1:C5) ...目的のセル $C$6

変化させるセル
$B$1:$B$5

制約条件
$B$1:$B$5 = 正数

値:50
-----
サンプルの結果(B列)
A  B  C
1 * 1 = 1
2 * 4 = 8
3 * 3 = 9
4 * 4 = 16
5 * 4 = 20

QVBからExcelコマンドの「ソルバー」を実行するには

教えて下さい。
VB上から、Excelのコマンドにあります「ソルバー」を使用したいのですが、どうやればいいでしょうか?
アドバイスをお願いします。

Aベストアンサー

過去すれ

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=165565

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エクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

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の違いがあるかないかという推測をする時、通常は標本同士の検証になるわけですので、偏差を余裕をもってわざとちょっと大きめに見るということで、それだけ確証の度合いを上げるというわけです。

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む


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

人気Q&Aランキング