質問: false」以降の処理にかかってしまいます。 デバッグしたところ、どうもformulaarrayがあると処理を無視してしまうようです。しかしエラーは出てこないので、どう改善していいかがわかりません...他の関数で利用されているformulaarrayはどうも正常に動いているようなのです。 参照設定はデフォルトの状態からsolverのみ追加しており、シートの保護はかけていません。 ど素人なので、不明な情報がありましたら追記致します。どうか、御教示頂けると幸いです。
回答: >どう改善していいかがわかりません 再現性が取れないので、質問内容では、正確な原因は分かりません。 あくまでも想像の範囲は越えません。 まず、「逆行列」の名前の定義のコードは、たぶん、省略してしまったのでしょうね。 ご質問上のコードでは、唐突に出てきているように見えます。 いずれにしても、逆行列のマトリックス(=計算表)がシート上に置いてあるのでしょうから、私は、そのコードの再現性を試すことは出来ませんが、excelのminversの逆行列は、サイズが非常に小さかったと思います。その逆行列の計算は、手動で値が出るのでしょうか?(数式のセルにカーソルを乗せ、f2で開けて、再度、shift+ctrl - enterで、配列確定をすれば出るはずです) 一度、手動で試してみたほうがよいです。 正直なところ、excelの関数を使ってでは、大したことは出来ないはずです。コードとして、formulaarray は問題ありません。 それと、私の悪い想像だけであってほしいのですが、サブ・プロシージャ上で、activeworkbook.names.add という使い方をしていますが、vbaでは、namesのプロパティが二重の登録になりかねません。本来は、二重登録などありえないことです。なぜ、トラブルが起こるのか正確な理由は分かりません。 私の推測では、namesの親オブジェクトが、シート、ブック、アプリと何種類もあるということが問題点です。コードとしては、論理的には正しいのですが、実務的には、そのvbaのコードは、トラブルが出やすいのではないかと思います。できれば、名前の定義登録のように、ひとつのブックで1回限りのようなメソッドは、手動でやったほうがよいのです。 もし、範囲指定が、その都度変わるなら、名前の定義登録だけのマクロを置いたほうがよいです。 そうでなかったら、単に、rangeプロパティに、パラメータとして範囲を入れてあげたほうが、簡単だと思います。 コンピュータ用語が多いので、文章が分かりにくかったらすみません。