プロが教えるわが家の防犯対策術!

はじめまして。
エクセル2016(Mac)環境で関数を作ることを考えているのですが教えてください。

例えば、ある数Aがありまして15000で割り算をした数△(小数点切り捨て)に15000をかけた数値をAから引き算をします。(この計算を以下★と記載致します)
この数字をBとします。
その後、Bが15000以上であれば★を繰り返し、15000未満であるならば、Bに0.5をかけた数値を計算します(この数字をCとします)

こういった計算をした結果、最終的に
6000*△の総数+C
という数値を算出するシートを作りたいのですが、ループを用いた場合どのように組み立てるべきか教えてください。

★を一度だけ行うという計算までは、エクセルで作ることができましたが、
繰り返し行うという動作ができない状況です。
ちなみに、一度だけ行うという計算式は以下の通り作ってみました。これすら根本的に違ったらすみません。。。

=IF(Aが記載されているセル(以下♪)>=15000, ♪-15000*INT(♪/15000)+5000*INT(♪/15000), ♪*0.5)

動きとして期待しているのは以下のような計算結果です。
<<例>>
A=55000である場合、
55000は15000以上であるため、
55000-15000*3+5000*3=25000
25000は15000以上であるため、
25000-15000*1+5000*1=15000
15000は15000以上であるため、
15000-15000*1+5000*1=5000
5000は15000未満のため、
5000*0.5=2500

以上から
5000*(3+1+1)+5000*0.5=25000+2500=30000

ご回答の程をよろしくお願いいたします。

A 回答 (3件)

「関数を作る」とのことですが、「ユーザ定義関数を作る」という理解で良いですか?


であれば、こんな感じでしょうか。

ただ、最初の質問文では、「55000→3000」になっているのに対して、No.2さんへのお礼には「55000→32500」となっています。下記のユーザ定義関数はNo.2さんへのお礼に沿って実装しています。

Function myFuntion(ByVal a As Variant) As Variant
Dim 商の総和 As Long
Dim 商 As Long
Dim 余り As Long
Do
商 = Int(a / 15000)
余り = a Mod 15000
a = 余り + 5000 * 商
商の総和 = 商の総和 + 商
Loop Until a < 15000
myFuntion = 6000 * 商の総和 + a * 0.5
End Function
    • good
    • 0

疑問1


>例えば、ある数Aがありまして15000で割り算をした数△(小数点切り捨て)に15000をかけた数値をAから引き算をします。(この計算を以下★と記載致します)
は<<例>>のどの部分に当たるのでしょうか?

疑問2
>55000-15000*3+5000*3=25000
が一番近いとは思うのですが 5000*3はどこから出てきたのでしょうか?

疑問3
>25000+2500=30000
??

推察1
=INT(55000/(15000-5000))*5000+MOD(55000,(15000-5000))*0.5
でしょうか?

疑問4
>=MOD(Aのあるセル, 15000)+5000*INT(Aのあるセル/12000)
AのあるセルがA1セルとして
B1セルに
=IF(OR(A1="",A1<12000),"",MOD(A1,15000)+5000*INT(A1/12000))
右へオートフィル
それからが意味不明です
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
色々説明不足で申し訳ございません。

>疑問2
>55000-15000*3+5000*3=25000
>が一番近いとは思うのですが 5000*3はどこから出てきたのでしょうか?
→15000で割り算をした商を5000でかけるという意味でした。

剰余+5000*商の値(Bとここでは呼びます)が15000を超えなくなるまで、
5000*INT(B/15000)+MOD(B, 15000)*5000
という計算を行い、15000未満になったら
その数値に0.5をかけるという意味でした。

なので、例えば55000を例に出しますと、、、

-----
55000=15000*3+10000
→10000+5000*3=10000+15000=25000
→25000>15000なので、
→25000=15000*1+10000となるので、
→10000+5000*1=15000
→15000>=15000なので、
→15000*1+5000*1=5000
→5000<15000なので、
→5000*0.5=2500・・・(**)

最終的に割り切れた数(商)の総和x6000+(**)を行いたいです。
つまり、、、
6000x(3+1+1)+2500=30000+2500=32500
という数値を求められる計算をエクセルで行いたいと思っております。

わかりにくい質問で申し訳ございません。
ご教示の程をよろしくお願いいたします。

お礼日時:2017/08/30 18:21

説明が、な~~~~~んかおかしいんだけど…。


まあいいか。

・・・本題・・・
要点だけ。

Aを15000で割ったときの商の小数点以下を切り捨てる
 INT(A/15000)

Aを15000で割ったときの余りを求める
 MOD(A,15000)


あとは好きにしてください。
(多分、MOD関数の存在を知らないだけなんだろうと思うんだ)
    • good
    • 0
この回答へのお礼

助かりました

ご返信ありがとうございます。
おっしゃる通りMOD関数とINT関数ですね。
MOD関数がわからなかったので勉強になります。
このMOD関数とINT関数を使った数式、
=MOD(Aのあるセル, 15000)+5000*INT(Aのあるセル/12000)
これが12000未満になるまで繰り返し、
最終的に12000未満になった数値に0.52をかけた値と、
上記の関数で今まで計算した結果の総和を
足し算した結果を返すという処理を行いたいです。
こちらについてご教示いただけたらありがたいです。
よろしくお願い致します。

お礼日時:2017/08/30 07:52

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