VBAについて調べても原因がわからなかったため質問です。
エクセルで統計処理をする先人が書いたコードが動かないため、デバッグしています。
OSはWindowsXP、エクセルは2007です。
先人が作成していた環境はわかりませんが、5年前に書いたようです。
この時点であきらめろよという話ですが、そうもいかない状況なので一つお付き合いください。
下記の関数の挙動がおかしいです。
Sub 標本入力()
・・・・省略・・・
If ActiveSheet.Name = "連鎖独立グラフ" Then
連鎖独立シート初期化 3
Else
・・・・省略・・・
Range("C301").Select
Selection.PasteSpecial Paste:=xlValues
独立シート初期化 3
End If
Application.CutCopyMode = False
Cells(11, 3).Select
End
Sub 独立シート初期化(n) 'nは相関行列の変数の個数
ActiveWorkbook.Names.Add Name:="母相関", RefersTo:=Range(Cells(51, 4), Cells(50 + n, 3 + n))
ActiveWorkbook.Names.Add Name:="偏相関", RefersTo:=Range(Cells(101, 4), Cells(100 + n, 3 + n))
ActiveWorkbook.Names.Add Name:="相関残差", RefersTo:=Range(Cells(151, 4), Cells(150 + n, 3 + n)
・・・・省略・・・
Range("母相関").FormulaArray = "=標本相関-相関残差-TRANSPOSE(相関残差)"
Range("偏相関").FormulaArray = "=-逆行列/SQRT(対角*TRANSPOSE(対角))" '★この行を処理していない!!
Range("逆行列").FormulaArray = "=MINVERSE(母相関)"
・・・・省略・・・
End
★のついたコメントの前の行にさしかかると、それ以降の処理が無視されて標本入力()の処理に戻り、Ifを抜けて「Application.CutCopyMode = False」以降の処理にかかってしまいます。
デバッグしたところ、どうもFormulaArrayがあると処理を無視してしまうようです。しかしエラーは出てこないので、どう改善していいかがわかりません…他の関数で利用されているFormulaArrayはどうも正常に動いているようなのです。
参照設定はデフォルトの状態からSOLVERのみ追加しており、シートの保護はかけていません。
ど素人なので、不明な情報がありましたら追記致します。どうか、御教示頂けると幸いです。
No.1ベストアンサー
- 回答日時:
>どう改善していいかがわかりません
再現性が取れないので、質問内容では、正確な原因は分かりません。
あくまでも想像の範囲は越えません。
まず、「逆行列」の名前の定義のコードは、たぶん、省略してしまったのでしょうね。
ご質問上のコードでは、唐突に出てきているように見えます。
いずれにしても、逆行列のマトリックス(=計算表)がシート上に置いてあるのでしょうから、私は、そのコードの再現性を試すことは出来ませんが、ExcelのMinversの逆行列は、サイズが非常に小さかったと思います。その逆行列の計算は、手動で値が出るのでしょうか?(数式のセルにカーソルを乗せ、F2で開けて、再度、Shift+Ctrl - Enterで、配列確定をすれば出るはずです)
一度、手動で試してみたほうがよいです。
正直なところ、Excelの関数を使ってでは、大したことは出来ないはずです。コードとして、FormulaArray は問題ありません。
それと、私の悪い想像だけであってほしいのですが、サブ・プロシージャ上で、ActiveWorkbook.Names.Add という使い方をしていますが、VBAでは、Namesのプロパティが二重の登録になりかねません。本来は、二重登録などありえないことです。なぜ、トラブルが起こるのか正確な理由は分かりません。
私の推測では、Namesの親オブジェクトが、シート、ブック、アプリと何種類もあるということが問題点です。コードとしては、論理的には正しいのですが、実務的には、そのVBAのコードは、トラブルが出やすいのではないかと思います。できれば、名前の定義登録のように、ひとつのブックで1回限りのようなメソッドは、手動でやったほうがよいのです。
もし、範囲指定が、その都度変わるなら、名前の定義登録だけのマクロを置いたほうがよいです。
そうでなかったら、単に、Rangeプロパティに、パラメータとして範囲を入れてあげたほうが、簡単だと思います。
コンピュータ用語が多いので、文章が分かりにくかったらすみません。
情報少ないのにご回答頂いてありがとうございます。あまりに長いコードでして、省略せざるを得えませんでした。ご指摘頂いたところをもう少し考えてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クロススペクトルと相互相関関...
-
質的データと量的データの相関...
-
重回帰分析で得られた予測式の...
-
SQLの副問い合わせと相関副問い...
-
相関係数Rの2乗について
-
相関の表現について(高い、強い?)
-
相関のある正規乱数
-
変数AとBは相関あり、BとCも相...
-
相関係数の高い項目が多いのは...
-
散布図の近似曲線の傾きがマイ...
-
信号長が2の累乗以外のFFTがや...
-
判別分析について
-
二つのデータの波形が似てるか...
-
決定係数がマイナスになる例っ...
-
切片あり回帰と切片なし回帰
-
サンプル数の違うものの比較
-
Excel分析ツールでのポアソン回...
-
ある1点で傾きが急激に変化する...
-
原点強制通過させたときの相関係数
-
numbersで重回帰分析をしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
相関係数Rの2乗について
-
相関の表現について(高い、強い?)
-
SQLの副問い合わせと相関副問い...
-
大学のレポート
-
ダミー変数での相関係数の算出...
-
質的データと量的データの相関...
-
【統計】「相関係数の有意性の...
-
3変数の相関
-
相関係数と有意差
-
変数AとBは相関あり、BとCも相...
-
相依相関の読みと意味を教えて...
-
統計問題
-
アンケート調査と重回帰分析に...
-
散布図の近似曲線の傾きがマイ...
-
相関を求める時の、はずれ値の...
-
影響の大きさを統計学的に計算...
-
信号長が2の累乗以外のFFTがや...
-
VBAのFormulaArrayについて
-
理系ー文系、保守ーリベラル、...
-
離散的なデータの相関
おすすめ情報