[[20200717151514]] 『0で除算しましたが表示されます』(隣の神様) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『0で除算しましたが表示されます』(隣の神様)

Sub sekibun()

Dim i As Integer, area As Double, tmp As Double, n As Integer

Cells(1, 1) = n
Cells(1, 2) = area

 If n < 0 Then
 MsgBox " エラー "
 If n = 0 Then
 MsgBox " エラー"

End If

Else

    dx = 10 / n
For i = 1 To n
    xi = dx * (i - 1)
    xj = dx * i
    fxi = 0.2 * xi * xi * xi - 0.15 * xi * xi - 0.005 * xi + 2
    fxj = 0.2 * xj * xj * xj - 0.15 * xj * xj - 0.005 * xj + 2
    tmp = dx * (fxi + fxj) / 2
    area = area + tmp

Cells(i + 1, 1) = dx * (fxi + fxj) / 2

Next i
End

End If

End Sub

エクセルのマクロでこのnに200や10などを入力しても
0で除算しましたのエラー11が表示されます。
どなたかこれをうまく動くような解決策を
教えて頂きたいです。よろしくお願いします。

< 使用 Excel:Office365、使用 OS:MacOSX >


 >Cells(1, 1) = n
 Cells(1, 2) = area

 左辺と右辺が逆じゃないですか?
(OK) 2020/07/17(金) 15:29

わぁめっちゃうまくいきます。
ありがとうございます。
それと計算された値を全て足す方法などを
ご存知でしたら教えて頂きたいです。
(隣の神様) 2020/07/17(金) 15:40

宣言されてない変数なありますが、変数の型はdouble
ですか?
(OK) 2020/07/17(金) 15:43

Nの宣言を忘れていますね
おそらくnはIntenger ですよね。
他の関数はおそらくこのままで大丈夫な気がします。
しかし、その点も不安ですので
ご教授よろしくお願いします。
(隣の神様) 2020/07/17(金) 15:49

足したいのはどの変数ですか?
(OK) 2020/07/17(金) 15:51

例えばn=200とした時の計算されたA1セル以外のA列の2~201までの値を
一つ一つ足し算したいです。
(隣の神様) 2020/07/17(金) 15:56

とりあえず
 If n > 0 Then
  (計算)
 Else
  MsgBox " エラー"
 End If

にしてください。
あと変数は宣言してください。
(苫) 2020/07/17(金) 16:02


これで 
一つ一つ足し算できますか?
(隣の神様) 2020/07/17(金) 17:12

 参考まで。

https://www.relief.jp/docs/excel-vba-worksheetfunction-sum-cell-range.html
(OK) 2020/07/17(金) 17:18


area 変数がその和ですから、
最後に
Cells(1, 2) = area
とすれば、B1セルに結果が表示できるんじゃないですか?
(γ ) 2020/07/17(金) 17:18

ん? 似たような質問が別のスレッドにあるんだな。どうなってんの?
上のコメントは無いほうが良かったのかな?

(γ ) 2020/07/17(金) 17:25


おそらくarea=area+tmpがうまく行ってないために
足算されていない気がします。
何かアドバイスなどがございましたらよろしくおねがいします
(隣の神様) 2020/07/17(金) 21:51

γさんの17:18の回答に書いてあるとおりです。
ちゃんと計算されてarea変数に納められています。
(はらぺこ) 2020/07/17(金) 22:02

もしかしたら
 Cells(1, 2) = area 

と一度書いておくとその後area変数の値が更新されたらセルの値も更新されるとお思いかもしれませんが
上記の一文を書いてあるタイミングでしか値は更新されませんので
もし随時area の値をB1セルに表示したいのであれば、

 area = area + tmp
 Cells(1, 2) = area

のように書いてください。
(はらぺこ) 2020/07/18(土) 08:01


 はらぺこさん、フォローありがとうございます。
 コメントご苦労さまです。

 今のでもareaは計算済みだと思いますよ。
 インデントが不正確なので構造がわかりにくいが、
 少し手を入れるとこんなことでしょう。

 Sub sekibun()
     Dim i As Long, area As Double, tmp As Double, n As Long
     Dim dx As Double, xi As Double, xj As Double

     n = 100                     '分割数
     Cells(1, 1) = n

     If n <= 0 Then
         MsgBox " エラー "
     Else
         dx = 10 / n             '積分区間は[0,10]
         For i = 1 To n
             xi = dx * (i - 1)
             xj = dx * i
             tmp = dx * (f(xi) + f(xj)) / 2
             area = area + tmp
             Cells(i + 1, 1) = tmp
         Next i
         Cells(1, 2) = area
     End If
 End Sub

 Function f(x As Double) As Double
     f = 0.2 * x ^ 3 - 0.15 * x ^ 2 - 0.005 * x + 2
 End Function
 いわゆる積分の台形公式ですね。
(γ  ) 2020/07/18(土) 09:10

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.