• ベストアンサー

Excel : 関数での分岐

こんにちは。よろしくお願いします。 エクセルで英単語帳を作ったのですが、復習すべき日にちを決めるとき、D列に今日の日付、E列に1~7の整数、F列に関数を入れるとして、 1→1日後にやる 2→3日後にやる 3→5日後にやる 4→7日後にやる 5→13日後にやる 6→30日後にやる 7→60日後にやる というような設定を、IF関数を使って =IF(E2=1,D2+1,IF(E2=2,D2+3,IF(E2=3,D2+5,IF(E2=4,D2+7,IF(E2=5,D2+13,IF(E2=6,D2+30,IF(E2=7,D2+60,"入力し直し"))))))) のようなことやっているのですが、こういう関数の使い方は、壊れやすい(暴走しやすい)のではないかと不安です。(今のところ普通に動いてはいます。) このままデータが増えればこわれる可能性はあるのでしょうか。 また、関数を使ったもっと賢い方法があるのでしょうか。 マクロのことは分からないのでそれを使わない方法で、 関数だけを使ったより良い方法があれば教えてください。 分かりにくい文章ですいません。 よろしくお願いします。

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

  • ベストアンサー
  • shiotan99
  • ベストアンサー率68% (140/203)
回答No.2

こんにちは~ > このままデータが増えればこわれる可能性はあるのでしょうか。 ないと思いますよ。 CHOOSE関数を使えば、こんなふうにもできます。 =IF(E2="","",IF(OR(E2<1,E2>7),"入力し直し",D2+CHOOSE(E2,1,3,5,7,13,30,60)))

domni
質問者

お礼

お礼のつもりで補足に書き込んでしまいました。 すいません。。

domni
質問者

補足

 こんにちは~  CHOOSE関数は、私が思い描いていたことのできる関数でした。  それでも、今私のやっていることをこの関数でやろうとすると、結構長い式になるですね。  ど素人の私ですが、ネットで検索して何とか、この式の意味が分かりました。  ありがとうございます。試してみます。

その他の回答 (3)

  • e10go
  • ベストアンサー率38% (47/122)
回答No.4

>また、関数を使ったもっと賢い方法があるのでしょうか。 これについては、他の回答者さんから良い答えが出ているので回答を差し控えます。 >このままデータが増えればこわれる可能性はあるのでしょうか。 式の中でIF関数を増やすことを言っていると思いますが、エクセルの式で壊れることは有り得ないので大丈夫です。 もっとも、IF関数の*ネスト回数は8回までの制限があり、制限を越えると、エラーが出ます。 エラーが出るといっても、入力できないだけで、壊れるわけではありません。 *ネストとは、関数の中に同じ関数を繰り返し使用することです。 実際に下の2つの式をエクセルシートの適当なセル(B1以外)に入れるとわかります。 <<IF関数のネスト8回>>(エラーにならない) =IF(B1=1,1,IF(B1=2,2,IF(B1=3,3,IF(B1=4,4,IF(B1=5,5,IF(B1=6,6,IF(B1=7,7,IF(B1=8,8,"")))))))) <<IF関数のネスト9回>>(エラーになる) =IF(B1=1,1,IF(B1=2,2,IF(B1=3,3,IF(B1=4,4,IF(B1=5,5,IF(B1=6,6,IF(B1=7,7,IF(B1=8,8,IF(B1=9,9,"")))))))))

domni
質問者

お礼

こんにちは。 私はネストという言葉すら分かりませんでした。 ネストは8回までですね。覚えておきます。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 参考になるか分りませんが、私の経験談を書いておきます。 "mammal" という単語を知らなかったことがきっかけで、単語の勉強を始めました。ちなみに、私は、英語は不得意です。また、単語を覚えたところで、英語ができるようになるわけではありません。 最初は、分厚い紙にExcelで作った表を、名刺印刷ソフト(マクセルの『ラベルプロデューサー』)にCSV出力し、単語カードとして裏表を印刷してしていました。単語カードは、ランダムに並べ替えられるのと、覚えたものは捨てられるからです。単語カードはすぐに飽きました。 その後、いろんなソフトを試し、3年前ぐらいから、当時はフリーソフトウェア(『P-Study』)で、だいたい、4000語近くは行い、8割ぐらいは記憶したと思います。(単語リストは自作です。作成ソフトでは、シャープの『翻訳これ一本』が、学習用には、ひじょうに良く出来ています。これで拾い出した単語は、Excelにインポートできます。他の翻訳ソフトは、学習用には不向きです。) たぶん、印刷はされていると思いますが、よほど上手に作り込まないと飽きます。表の中で行うと、その順番を覚えてしまいます。表で覚えようとしましたが、完全に失敗しました。リストを順序を覚えるようで、覚えたつもりになってしまうのです。 英和が出来ても、和英はもっとむつかしいです。例えば、日本語では、「強盗」や「泥棒」という単語は、種類が少ないのですが、英語ではひじょうに種類が多いのです。英単語=日本語というだけでは足らないようです。訳付けには、いろんな工夫が必要です。 なお、お書きになった関数式では、ハングしたり壊れたりすることはありません。 別の式を紹介しておきます。 =IF(E2=0,"",IF( AND(E2>0, E2 <8),INDEX({1,3,5,7,13,30,60},,E2)+D2,"入力し直し"))

domni
質問者

お礼

こんにちは。 英語の方面からの書き込み、ありがとうございます。 私のやってきたこととかなりダブっていますので親近感が沸きますね。でもその全てに挫折して、今このやり方に賭けているわけです。カード作成も昔挫折した経験があるのでやっていません。数十の例文をプリントアウトすることは考えています。  最後行の式を何とか理解できました。  ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

IFはなじみやすいので、初めはネストして使いがちですが、多い場合はVLOOKUP関数が使えないか考えるべきです。 E1:F7に 1 1 2 3 3 5 4 7 5 13 6 30 7 60 といれて、E2に1-7が入るとして、たとえばF2に =VLOOKUP(E2,$J$1:$K$7,2,FALSE) & "日後にやる" を入れればよいです。 なおVLOOKUP関数は有名(用)関数ですから、早くなれてください。

domni
質問者

お礼

ご解答ありがとうございます。 私がやりたいのは、他のセルを使わずに関数だけで値を出すことだったので、VLOOKUPでは私の思うことができないようです。  説明がつたなくて申し訳ありませんでした。  また、真っ先に解答していただき、ありがとうございました。

関連するQ&A