アプリ版:「スタンプのみでお礼する」機能のリリースについて

Dim i As Long
Dim k As Long
For i = 1 To 829
For k = 1 To 995
Worksheets("2").Cells(k,i) = Worksheets("1").Cells(k,i) /Worksheets("1").Cells(996,i)
Next k
Next i

これを実行したらオーバーフローしてしまい、途中までしか計算できませんでした。
解決方法を教えて頂きたいです。よろしくお願いします。

A 回答 (3件)

以下のように変更してみてください。



Sub test()
  Dim i As Long
  Dim k As Long
  
  For i = 1 To 829  '←EXCEL2007 ならOK /EXCEL2007以外の場合は 256まで
    For k = 1 To 995
      If Val(Worksheets("1").Cells(k, i)) > 0 And _
        Val(Worksheets("1").Cells(996, i)) > 0 Then
        '0/0 の場合はオーバーフローになるので
'0以外の時のみ計算する
        Worksheets("2").Cells(k, i) = Worksheets("1").Cells(k, i) / Worksheets("1").Cells(996, i)
      End If
    Next
  Next
End Sub
    • good
    • 0
この回答へのお礼

EXCEL2007です。説明不足ですいませんでした。

Cells(996, i))はすべて正で、Cells(k, i)はゼロや、負のデータも含まれていましたので、
If Val(Worksheets("1").Cells(k, i)) <> 0
でオーバーフローせず、最後まで計算できました。ありがとうございました。

お礼日時:2008/09/18 12:52

いや、「なぜ」ってNo.1氏の例文コメントにあるとおり「0除算がオーバーフローになる」からなんですが……


#参考:これは.NETの話ですがOffice2007で0除算ではなくオーバーフローが出る理由はおそらく同じ
http://salv.miscnotes.com/2006/10/
    • good
    • 0

Cells(k,i)のkは行数、iは列番号数です。


>For k = 1 To 995
と書いているが
2007以前は列数は256列までしか指定できません。
しばらく2007と2003以前の両者並存期間で、質問にバージョンを書かないで質問するのは、配慮が足りない。まずこの点はどうですか。
ーー
2007だとしてオーバーフローすると言うのデータ状況はどういう風ですか。

この回答への補足

2007です。説明不測で申し訳ありません。
1のsheetに995行、829列のデータ(ゼロ、正、負いろいろ)がありまして、
996行には各列の総和の値(>0)があります。
その各列の総和でその列のデータを割り算し、2のシートに書こうとしています。
始めに回答してくださったpkh4989様を参考に
If Val(Worksheets("1").Cells(k, i)) <> 0
Worksheets("2").Cells(k, i) = Worksheets("1").Cells(k, i) / Worksheets("1").Cells(996, i)
End If
を入れるとオーバフローせずに最後まで計算できました。

しかし、なぜこれで可能になったかはよくわからなかったです。

補足日時:2008/09/18 13:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!