• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 条件によって異なる数字を足したい(その2))

エクセルで条件によって異なる数字を足す方法

このQ&Aのポイント
  • エクセルで条件によって異なる数字を足す方法について教えてください。
  • 特定の条件を指定して4桁の数字を足していく方法を知りたいです。
  • いくつかの基本パターンの例を教えていただけるとありがたいです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#170371
noname#170371
回答No.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)

回答No.4

十進法には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)
回答No.3

1490は、基本パターンの8を足しても10の位が繰り上がらないから、2つ目のパターンになるんじゃないんですか? あと、厳しいことを言うようですが、IF文を使えば良いことが解っていて、IF文の中にIF文を入れても良いことが解っているなら、条件をまともに整理できれば、その通りに式を書けば良いだけです。 式が書けないのは、条件を整理できていないということです。 きちんと条件を整理しましょう。 あなた自身が自分のやりたい条件を出さないと、誰もあなたのやりたいことを実現できる数式を作れませんよ。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

#1です。 > 計算式を考える前に、条件式を整理してみましょうね。 訂正↓ 計算式を考える前に、条件を整理してみましょうね。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

条件をそのまま式にすると、 =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を足す時点で繰り上がっているので、条件に反してはいません。 計算式を考える前に、条件式を整理してみましょうね。

ryo938
質問者

お礼

説明がわかりにくくてすいません。 5を足すパターンの時に2の位が繰り上がらない場合で尚且つ18を足すと3の位が繰り上がる場合に15を足す といった説明で理解してもらえるでしょうか? 例: 1489→1497(+8) 1490→1505(+15) 1491→1506(+15) ・ ・ 1495→1500(+5) 1496→1501(+5) 文章で説明しづらいので例をあげます。 解りましたら、教えてください。 宜しくお願いします。

関連するQ&A