- ベストアンサー
エクセルで条件によって異なる数字を足す方法
- エクセルで条件によって異なる数字を足す方法について教えてください。
- 特定の条件を指定して4桁の数字を足していく方法を知りたいです。
- いくつかの基本パターンの例を教えていただけるとありがたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
' http://oshiete1.watch.impress.co.jp/qa4646351.html -- エクセル 条件によって異なる数字を足したい ' http://oshiete1.watch.impress.co.jp/qa4664742.html -- エクセル 条件によって異なる数字を足したい(その2) Public Function ryo938(Num As Integer) As Integer ' Excel VBAつかってダサダサに組むとこんな感じ? ' 字下げしたいので意図的に全角空白を使用してあります Dim c100 As Integer Dim c010 As Integer Dim c001 As Integer c100 = Num Mod 1000 ' 下三桁抽出 c010 = Num Mod 100 ' 下二桁抽出 c001 = Num Mod 10 ' 下一桁抽出 ' Aパターン ' <8を足すと千の位が繰り上がる場合> ' num+8で百の位が繰り上がる(千の位が動く)のは ' 1000 - 8 = 992以上の場合なので… If c100 >= 992 Then ryo938 = Num + 11 Exit Function End If ' Bパターン ' <8を足すと十の位が繰り上がる場合> ' 同様に… ' 100 - 8 = 92以上 If c010 >= 92 Then ryo938 = Num + 5 Exit Function End If ' Cパターン ' <8を足すと一の位が繰り上がる場合> ' 同上、 ' 10 - 8 = 2以上 If c001 >= 2 Then ryo938 = Num + 8 Exit Function End If ' Dパターン ' 上記条件に引っかかった場合はExit Functionで既に戻っているので ' ココまで来るのは ' <8を足しても繰り上がらない場合>だけ ryo938 = Num + 18 End Function ' 1998 + 8 = 2006なのでA(+11)が該当し、2009 ' 1499 + 8 = 1507なのでB(+5)が該当し、1504 ' 1408 + 8 = 1416なのでC(+8)が該当し、1416 ' 1411 + 8 = 1419なのでD(+18)が該当し、1429 ' 1489 + 8 = 1497なのでC(+8)が該当し、1497 ' 1490 + 8 = 1498なのでD(+18)が該当し、1508 ' 1491 + 8 = 1499なのでD(+18)が該当し、1509 ' … ' 1495 + 8 = 1503なのでB(+5)が該当し、1500 ' 1496 + 8 = 1504なのでB(+5)が該当し、1501 ' 一桁の数値を加算して、百の位が動く場合 ' 十の位が動かないことは算数的にあり得ない ' よって、Bパターン特例ルーチンは必要ない
その他の回答 (4)
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
十進法には2の位とか3の位なんて存在しないので、ちゃんと10の位 100の位と書いて下さいね。でなきゃ下から2桁目、3桁目。 で、「5を足すパターン」というのはすでに「8足すと100の位が増え る」ことになっているので、10の位は必ず9から0に変化します。あ なたが例に挙げた1491は「8足しても10の位が増えない」条件で分岐 して18足す方へ行っちゃった後なので、「5を足すパターン」には該 当しないんです。質問文の記述の順序だとそうなります。最後の11 を足すパターンもありえません。必ず100の桁が変化するので、5を 足すパターンに分岐済みです。 分岐の順序を考え直しましょう。こういう場合は普通、大きな桁の 方から分岐させます。992以上で+11に分岐、92以上で分岐、2以上で +8に分岐、残りは+18。92以上の分岐の先に2未満で+15、残りは+5。 こんな感じでしょう。後はそのとおりにif関数で記述するだけ。
- nattocurry
- ベストアンサー率31% (587/1853)
1490は、基本パターンの8を足しても10の位が繰り上がらないから、2つ目のパターンになるんじゃないんですか? あと、厳しいことを言うようですが、IF文を使えば良いことが解っていて、IF文の中にIF文を入れても良いことが解っているなら、条件をまともに整理できれば、その通りに式を書けば良いだけです。 式が書けないのは、条件を整理できていないということです。 きちんと条件を整理しましょう。 あなた自身が自分のやりたい条件を出さないと、誰もあなたのやりたいことを実現できる数式を作れませんよ。
- nattocurry
- ベストアンサー率31% (587/1853)
#1です。 > 計算式を考える前に、条件式を整理してみましょうね。 訂正↓ 計算式を考える前に、条件を整理してみましょうね。
- nattocurry
- ベストアンサー率31% (587/1853)
条件をそのまま式にすると、 =IF(MOD(A1,10)<2,A1+18,IF(MOD(A1,100)<92,A1+8,IF(MOD(A1,1000)<992,IF(MOD(A1,10)<5,A1+15,A1+5),A1+11))) となりますが、 ★の、8を足すと3の位(100の位)が繰り上がって、なおかつ5を足しても2の位(10の位)が繰り上がらない場合、というのが存在しないと思うのですが。 例に挙げた1491は、8を足しても100の位が繰り上がらないので、8を足しても10の位が繰り上がらない「+18」のバターンになりますよね? なので、この計算式だと、計算結果は1509になります。 100の位が繰り上がってますが、これは基本パターンの8を足す時点では繰り上がらず、18を足す時点で繰り上がっているので、条件に反してはいません。 計算式を考える前に、条件式を整理してみましょうね。
お礼
説明がわかりにくくてすいません。 5を足すパターンの時に2の位が繰り上がらない場合で尚且つ18を足すと3の位が繰り上がる場合に15を足す といった説明で理解してもらえるでしょうか? 例: 1489→1497(+8) 1490→1505(+15) 1491→1506(+15) ・ ・ 1495→1500(+5) 1496→1501(+5) 文章で説明しづらいので例をあげます。 解りましたら、教えてください。 宜しくお願いします。