• ベストアンサー

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,"入力し直し"))))))) のようなことやっているのですが、こういう関数の使い方は、壊れやすい(暴走しやすい)のではないかと不安です。(今のところ普通に動いてはいます。) このままデータが増えればこわれる可能性はあるのでしょうか。 また、関数を使ったもっと賢い方法があるのでしょうか。 マクロのことは分からないのでそれを使わない方法で、 関数だけを使ったより良い方法があれば教えてください。 分かりにくい文章ですいません。 よろしくお願いします。

  • domni
  • お礼率90% (9/10)

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

  • ベストアンサー
  • 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/17068)
回答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

  • エクセルの関数について

    IF関数を使った条件参照について悩んでいます。そもそもIFではないかもしれません、お許しください。行いたいことは 1.E列が”実習日”ならば、D列の日付を返す(日付は別シートで手入力されたものから算出されています。) 2.E列が”休日”ならば、次の”実習日”のD列の日付を返す これを10回行いたいです。 現状 =IF(実習期間!E7="実習日",実習期間!D7,IF(実習期間!E7="休日","",実習期間!D7+1)) まで絞り出したのですが、行き詰まっています。どうかご教授ください。

  • エクセルの関数でどうしても解らないことがあります。

    エクセルの関数でどうしても解らないことがあります。 例えば   A   B   C  D  E 1 2 3 4 5 このセルでA列に文字を入力した時、E列にその入力した日を表示させる関数で困っています。今は=+IF(A1="","",TODAY())をE1に入力しているのですが、翌日になると1日プラスされた日付に変更されています。 ツールの計算方法を自動にしているのですが、同じシート内に他の計算式を入力しているので手動に変更できません。翌日になっても日付が変更されない方法は無いでしょうか?詳しい方宜しく願います。

  • エクセルの簡単な関数ですが。

    私はエクセルで旅日記を書いています。 A列には「今日で何日目か」 B列には「日付」 C列には「曜日」 D列には「行動時刻」です E列には「内容」です。 質問です。 A3に =IF(B3="","",DATEDIF($B$2,B3,"D")) としB3に日付が入ったら、「一日目、2日目」と増える(つもり)で書いたのですが、2日目で【1】と入ります。2日目だから【2】としたいのです。 仕方なく、B2にダミーの日付を入れて誤魔化していますが、この場合どんな関数を使ったらいいんでしょうか。

  • Excelの関数がうまく使えません。

    Excelで関数がうまく使えません。 「=IF(E2>=2000,200,IF(E2>=1000,100,IF(E2>=500,50," ")))」というのをH列のセルに入力しています。 計算はうまく?いくのですが、偽の場合に空白にしているのに、E列が空白でも200と反映されてしまいます。 ちなみにE列には「=IF(ISNUMBER(D2),(C2*D2)," ")」このような関数を使っております。 H列が空白のときに正しく空白にするにはどうしたらよいのでしょうか? 教えてください。

  • 関数の件

    年間の日にち及指定曜日に連動して表示の方法は?     A列      B列        C列       D列       E列      F列       1  2014/5/4   日曜日      AA       AA        AA      祝日  平日はE1にAA表示、土曜日はD1に表示、日曜日はD1及びE1にAA表示の関数は       D1に=IF(OR(WEEKDAY(A1,2)>5,COUNTIF(F2:F20、A1)=1)、C1,””)  E1に=IF(OR(WEEKDAY(A1,1)>6、COUNTIF(F2:F20、A2)=1)、””、C1)  上記の関数では5/4、5/5、はD1,E1にAAが表示されます、5/4から5/5までD1にAA  のみ表示又、7/20(日)はD1、E1にそれぞれAAが表示されます、7/20はD1にAA   のみ 表示関数有りますか、可能であれば教えてください。      よろしくお願いします。     

  • excelの関数かマクロで連番、日付を付けたい

    こんばんわ、EXCELマクロ入門者です。 excelの関数かマクロ、VBAで日付や、連番を付けたいです。 できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。 (1)まず、B2に商品名を入れます。 (2)すると、A2に連番、C2に今日の日付(システム日付)、 D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。 A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、 C列の日付(today関数やnow関数ではファイルを開き直すと日付が変わってしまう)とD列の商品名-日付-商品ごとの連番で特に困っています。 イメージとしては下のような感じです。   A   B    C     D 1 連番 商品名 日付    商品名-日付-商品ごとの連番 2 1   ○○○ 2007/8/10  ○○○-2007/8/10-1 3 2   ××× 2007/8/12  ×××-2007/8/12-1 4 3   △△△ 2007/8/13  △△△-2007/8/13-1 5 4   ○○○ 2007/8/15  ○○○-2007/8/15-2 6 5   ○○○ 2007/8/16  ○○○-2007/8/16-3 どなたか、ご教授ください。 どうぞ、宜しくお願い致します。

  • エクセル IF関数 初心者です。。

    A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 2  9:30 Cさん 11:00 3  10:00 Dさん 12:00 4  10:30 Eさん 9:00  1  9:00 A列氏名 B列時間 C列 B列IF関数 9:00からは1、10時からは2、 11からは3・・・ D列はC列のVLOOKUP関数 1=9:00、2=9:30、3=10:00・・・ そこでお聞きしたいのですが・・ A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 3  10:00 Cさん 11:00 4  10:30 Dさん 12:00 5  11:00 Eさん 9:00  2  9:30 IF関数を用いて IF(B1>=0.375),1,if(B1>=0.416666666666667),2,IF(B1>=0.458333333333333),3・・・ Eさんが2になるような数式がわかりません。 よろしくお願いします。。

  • エクセルIF関数について

    エクセルIF関数について エクセルのIF関数を利用して、重複するデータを抽出したいと思っています。 エクセルのIF関数を利用したことがないため、別の対応策があれば そちらも教えていただけませんでしょうか・・ 宜しくお願いいたします。 下記のようにA列に入っている1,2,3,4,5があり重複しているものをD列に一つにまとめ重複している1、5の合計分と重複していないものをEに表示させたいと思っています。     A  B     D   E 1  1  123    1  249 2  1  3      2  3 3  1  123    3  345 4  2  3      4  234 5  3  345    5  1665   6  4  234     7  5  555 8  5  555 9  5  555 D1、E1にはどのような関数で対応するのが適しているのでしょうか?

  • Excel 関数 

    Excelの関数の使い方についての質問です。 以下のようなファイルを作成しています。 *************************  日  支出 1日  \2000 2日  \1000 3日  \5000 4日  \600  ・   ・  ・   ・  ・   ・ ************************* "支出"という列の中から最大値(最高支出金額)を見つけ、その最大値を返した日付け(=最も支出金額が高かった日)をあいているセルに表示("日"という列から日付をひっぱってくる)させるにはどのような関数(またはマクロ)を組めばいいのでしょうか??

  • エクセルの関数

    A列に日付B列に金額が入っています。 C1とD1に日付を入力するセルをつくり C1の日からD1の日のB列金額の合計を出したい場合 どのような関数を使えば良いですか?SUMIFで出来ますか?

専門家に質問してみよう