- ベストアンサー
支払の計算式について【説明画像あり】
- 支払の計算式について説明します。支払の計算式は、入力情報に基づいて行われます。入力情報には現在残高、初回支払、支払回数、ボーナス月&金額などが含まれます。
- 図2の反映シートが図3のようになる関数を教えてください。関数は反映シートのセルA1~L13に入れることができます。求められる関数は月ごとの支払額を計算するものです。
- 入力情報には条件や計算方法があります。初回金額は月額金額以上の金額とし、月額金額と初回金額の小数点以下は切り捨てます。図2or図3は36回まで表示できる表を想定しています。また、最終支払日の計算方法なども含まれます。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
シート2を4列で2行目から下方にデータを表示させるとしたら次のようにします。 シート1のB3セルに入力する式は変わりませんが、B5セルには次の式を入力します。 =ROUNDDOWN(B1-B6*B4-COUNTIF(Sheet2!C:C,B7)*B8-COUNTIF(Sheet2!C:C,C7)*C8+B6,-2) B6セルには次の式を入力します。 =ROUNDDOWN((B1-COUNTIF(Sheet2!C:C,B7)*B8-COUNTIF(Sheet2!C:C,C7)*C8)/B4,-2) シート2のA2セルには次の式を入力します。 =IF(ROW(A1)>Sheet1!$B$4,"",ROW(A1)) B2セルには次の式を入力します。 =IF(A2="","",TEXT(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+A2-1,25),"e")) C2セルには次の式を入力します。 =IF(B2="","",MONTH(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+A2-1,25))) D2セルには次の式を入力します。 =IF(C2="","",IF(A2=1,IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$5,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$5,Sheet1!$B$5)),IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$6,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$6,Sheet1!$B$6)))) たくさんの回答をしてきました。これ以上は式の内容をよく理解できるようにしてご自分で努力してみてください。
その他の回答 (8)
- tom04
- ベストアンサー率49% (2537/5117)
No.1・2です。 補足を読ませていただきました。 前回のSheet配置で、Sheet2のB列を和暦「H23」のような表示にしたいということですので・・・ 一例です。 この際ですので、ついでといっては失礼ですがSheet2のA列の数式も少し手を加えてみました。 Sheet2のA2セルは =IF(OR(Sheet1!$B$4="",ROW(A1)>Sheet1!$B$4),"",ROW(A1)) B2セルは =IF(A2="","",TEXT(EDATE(Sheet1!$B$2,ROW(A1)-1),"ge")) としてA2・B2セルを範囲指定し、B2セルのフィルハンドルで下へずぃ~~~!っとコピーしておきます。 特に36行と限定する必要はありません。 Sheet1の支払回数だけ表示されますのでしっかり下へコピーしておいても構いません。 これで希望に近い形にならないでしょうか? 尚、Sheet2のB2セルの数式は、セルの表示形式をユーザー定義から ge としておけば =IF(A2="","",EDATE(Sheet1!$B$2,ROW(A1)-1)) でも大丈夫だと思います。m(__)m
- KURUMITO
- ベストアンサー率42% (1835/4283)
式は次のように一部訂正してください。 NAMEなどの誤りの表示は関数やSheet1!などのスペルが間違って入力されているときに表示されます。 B2セルには次の式を入力します。 =IF(A2="","",TEXT(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+A2-1,25),"e")) C2セルには次の式を入力します。 =IF(B2="","",MONTH(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+A2-1,25))) D2セルには次の式を入力します。 =IF(C2="","",IF(A2=1,IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$5,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$5,Sheet1!$B$5)),IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$6,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$6,Sheet1!$B$6)))) なお、4列のみで下方に行に伸ばす場合でも上の式が成功しなければできません。
補足
御回答ありがとうございました。 今、一発で成功しました。 お時間ございましたら、4列のみのも、教えて頂きます様 お願い致します。 また、行数を、かえるには、(現在12行)です。 A2セルの式の、*12を任意の数字に変更すれば、良いのでしょうか? 宜しく、お願いします。
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No5でシート2のD2セルに入力する式は次のようにしてください。 =IF(C2="","",IF(A2=1,IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$5,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$5,Sheet1!$B$5)),IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$6,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$6,Sheet1!$B$6))) A2セルが絶対参照の形になっていましたが相対参照の形に変更しました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No3,4です。 エクセル2010で試験していましたのでエクセル2002で試験してみました。 シート2のA2セルに入力する式が長くなって機能しないことがわかりますた。 それを解消するためにシート2では次のようにしてください。 A2セルには次の式を入力します。 =IF(INT(COLUMN(A1)/4)*12+MOD(ROW(A1)-1,12)+1>Sheet1!$B$4,"",INT(COLUMN(A1)/4)*12+MOD(ROW(A1)-1,12)+1) B2セルには次の式を入力します。 =IF(A2="","",TEXT(DATE(YAER(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+A2-1,25),"e")) C2セルには次の式を入力します。 =IF(B2="","",MONTH(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+A2-1,25))) D2セルには次の式を入力します。 =IF(C2="","",IF($A2=1,IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$5,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$5,Sheet1!$B$5)),IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$6,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$6,Sheet1!$B$6))) その後にA2セルからD2セルまでを範囲として選択しP2セルまでオートフィルドラッグしたのちに下方にも13行までオートフィルドラッグします。 以上のようにシート2での作業を行ってください。そうすることで期待する結果がシート2に表示されるでしょう。
補足
いつも、ご回答ありがとうございます。 ご指示のとおり、試しましたが、下記のエラーがでます。 エクセルのバージョンは2007or2003です。どちらでも、試しました。 ●A2セル→OKです。回数が表示されます。Sheet1に、指定したとおりの回数が表に反映されます。 ●B2セル→#NAME? と表示される。 数式は、入力できます。 ●C2セル→#NAME? と表示される。 数式は、入力できます。 ●D2セル→数式の修正が入り、下記の数式に書き換えられます。その後→#NAME? と表示される。 =IF(C2="","",IF($A2=1,IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$5,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$5,Sheet1!$B$5)),IF(C2=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$6,IF(C2=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$6,Sheet1!$B$6)))) ご提案ですが、表を今は、回数、年、月、金額が、12行×3の表となっていますが 回数、年、月、金額は、全て1列表示されるものでも、OKです。 以上、宜しくお願いします。
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No3です。 シート2が式を入れてオートフィルドラッグしてもエラーとなるとのことですが、こちらの提案したとおりにしているのでしょうか。A1セルに式を入力するのではなくA2セルに式を入力するのですが。 また、入力の式は複雑ですからこちらの書いた式そのものをコピーしてA2セルに貼り付け右横方向にオートフィルドラッグしたのちに下方の13行までオートフィルドラッグしてみてはいかがでしょう。 シート1での計算が正しく表示されないとのことですが、式の一部はシート2での表示の結果を受けて計算している式ですのでシート2の表示が正しくなければ正しい答えとはなりません。 具体的にどんな数値を入力したら正しい答えが得られないのかを教えてください。
補足
ご回答ありがとうございます。 【Sheet2】について エラーは下記のとおりです。 【Sheet2】の【A2】セルに数式をコピー&ペーストすると、エラーが表示され、数式の入力自体できない。 エラー内容⇒入力した数式にはエラーがあります。 具体的事象⇒下から3行目の右から、見ていき、最初に出てくる、【OFFSET】が黒く反転表示される。 【考えられる事】 ●コピペがうまく出来ていない。 ⇒方法は、本ホームページより、数式をコピーし、Sheet2のA2セルにペースト ●エクセルのバージョンが2000である。 ⇒本日、バージョン2007で、試してみます。 ●シートの名前が違う ⇒入力シートをSheet1 、表のシートを Sheet2 としています。 =IF(MOD(COLUMN(A1),4)=1,IF(INT(COLUMN(A1)/4)*12+MOD(ROW(A1)-1,12)+1>Sheet1!$B$4,"",INT(COLUMN(A1)/4)*12+MOD(ROW(A1)-1,12)+1),IF(OFFSET(A2,0,-1)="","",IF(MOD(COLUMN(A1),4)=2,TEXT(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+OFFSET(A2,0,-1)-1,25),"e"),IF(MOD(COLUMN(A1),4)=3,MONTH(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+OFFSET(A2,0,-2)-1,25)),IF(MOD(COLUMN(A1),4)=0,IF(OFFSET(A2,0,-3)=1,IF(OFFSET(A2,0,-1)=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$5,IF(OFFSET(A2,0,-1)=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$5,Sheet1!$B$5)),IF(OFFSET(A2,0,-1)=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$6,IF(OFFSET(A2,0,-1)=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$6,Sheet1!$B$6)))))))) 【Sheet1】について ●数式は全て、所定のセルに、コピペ完了しています。 ●しかし、関数の答えが、下記の【■の項目】の情報では、【●の項目】が下記となる。 なお、■の情報は、本質問で、質問したとおりの情報です。 ■現在残高:1,000,000、■初回支払:平成23年1月 ■最終支払日:平成23年12月25日 ■支払回数:12回 ■ボーナス:6月【100,000】、12月【100,000】 ●月額金額【初回月】:83,700 ⇒答えは、67,400 ●月額金額【初回以降】:83,300 ⇒答えは、66,600 【考えられるエラー】 ●Sheet2の数式が入力できていない ⇒表が完成していない 以上、大変、お手数ですが、宜しくお願いします。
- KURUMITO
- ベストアンサー率42% (1835/4283)
表を1列では分かり易いですね。とのことですがご質問のような表にしたいとの前提で式を作りましたので多少式は複雑になっています。 また、初回の支払いがボーナス月に当たった場合なども考慮すればそれでも式は複雑になります。 お尋ねの式は次のようになりますね。 シート1のB3セルには次の式を入力します。 =TEXT(DATE(YEAR(B2&"1日"),MONTH(B2&"1日")+B4-1,25),"ggge年m月d日") B5セルには次の式を入力します。 =ROUNDDOWN(B1-B6*B4-(COUNTIF(Sheet2!C2:C13,B7)+COUNTIF(Sheet2!G2:G13,B7)+COUNTIF(Sheet2!K2:K13,B7)+COUNTIF(Sheet2!O2:O13,B7))*B8-(COUNTIF(Sheet2!C2:C13,C7)+COUNTIF(Sheet2!G2:G13,C7)+COUNTIF(Sheet2!K2:K13,C7)+COUNTIF(Sheet2!O2:O13,C7))*C8+B6,-2) B6セルには次の式を入力します。 =ROUNDDOWN((B1-(COUNTIF(Sheet2!C2:C13,B7)+COUNTIF(Sheet2!G2:G13,B7)+COUNTIF(Sheet2!K2:K13,B7)+COUNTIF(Sheet2!O2:O13,B7))*B8-(COUNTIF(Sheet2!C2:C13,C7)+COUNTIF(Sheet2!G2:G13,C7)+COUNTIF(Sheet2!K2:K13,C7)+COUNTIF(Sheet2!O2:O13,C7))*C8)/B4,-2) そこでシート2ですが1行目にはお示しのような項目名が有るとしてA2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方の13行目までオートフィルドラッグします。 =IF(MOD(COLUMN(A1),4)=1,IF(INT(COLUMN(A1)/4)*12+MOD(ROW(A1)-1,12)+1>Sheet1!$B$4,"",INT(COLUMN(A1)/4)*12+MOD(ROW(A1)-1,12)+1),IF(OFFSET(A2,0,-1)="","",IF(MOD(COLUMN(A1),4)=2,TEXT(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+OFFSET(A2,0,-1)-1,25),"e"),IF(MOD(COLUMN(A1),4)=3,MONTH(DATE(YEAR(Sheet1!$B$2&"1日"),MONTH(Sheet1!$B$2&"1日")+OFFSET(A2,0,-2)-1,25)),IF(MOD(COLUMN(A1),4)=0,IF(OFFSET(A2,0,-3)=1,IF(OFFSET(A2,0,-1)=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$5,IF(OFFSET(A2,0,-1)=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$5,Sheet1!$B$5)),IF(OFFSET(A2,0,-1)=Sheet1!$B$7,Sheet1!$B$8+Sheet1!$B$6,IF(OFFSET(A2,0,-1)=Sheet1!$C$7,Sheet1!$C$8+Sheet1!$B$6,Sheet1!$B$6))))))))
補足
御回答ありがとうございます。 質問ですが、Sheet1で、上記数式を入力すると、1回目はうまく計算されます。 しかし、2回目から、現在残高【B1セル】や、回数【B4】を変更していると ボーナスの金額が加味した、計算ではなくなります。 また、Sheet2にへも、数式を入れましたが、反映されません。数式を入力するところで エラーとなります。 私の検証不足ではありますが、何かヒントがありましたら、教えてください。 宜しくお願いします。
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! 補足を読ませていただきました。 確かに支払月より1か月多い月が表示されてしまいますね。 初回月が1回目の支払になりますので、単純に支払回数を足し算してはいけませんでした。 1回分をマイナスする必要があります。 B3セルの数式は =IF(OR(B2="",B4=""),"",DATE(YEAR(B2),MONTH(B2)+B4-1,25)) といった感じにしてみてください。 検証せずに投稿してごめんなさいね。m(__)m
補足
ご回答ありがとうございます。 もう1つ質問です。 Sheet2の西暦表示を平成に変更できますか? 例:2011→23 よろしくお願いします。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 ↓の画像のようにSheet1を入力用Sheetとし、Sheet2に表示するようにしています。 尚、お示しのように同項目を3列で表示すると数式がややこしくなりますので、敢えて36行で各項目1列ずつ表示するようにしています。 そして、Sheet2には「累計」の列も入れてみました。 (1)Sheet1の「初回支払月」B2セルの表示形式はユーザー定義から ggge年m月 としておき、入力はシリアル値で 2011/1/1 のように入力します。 (2)「最終支払日」のB3セルの表示形式は「日付」にしておき、 =IF(OR(B2="",B4=""),"",DATE(YEAR(B2),MONTH(B2)+B4,25)) という数式を入れています。 (3)「初回支払」のB5セル・「2回目以降」のB6セルはSheet2と連動しています。 B5セルは =IF(COUNTBLANK(B1:B3),"",B1-(COUNTIF(Sheet2!C:C,B7)*B8+COUNTIF(Sheet2!C:C,C7)*C8+B6*(B4-1))) B6セルは =IF(COUNTBLANK(B1:B4),"",ROUNDDOWN((B1-(COUNTIF(Sheet2!C:C,B7))*B8-COUNTIF(Sheet2!C:C,C7)*C8)/B4,-2)) 次にSheet2の数式になります。 A列は単純に1~36までの連番を入力しておきます。 B2セルは =IF(OR(Sheet1!$B$4="",A2>Sheet1!$B$4),"",YEAR(EDATE(Sheet1!$B$2,ROW(A1)-1))) C2セルは =IF(B2="","",MONTH(EDATE(Sheet1!$B$2,ROW(A1)-1))) として、B2・C2セルを範囲指定し、C2セルのフィルハンドルで最終行までオートフィルでコピー! D2セルは =IF(C2="","",IF(COUNTIF(Sheet1!$B$7:$C$7,C2),Sheet1!$B$5+HLOOKUP(C2,Sheet1!$B$7:$C$8,2,0),Sheet1!B5)) E2セルは単に =D2 D3セルは =IF(C3="","",IF(COUNTIF(Sheet1!$B$7:$C$7,C3),HLOOKUP(C3,Sheet1!$B$7:$C$8,2,0)+Sheet1!$B$6,Sheet1!$B$6)) E3セルは =IF(D3="","",E2+D3) という数式を入れ、D3・E3セルを範囲指定し、E3セルのフィルハンドルで最終行までオートフィルでコピーすると画像のような感じになります。 尚、EDATE関数を使用するに当たり当方使用のExcel2003以前のバージョンでは メニュー → ツール → アドイン → 「分析ツール」にチェックを入れておく必要があります。 以上、長々と書きましたがお役に立てば良いのですが・・・m(__)m
補足
tom04 様 ご回答、ありがとうございます。 B3セルの関数について質問します。 最終支払日が、1ヶ月少なく表示させたいのですが。 例:回数 1の場合:初回:H23.1⇒最終支払日は、H23. 1 回数12の場合:初回:h23.1⇒最終支払日は、H23.12 以上宜しくお願いします。 表を1列で、表示するのは、分かりやすいですね。 本当に、ありがとうございます。
お礼
いつも、圧倒的な知識で、教えていだきありがとうございました。 うまく、作る事ができました。本当に、ありがとうございました。 次回、質問は、希望、月額金額とボーナス月・金額を入力して、回数を割り出す 計算式を質問いたします。お時間がございましたら、アドバイスお願いします。 毎回、毎回、回答、いただくと、大変、お手数なので、お時間がある時がありましたら お願いいたします。 どうも、ありがとう、ございました。