[[20181108135715]] 『長い数式がマクロで動かない』(チルハナ) ページの最後に飛ぶ

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

 

『長い数式がマクロで動かない』(チルハナ)

IFを連ねた2つの数式をマクロで実行しようとすると、上手く行きません。

1つ目は
もとの式
=IF(B9="","",IF(G9<651000,"65万1千円未満",IF(G9<1619000,"65万1千円以上161万9千円未満",IF(G9<1620000,"161万9千円以上162万円未満",IF(G9<1622000,"162万円以上162万2千円未満",IF(G9<1624000,"162万2千円以上162万4千円未満",IF(G9<1628000,"162万4千円以上162万8千円未満",IF(G9<1800000,"162万8千円以上180万円未満",IF(G9<3600000,"180万円以上360万円未満",IF(G9<6600000,"360万円以上660万円未満",IF(G9<10000000,"660万円以上1000万円未満",IF(G9<12200000,"1000万円以上1220万円以下","適用対象外"))))))))))))

これが
ActiveCell.FormulaR1C1 = _

        "=IF(RC[-7]="""","""",IF(RC[-2]<651000,""65万1千円未満"",IF(RC[-2]<1619000,""65万1千円以上161万9千円未満"",IF(RC[-2]<1620000,""161万9千円以上162万円未満"",IF(RC[-2]<1622000,""162万円以上162万2千円未満"",IF(RC[-2]<1624000,""162万2千円以上162万4千円未満"",IF(RC[-2]<1628000,""162万4千円以上162万8千円未満"",IF(RC[-2]<1800000,""162万8千円以上180万円未満"",IF(RC[-2]<3600000,""180万円以上360万円未満"",IF(RC[-2]<6600000,""360万円以上660万円未満"",IF(R" & _
        "000000,""660万円以上1000万円未満"",IF(RC[-2]<12200000,""1000万円以上1220万円以下"",""適用対象外""))))))))))))"

2つ目は
もとの式
=IF(B9="","",IF(I9="65万1千円未満",0,IF(I9="65万1千円以上161万9千円未満",G9-650000,IF(I9="161万9千円以上162万円未満",969000,IF(I9="162万円以上162万2千円未満",970000,IF(I9="162万2千円以上162万4千円未満",972000,IF(I9="162万4千円以上162万8千円未満",974000,IF(I9="162万8千円以上180万円未満",ROUNDDOWN(G9/4,-3)*2.4,IF(I9="180万円以上360万円未満",ROUNDDOWN(G9/4,-3)*3.2-180000,IF(I9="360万円以上660万円未満",ROUNDDOWN(G9/4,-3)*3.2-540000,IF(I9="660万円以上1000万円未満",G9*0.9-1200000,IF(I9="1000万円以上1220万円以下",G9-2200000,"適用対象外"))))))))))))

これが

 ActiveCell.FormulaR1C1 = _
        "=IF(RC[-6]="""","""",IF(RC[1]=""65万1千円未満"",0,IF(RC[1]=""65万1千円以上161万9千円未満"",RC[-1]-650000,IF(RC[1]=""161万9千円以上162万円未満"",969000,IF(RC[1]=""162万円以上162万2千円未満"",970000,IF(RC[1]=""162万2千円以上162万4千円未満"",972000,IF(RC[1]=""162万4千円以上162万8千円未満"",974000,IF(RC[1]=""162万8千円以上180万円未満"",ROUNDDOWN(RC[-1]/4,-3)*2.4,IF(RC[1]=""180万円以上360万円未満"",ROUNDDOWN(RC[-1]/4,-3)*3.2-180000,IF(RC[1" & _
        "円以上660万円未満"",ROUNDDOWN(RC[-1]/4,-3)*3.2-540000,IF(RC[1]=""660万円以上1000万円未満"",RC[-1]*0.9-1200000,IF(RC[1]=""1000万円以上1220万円以下"",RC[-1]-2200000,""適用対象外""))))))))))))"

となってしまいます。

不慣れなもので、どなたかお力を貸して頂けると助かります。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 >上手く行きません。
 どこがどううまくいかないか(今現在どういう結果になっているか)を説明してくれ。
(ねむねむ) 2018/11/08(木) 14:14

 マクロの記録で記録されたマクロで行の分割部分で文字が消えているということだろうか?
(ねむねむ) 2018/11/08(木) 14:23

返信ありがとうございます。

マクロを実行すると途中で止まってしまいます。

「実行時エラー1004 アプリケーション定義またはオブジェクト定義エラーです。」

と表示されます。

(チルハナ) 2018/11/08(木) 14:31


>マクロの記録で記録されたマクロで行の分割部分で文字が消えているということだろうか?
ほんとですね。今気づきました。修正可能なのでしょうか?
(チルハナ) 2018/11/08(木) 14:34

 >"=IF(RC[-7]="""","""",IF(RC[-2]<651000,""65万1千円未満"",IF(RC[-2]<1619000,""65万1千円以上161万9千円未満"",IF(RC[-2]<1620000,""161万9千円以上162万円未満"",IF(RC[-2]<1622000,""162万円以上162万2千円未満"",IF(RC[-2]<1624000,""162万2千円以上162万4千円未満"",IF(RC[-2]<1628000,""162万4千円以上162万8千円未満"",IF(RC[-2]<1800000,""162万8千円以上180万円未満"",IF(RC[-2]<3600000,""180万円以上360万円未満"",IF(RC[-2]<6600000,""360万円以上660万円未満"",IF(R" & _
        "000000,""660万円以上1000万円未満"",IF(RC[-2]<12200000,""1000万円以上1220万円以下"",""適用対象外""))))))))))))"

 上の長い数式を適当に区切って

 =IF(RC[-7]="""","""",IF(RC[-2]<651000,""65万1千円未満"",IF(RC[-2]<1619000
 ,""65万1千円以上161万9千円未満"",IF(RC[-2]<1620000,""161万9千円以上162万円未満"",
 IF(RC[-2]<1622000,""162万円以上162万2千円未満"",IF(RC[-2]<1624000,""162万2千円以上
 162万4千円未満"",IF(RC[-2]<1628000,""162万4千円以上162万8千円未満"",IF(RC[-2]<
 1800000,""162万8千円以上180万円未満"",IF(RC[-2]<3600000,""180万円以上360万円未満"",
 IF(RC[-2]<6600000,""360万円以上660万円未満"",IF(R" & "000000,""660万円以上1000万円未満"",
 IF(RC[-2]<12200000,""1000万円以上1220万円以下"",""適用対象外""))))))))))))

 数式1 = 区切った1行目の数式の文字
 数式2 = 区切った2行目の数式の文字
 数式3 = 区切った3行目の数式の文字
 数式4 = 区切った4行目の数式の文字
 数式5 = 区切った5行目の数式の文字
 数式6 = 区切った6行目の数式の文字
 数式7 = 区切った7行目の数式の文字

 上のように短くした方が、確認も容易なのでセルなどに書き込んで、
 数式1〜7までの文字が合っているなら、

 ActiveCell.FormulaR1C1 = "=" & 数式1 & 数式2 & 数式3 & 数式4 & 数式5 & 数式6 & 数式7

 とすれば、簡単なんだけど・・。
 なんで、わざわざ解かり難いくそ長いもんを作りたがるのか?
 これ、10年以上前にもエクセルの学校に書き込んだような?
(BJ) 2018/11/08(木) 14:51

BJさん 返信ありがとうございます。

すみません。素人なもので、具体的にどうして良いのかわかりません。
ただ、10年以上前から同じような問題があるようですので、
もう少し調べてみます。ありがとうございます。
(チルハナ) 2018/11/08(木) 15:18


 1番目の式を短くしてみた。
 (できれば金額と表示文字の対応表を作っておいてVLOOKUP関数で引っ張ってくるのがいいと思うが)
(ねむねむ) 2018/11/08(木) 15:21

 すまない、こちらの都合で分割になる。
 =IF(B9="","",LOOKUP(G9/1000,{0,651,1619,1620,1622,1624,1628,1800,3600,6600,10000,12200},
(ねむねむ) 2018/11/08(木) 15:23

 {"65万1千円未満","65万1千円以上161万9千円未満","161万9千円以上162万円未満","162万円以上162万2千円未満","162万2千円以上162万4千円未満","162万4千円以上162万8千円未満",

(ねむねむ) 2018/11/08(木) 15:24


 "162万8千円以上180万円未満","180万円以上360万円未満","360万円以上660万円未満","660万円以上1000万円未満","1000万円以上1220万円以下","適用対象外"}))
 上の二つとくっつけてくれ。
(ねむねむ) 2018/11/08(木) 15:25

ねむねむさん 返信ありがとうございます。
試してみます。ありがとうございます。
(チルハナ) 2018/11/08(木) 15:32

コメント返信:

[ 一覧(最新更新順) ]


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