Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
計算結果を3行に分割して表示する方法
投稿日時: 23/04/19 12:30:45
投稿者: minagawa

 If Cells(i, 4) > 160000 Then
                Cells(i, 5) = 80
                Cells(i+1, 5) = 80
                Cells(i+2, 5) =(cells(i,4))/1000-160
 
  計算結果が80を超える場合は次の行に残りの数字を繰り越させる必要があるため上記のコードを書きましたが
なぜか、2行目が80にならず自働的に対象の数字から80を引いた結果が表時されます。
 
例 cells(i,4)が200,000の時、cells(i,5)は80、cells(i+1,5)は120、cells(i+2,5)は40と表示されます。
うまく表示させる方法を御存知の方御教示願います。

回答
投稿日時: 23/04/19 13:43:17
投稿者: 半平太

>Cells(i+1, 5) = 80
 
としているので、80にしかならないでしょう。
※Changeイベントが発動したり、表示形式でそんな風に見える様にしていないなら、ですけども。
 
ステップモードで(F8キーを押しながら)、どんな展開になっているか確認してみてください。

回答
投稿日時: 23/04/19 13:57:06
投稿者: sk

引用:
計算結果が80を超える場合は次の行に残りの数字を繰り越させる必要がある

引用:
計算結果を3行に分割して表示する

・ここでの「計算結果」とは具体的にどのセルを対象とした
 どのような計算の結果を意味しているのか。
 
・「80を超える場合は次の行に残りの数字を繰り越させる」ことと
 「3行に分割して表示する」ことがどう繋がるのか。
 
例えば「計算結果」が 300 という整数であるとして、
前者の定義なら「 1 行目のセルに 80、 2 行目のセルに
300 - 80 = 220 という数値を代入する」という意味に解釈でき、
その次の行のセルに対する扱いが不明瞭で、後者の「3行に分割」
という表現との間に食い違いが生じます。
 
引用:
If Cells(i, 4) > 160000 Then
               Cells(i, 5) = 80
               Cells(i+1, 5) = 80
               Cells(i+2, 5) =(cells(i,4))/1000-160

少なくとも上記の式は「 i 行目の 4 列目のセルの値が
160000 を超える場合」という条件を意味しており、
「80を超える場合」という条件とは明らかに合致しません。
 
例えば「 i 行目の 4 列目のセルの値を 1000 で割った結果が
80 を超える場合」というのが本来の条件なら、そのような
フローになるようにコードを記述するべきですし、
逆にその条件を満たしていなかった場合はどうしたいのかも
明記された方がよいでしょう。

投稿日時: 23/04/19 17:55:24
投稿者: minagawa

半平太 さんの引用:
>Cells(i+1, 5) = 80
 
としているので、80にしかならないでしょう。
※Changeイベントが発動したり、表示形式でそんな風に見える様にしていないなら、ですけども。
 
ステップモードで(F8キーを押しながら)、どんな展開になっているか確認してみてください。

 
すみません。先ほどは何度数字を変えても80にならず訳が分からなかったのですが、
今やってみたらきちんと計算されました。???
お騒がせしました。
回答有り難うございました。