• ベストアンサー

エクセル if関数でいいのでしょうか?(書き直し)

超初心者です。 ロールプレイングゲームの経験値表のようなものを作っています。 レベルが1上るのに、前のレベルの数×50の経験値が必要で、それを表に不定期に記入していきたいのです。 A列に数字を入れるだけでその時のレベルが出るようにしたいのです。 つまり、A列を現在の経験値、B列をレベルとして、 A1=0  B1=1 A2=50  B2=2 (純増:レベル1×50で50) A3=150 B3=3 (純増:レベル2×50で100) A4=300 B4=4 (純増:レベル3×50で150) A5=500 B5=5 (純増:レベル4×50で200) ↑ここで、もしA5に490と入れたなら、B5は条件を満たしてないので『3』のまま出るようにしたいのです。 また、もし、A5にいきなり750といれたなら、B5は4を越えてしっかり次のレベル『5』と出て欲しいのです。 どういう式が一番いいのでしょうか? os:Me excel2000 です。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

#1のmshr1962です。 一応、数式だけで表(VLOOKUP関数)を使わない方法です。 =INT(SQRT(ROUND(INT(A5/50)/0.5+0.5,0))+0.5) レベル99までは確認しました。

bBoooooo
質問者

お礼

すいません、質問文最後の >ここで、もしA5に490と入れたなら、B5は条件を満たしてないので『3』のまま出るようにしたいのです。 また、もし、A5にいきなり750といれたなら、B5は4を越えてしっかり次のレベル『5』と出て欲しいのです。 の部分は数字間違いです。最初のかっこは『4』後ろは『6』でした。 VLOOKUP関数はまだ勉強していないので、答える事もままならず・・・すいません。 お教えいただいた方法をもうちょっと勉強して試してみようと思います。 あと、今回のそれを使わない方法も試してみます。 勉強になります。 ありがとうございました!

bBoooooo
質問者

補足

ここで皆さんにお礼申し上げます。 私にとってmshr1962さんの数式が、理屈はいまだ理解できませんが、最も理想に近いです。 わかりにくい質問で大変恐縮でしたが、 答えてくださった皆さん、どうもありがとうございました!! これからその理屈も勉強します!

その他の回答 (5)

  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.6

#3です。 >これだと、数字を入れて見てもレベル1のまま変わらないのですが・・・ コピーした後、B3が =IF(A3="","",B2+INT((A3-A2)/(B2*50))) となってますか? B3も =IF(A2="","",B1+INT((A2-A1)/(B1*50))) となってませんか? (以下、同様)

bBoooooo
質問者

補足

ほんとに何度も助かります!! じゃ、実際のを詳しく書いて見ますね。 B3以下が現在の経験値、C3以下にレベルが出るようにするとして、 B3=0 C3=1 と入れました。 次にC4に =IF(B4="","",C3+INT((B4-B3)/(C3*50))) と入れ、 それ以下をコピーしました。 C5は =IF(B5="","",C4+INT((B5-B4)/(C4*50))) となっています。 その後、B4に仮に40と入れたら、C4は『1』のまま(これはヨシ) B5に50と入れれば、C5には『2』になって欲しいのに『1』のまま(これが不満) 試しにその下、B6に150と入れると、なぜか希望通りの『3』とでます。 この時、次のレベルアップが300なので、その手前の290をB7に入れると『3』のまま(これはヨシ) その下B8に300と入れると、レベルアップで『4』と出て欲しいのに『3』のまま。 ↑のような状態です。 私の希望する状態がわかるでしょうか?

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.5

#4で計算式が出ていますが、もっと簡略化できます。 A1に経験値を入れると、次の式でレベルが出ます。 =ROUND(SQRT((A1+7)/25),0) 一応、レベル200までは確認してあります。

bBoooooo
質問者

補足

上の式を入れる場所はB1ですよね? そうだとしてちょっと試してみましたが、 期待通りに数値が出てくれます。 質問文で言う所の、『純増:レベル○×20』だった場合、 上の式は=ROUND(SQRT((A1+7)/10),0) に、なるという事でよろしいでしょうか?

  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.3

A1=0とB1=1 はそのまま入力して使ってください。 B2には =IF(A2="","",B1+INT((A2-A1)/(B1*50))) 以降必要分コピーしてください。 これでOKだと思います。 ただし、 >もし、A5にいきなり750といれたなら、B5は4を越えてしっかり次のレベル『5』 これは、計算上レベル2段階UPの『6』となってしまいますが、よろしいでしょうか。

bBoooooo
質問者

お礼

回答の通り試してみたのですが、 これだと、数字を入れて見てもレベル1のまま変わらないのですが・・・ 試しにいきなり大きな数字を入れてみるとそれなりの数字が出るところから、 純増値を入れるとその間に変化したレベル数が出るようです。 思った回答が得られないにしろ、かなりの勉強になりました。 ありがとうございました!!

  • oresama
  • ベストアンサー率25% (45/179)
回答No.2

いろいろ方法はあるかと思いますが、 まず、C列D列で、 経験値とレベルの対応表を作ります。 C1に0 C2に50 C3以降は、 =C2+(C2-C1)+50(以下コピペ) D1に1 D2以降は、 =D1+1(以下コピペ) で、 B1以降は、 =VLOOKUP(A1,C:D,2,1)(以下コピペ) で、A列に経験値を入力すると、 対応するB列のセルに、レベルが反映されます。 念のため、 >また、もし、A5にいきなり750といれたなら、 >B5は4を越えてしっかり次のレベル『5』と >出て欲しいのです。 ↑『レベル6』の間違いですよね?

bBoooooo
質問者

お礼

文末の誤りのご指摘、その通りです。スイマセン・・・ 回答の通り試してみたのですが、どうも上手くいきません・・・ 私の打ち間違いの可能性も大いにありそうなのですが、 2度試して2度ともだめでした・・・ しかし、すごく勉強になりました。 ありがとうございました!!

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

A列の経験値でB列にレベルの表示ですね。 経験値とレベルの相関表を作ってVLOOKUP関数で表示させては如何ですか? 上記のデータ(A1:B5)を表とすれば C1に750と入れたときにD1=IF(C1="","",VLOOKUP(C1,$A$1:$B$5,2,TRUE)) とすれば5が表示されます。 実際はもっと高いレベル(最大レベル)までの表を作る必要がありますが...

関連するQ&A