2016-05-23 25 views
0

変数lastRowおよびlastRow2への入力と同じデータセット内の2つの範囲の式をvbaに作成しようとしています。しかし、式を作成して計算しようとすると、最後のセルの値を取得する代わりに、ゼロが得られます。以下の問題のコード:=(SUM(J11:J0)/ SUM(I11:I0))と=(SUM(U11:U0)/ SUM(T11:T0))Excel VBA-範囲のゼロ値を返す動的数式

Dim lastRow As Long 
Dim lastRow2 As Long 
    lastRow = Range("A" & Rows.Count).End(xlUp).Row 
    lastRow2 = Range("M" & Rows.Count).End(xlUp).Row 


... 



    'Calculate ATRT 2014 at cell B4 
    Range("B6").Formula = "=(SUM(J11:J" & lastRow & ")/ SUM(I11:I" & lastRow & "))" 
    Range("E6").Formula = "=(SUM(U11:U" & lastRow2 & ")/ SUM(T11:T" & lastRow2 & "))" 
    Range("H6").Formula = "=E6-B6" 

が、これは2つの式を取得し実行します。なぜ範囲の終わりはゼロですか?

+1

私はあなたの他の質問で尋ねたものです。範囲はすべて同じシートにありますか? – findwindow

+0

はい、範囲は同じ表の同じシートにあります。 1つのテーブル、しかし2つの異なる範囲 –

+0

希望のシートがアクティブな間にマクロを実行していますか?もしそうなら、私は困惑します。あなたが本当に列A/Mを意味していない限り...編集:ハァッ。列が空であっても、それは少なくとも1でなければなりません....もっとコードが必要です。 – findwindow

答えて

0

range()とrow()オブジェクトがどのワークシートにあるかを定義しておらず、VBAが推測していると推測している可能性があります。ワークシート・オブジェクトを追加し、そのワークシート上に使用するすべての範囲と行を定義してみてください。

Dim lastRow As Long 
Dim lastRow2 As Long 
Dim ws As Worksheet 

Set ws = ActiveSheet 
lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 
lastRow2 = ws.Range("M" & ws.Rows.Count).End(xlUp).Row 


'... 



'Calculate ATRT 2014 at cell B4 
ws.Range("B6").Formula = "=(SUM(J11:J" & lastRow & ")/ SUM(I11:I" & lastRow & "))" 
ws.Range("E6").Formula = "=(SUM(U11:U" & lastRow2 & ")/ SUM(T11:T" & lastRow2 & "))" 
ws.Range("H6").Formula = "=E6-B6" 
+0

それは私がそれが少なくとも1で終わるべきであることに気づく前に、私が思ったことです。他に何かが起こっています。 – findwindow

+1

ええ、私は0も変だと思った。しかし、私は実際にこのコードを実行したとき、正しく戻ってきました。実際にワークブックを持たずに何が起こっているのかを言うのは難しいです。質問者が試みることができる1つのオプションは、その範囲が親であると考えるものは 'debug.print Range(" M "&Rows.Count).End(xlUp).parent.name'であり、実際にそれらが考えるワークシートそのはず。 –

+0

ちょうどチェックされて、それは同じワークシートです。私は私の古いコード(上記の変更を加えない)と最初の公式(B6での出力)で動作するようにしましたが、2番目の公式(E6での出力)ではそうではなく、同じエラーがあります。 問題は、lastRow2にあるようです。自動入力しようとすると上向きになるためです。 –

関連する問題