はじめまして、yasshi42と申します。ここを利用するのは初めてです。よろしくお願いします。
最初はVLOOKUP関数を使っていたのですが、各年毎に計算して端数切捨てしていたものを、利率が同じ間は日数を加算して利率が変わったと時に計算するように改修したいのですが未熟なのでうまくいきません。納期限が11/30~12/30はうまくいっているのですが…
↓を試したのですがだめでした。
if t3.Offset(0, 5)=t3.Offset(1, 5) Then 'もし一つしたの利率がおなじなら
Days= Days+ t3.Offset(1, 3) '日数を加算する。
Else
(略)
End if
↓は2年目以降のLoop処理です。
Do Until iNen = eNen
Set t3 = Range("利率設定").Find(What:=iNen)
kaisibi = t3.Offset(0, 1)
endbi = t3.Offset(0, 2)
Days = t3.Offset(0, 3)
rituY = t3.Offset(0, 5)
(ここに上記のIf文入れましたがだめでした。)
If endbi < keisanbi Then
Yentai2nd = Entai * rituY * Days / 365
YEntai = YEntai + Yentai2nd
End If
iNen = iNen + 1
Set t3 = Nothing
Loop
文字数制限があるみたいなのでコードの全部はのせてません。↓に載せてます。
http://arakurikaesiki.blog.fc2.com/blog-entry-69 …
No.2ベストアンサー
- 回答日時:
こんにちは。
全部見切れてはいないのですが、こういう金利計算の基本的な扱いを間違えていると思います。もちろん、VBAを使う使わないに関わらず、気をつけなくてはならない問題があります。
一言「パソコンは、2進で動いています。したがって、小数点以下の数字には、丸め誤差が出ます。」ということです。
しかし、逆にVBAで始めてきちんとした修正ができる問題です。
コードをみると、Double型の変数があちこちにありますが、それはありないことです。2進で計算させたら、割り切れる数以外は、四則演算でほぼ狂います。もちろん、そのすべてが小数点以下を取り扱うこととは言えませんが。
Dim Yentai1st, rituY As Double '←X
Dim endbi, kaisibi As Date
それと、VBAは、VB6のDNAを継ぐものですから、VB.Net とは違い、そのような書き方をすると、Yentai1st は、Variant になっています。
Double型の代わりに、Currency 型(または、Decimal型/CDec で変換する)を使うというのが、決まりになっています。つまり、10進で計算させることです。電卓などでは、そうした完全な補正措置が取られていますが、Excelの表面上は、ある程度の補正はしているそうですが、VBAにおいては、補正も保護もなく、数字が丸裸にされてしまいます。
だから、Excelの表計算自体も、信用できません。例えば、小数点をドラッグコピーした場合に、万が一にも、表に隠れた小さな数値が混じっていれば、それだけで、実際にズレが生じてしまいますので、小数点の扱いは、ドラッグコピーなどは極めて気をつけなくてはなりませし、ワークシートの関数の二次計算も、そのままだし概ね不可だと思って間違いありません。一旦、Fixed/VBAでは、Fix 関数を使うなりしないと、正確には出てきません。マイクロソフト側では、Round関数を勧めています。なお、今回は使われていませんが、INT関数は、間違いの元ですから、気をつけたほうがよいです。
それ以外の問題で、問題箇所を探すというと、全部解体工事になってしまうと思います。
WindFallerさんこんばんわ
丁寧な解説ありがとうございます。早速Double型の代わりに、Currency 型を使ってみました。ですが、結果は変わりませんでした。
Fix関数は作成過程で使ってみましたが、いろいろ検索しているとバグがあると書いてあったのでやめました。RoundDown関数を使っていす。(法律でも1円未満の端数は切捨てとなっています。)
延滞金の計算はX:納期限の翌日から1ヶ月を経過するまでとY:納期限の翌日から1ヶ月を経過した日から納付の日までの金額で、Yの計算をしています。11月30日から12月30日が納期限だと1月1日から1ヶ月を経過した日までの金額を差し引きしなければなりません。そこがうまくいっていないみたいです。その端数処理ですが、各年ごとに切捨てしてる自治体と、利率が同じ間は日数を通算しそこで端数処理している自治体があって(デバック用に計算例を掲載している自治体の計算例ハードコピーとりまくりました)、今まで各年ごとに切捨てでやっていたのですが、後者に変更しようとしている最中です。色々やってみます。
No.1
- 回答日時:
> 納期限が11/30~12/30の時端数処理でズレでます。
手計算ではきちんと計算できるけど、ユーザー定義関数、VBAだと上手くいかないとかなんでしょうか?
計算過程をPrintとかでしっかり表示して、手計算と突き合わせとか。
> 文字数制限があるみたいなのでコードの全部はのせてません。↓に載せてます。
見ないですが、コードよりは計算手順なんかを日本語でしっかり書いて明確化しては。
> kaisibi = t3.Offset(0, 1)
> endbi = t3.Offset(0, 2)
> Days = t3.Offset(0, 3)
これもExcelのシートが無いので分かりませんが、開始日から終了日までの日数がExcelのシートに入ってたとして、VBAで経過日数しか使わないなら、開始日と終了日は取り込まずに、経過日数だけ持ってくるべきとか。
neKo_deuxさん回答ありがとうございます。
>見ないですが、コードよりは計算手順なんかを日本語でしっかり書いて明確化しては。
今やりたい計算の手順は「もし一つ下のセルの利率が同じ間、日数を加算し続ける」です。
>これもExcelのシートが無いので分かりませんが、開始日から終了日までの日数が
>Excelのシートに入ってたとして、VBAで経過日数しか使わないなら、開始日と終了>日は取り込まずに、経過日数だけ持ってくるべきとか。
シートに↓のような表をつくってそれを参照してます。
1列目,2列目 ,3列目,4列目,5列目,6列目
YYYY ,kaisibi,endbi ,Days ,rituX ,rituY
日本語というか文章が苦手でわかりにくくてすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1000円の3割の計算教えて下さい
-
変調率の求め方が
-
ExcelでLog10を自然数に直すには
-
【Excel】 SUMPRODUCT関数の高速化
-
土嚢1体で何m3入りますか?
-
パソコン工房のPCで速いマシ...
-
1日目に1円 二日目に2円 三日目...
-
5000万円×3%+6万円などの計算を...
-
洗濯洗剤の詰め替え
-
1平米の計算仕方は?
-
ドッグフード 何gが何cc?
-
結果が負の帯分数になる計算
-
iPhoneの関数電卓の使い方を教...
-
4を4つ使って1〜100を作って欲...
-
WPSで#VALUE!を消す方法?
-
270万円の6対4の計算式を教え...
-
CPU稼働率を上げるには?
-
医療費の計算方法を教えてくだ...
-
30代のデスクワークの女性が 毎...
-
計算できません…
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
楽な仕事なんて無いですか?
-
結果が負の帯分数になる計算
-
医療費の計算方法を教えてくだ...
-
1000円の3割の計算教えて下さい
-
土嚢1体で何m3入りますか?
-
ExcelでLog10を自然数に直すには
-
【Excel】 SUMPRODUCT関数の高速化
-
WEBのようにスクロールすると付...
-
iPhoneの関数電卓の使い方を教...
-
excelで板取計算。1枚の板から...
-
1日目に1円 二日目に2円 三日目...
-
1000m2は何坪? 計算方法、教...
-
30代のデスクワークの女性が 毎...
-
5000万円×3%+6万円などの計算を...
-
変調率の求め方が
-
Excel タイムカードで、昼休み...
-
ドッグフード 何gが何cc?
-
春から銀行員になりました。 電...
-
エクセル表計算:「保存」を押...
-
1平米の計算仕方は?
おすすめ情報