質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

3885閲覧

VBAでのマクロの記録後の範囲指定に変数を組み込む方法

u_k_statistics

総合スコア44

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/01/12 14:42

VBAでマクロの記録で記録した回帰分析の範囲指定について

分析ツールを使って回帰分析する作業をマクロの記録で記録し、その後目的変数や説明変数の範囲指定のところを編集して事前に取得してある変数を組み込めるようにしたいのですがうまくいかず困っています。

collast = Cells(1, Columns.Count).End(xlToLeft).Column
rowlast = Cells(Rows.Count, 1).End(xlUp).Row
a = collast + 2
Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range("$BO$1" & ":" & "$BO$" & rowlast & "" _
), ActiveSheet.Range("$BG$1" & ":" & "$BM$" & rowlast & ""), True, True, , ActiveSheet.Range( _
"" & a & "1"), True, False, False, False, , False

以上のようにして、最終行と最終列を回帰分析の中に組み込んで説数や行数の違う複数のシートを連続して回帰分析しようとしたのですがうまくいきません。

どなたか解決策をご存知でしたらよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

うまくいかないの意味が、思った通りの数値が出ないのか、それともエラーになるのかによって対策が変わってきますので、もう少し詳しく書かれると良いと思いますが、それはさておきエラーになる場合の一般的な調査方法です。

掲載いただいたコードのままでは文字列の組み立てで失敗しているのかcolllastやrowlastが取れていないのか判別できないので、以下のように、条件指定部をR1~R3までの変数に格納し、その値が思ったとおりかどうか確認してみてください。

Debug.Printの使い方がよくわからない場合はMsgBoxへの出力でも構いません。
あるいはBreakPointを設定してデバッグモードで値を確認するなど。

lang

1Sub Sample() 2 Dim collast As Long: collast = Cells(1, Columns.Count).End(xlToLeft).Column 3 Dim rowlast As Long: rowlast = Cells(Rows.Count, 1).End(xlUp).Row 4 Dim a As Long: a = collast + 2 5 6 Dim R1 As String, R2 As String, R3 As String 7 R1 = "$BO$1" & ":" & "$BO$" & rowlast & "" 8 R2 = "$BG$1" & ":" & "$BM$" & rowlast & "" 9 R3 = "" & a & "1" 10 11 Debug.Print R1 12 Debug.Print R2 13 Debug.Print R3 14 15 Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range(R1), _ 16 ActiveSheet.Range(R2), True, True, , ActiveSheet.Range(R3), _ 17 True, False, False, False, , False 18End Sub

aとcollastが怪しいですね。
Columnは数値ですので、aはそれに2を足したもので、最後のR3は数値に文字列の1を足してます。
たとえば、BO列が最終ならcollastは67、それに2を足してaは69、69に文字列として1を足して、R3は"691"です。
Range("671")ってなるので、そこが原因じゃないかと。

ちなみに私の環境で類似のマクロを作ってみましたところ、問題なく表示されたようです。

【データ】(B3:C9)
平均気温 糖度
20 7.23
22 5.83
24 4.44
26 3.04
28 1.65
30 0.25

【コード】

lang

1Sub Macro2() 2 Dim R1 As String, R2 As String, R3 As String 3 R1 = "$C$3:$C$9" 4 R2 = "$B$3:$B$9" 5 R3 = "$E$13" 6 7 Debug.Print R1 8 Debug.Print R2 9 Debug.Print R3 10 11 Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range(R1), _ 12 ActiveSheet.Range(R2), True, True, , ActiveSheet.Range(R3) _ 13 , True, False, False, False, , False 14End Sub

投稿2016/01/12 20:35

編集2016/01/12 20:37
thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問