- ベストアンサー
エクセル2007のIF関数で自動的に休暇を選択する方法は?
- エクセル2007を使用中です。表の【B】が日曜日の場合、自動的に【C】=リストの中の”休暇”が選択されるような計算式を入れたいです。
- IF関数や条件付き書式等で試してみましたが、うまく行きません。エクセル2007のお詳しい方、お知恵をお貸し下さい。
- 【A】:9月1日、【B】:土曜日(=WEEKDAY(A1,1))、【C】:リストから選択する形式の表です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
実際の内容 【A】 【B】 【C】 1 2012/9/1 =A1 ※リストから選択 2 =A1+1 =A2 ※リストから選択 3 =A1+2 =A3 ※リストから選択 表示 【A】 【B】 【C】 1 9月1日 土曜 ※リストから選択 2 9月2日 日曜 ※リストから選択 3 9月3日 月曜 ※リストから選択 書式でA列を m"月"d"日" 書式でB列を aaa"曜" ・・・土曜日だとaaaで土、aaaaで土曜日と表示出来ます。 C列は =IF(WEEKDAY(A1,1)=1,"休暇","")または=IF(WEEKDAY(B1,1)=1,"休暇","") ただし、数式が反応するのは一度限りです。 セルに値と数式を両方、入力できないからです。 私もマクロ使いますが、どうやっても関数で出来ない以外 テストとか時間かかりますので最後の手段にしています。 そこで代用案として考えます。 (案1)C列に休暇だけ表示し、代わりにD列に※リストから選択 (案2)C列を表示だけに使用し、D列に※リストから選択 D列に値があったらD列の値をC列に表示し、 日曜だったら休暇をD列に表示 C列に =IF(WEEKDAY(A1,1)=1,"休暇",IF(D1<>"",D1,"")) とか・・・ 他にも休暇+D列の値を表示とか 表示方法はさらに考えられると思います。
その他の回答 (4)
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.4さんの方法をお勧めいたします。ベストアンサーは辞退します。 No.4さんの各数式などについてもほとんど賛成なのですが、A列のみ、次式を提案したいと思います。入力後、A2セルをコピーし、A3以下に貼り付けてください。(+2、+3、…とはしませんので、注意) A2 =offset(a2,-1,0,1,1)+1 A2セルの中に「a2」というセル参照を書いています。そういうことをすると循環参照エラーになってしまいそうにも思えますが、OFFSET関数ではなりませんので、問題ありません。 この数式のメリットは、コピーした行を挿入したり、行を削除した場合に、数式中に記述されている参照先が自動で変更操作に追従するということです。つまり、追加/削除しても、各セルの数式を修正する必要が発生しません。試してみてください。 なおWEEKDAY関数の第2引数は、日曜日という曜日を1にする場合、省略することができます。つまり単に「weekday(a1)」と書いても構いません。
お礼
ご回答ありがとうございます。お礼が遅くなり申し訳ありません。 皆さんのハイレベルな回答についていけず、ただ書かれている通りに意味も分からずコピー&貼り付けを繰り返しております。 皆さん本当にお詳しいですね…。 A列の数式は回答者様のアドバイス通り入力してみました。 私なんかの質問の為に、知恵をお貸しくださり本当にありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
C1セルには次のような式を入力して下方にドラッグコピーしてもよいでしょう。 =IF(WEEKDAY(A1,1)=1,"休暇","") なお、C列を条件付き書式などでリストから選択できるような状態にしている中で日曜日だけを自動的に休暇と表示させることはできませんね。マクロで対応することが必要です。 どうしてもマクロにしたいのであればC1セルには上の式を入力して下方にドラッグコピーして日曜日には休暇を表示するようにします。 また、リスト表示に使うデータを例えばE1セルは空白にしてE2セルから下方に並べます。 その上で、シート見出しで右クリックして「コードの表示」の画面で例えば次のようなマクロを入力します。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Column <> 3 Then Exit Sub If Target.Value = "休暇" Then Exit Sub Target.Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$E$1:$E$20" .IgnoreBlank = True .InCellDropdown = True End With Target.Select End Sub これでC列で休暇が表示されている以外のセルではリストでの選択ができるようになります。
お礼
回答ありがとうございます。お礼が遅くなり申し訳ありません。 …すごいですね。 回答者様はプログラマーか何かでしょうか? ハイレベルすぎる回答にひたすら驚いております。 …お恥ずかしいですが、マクロを使用しなければいけないような内容とは思っておりませんでした。 何か数式や条件付き書式を組み合わせればいいのかなーなどと単純ものを考えておりました。
- keithin
- ベストアンサー率66% (5278/7941)
まずB列から間違ってるので,次のように直します B2: =TEXT(A2,"aaa;;;") 次に,C列に数式を記入します C2: =IF(B2="日","休暇","") さらにC列を選択,入力規則のリストで選択できるように仕込みます。 #補足 言わずもがなですが,C列のリストを選んで数式を書き潰してしまったら,もうそのシートの再利用は出来ません。(数式を修復すればOKですけどね) まっさらのシートを取り置きしておき,テンプレートにして利用します。 #参考 別の方法として名前の定義を併用し,B列が「日」だった場合は「休暇」だけがリストから選べるように,そうでないときは所定のリストから選べるように,リストの内容を差し変える事もできます。 ただしこういう方法では,「何もしなくてもC列に休暇が自動で勝手に入る」とはいきません。「休暇しか選べない」中から休暇を選ばせるという1アクションが要りますので,今回ご相談の内容にはマッチしません。今回は具体的なやり方は割愛しますが,もしもこういう手段でも構わないというのでしたら,具体的にどんなリストなのか詳しい状況を添えて,別途のご相談として投稿してみて下さい。
お礼
お礼が遅くなって申し訳ありません。 なんだか「割と簡単に出来るのかな」と思っていた自分が恥ずかしいです…。 しっかりと関数のルールを分かっていないとダメですね。 親身になって回答くださり本当にありがとうございました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
>【C】=リストの中の”休暇”が選択されるように計算式を入れたいのですが、 と仰いますが、御質問文の中にはリストなど記されてはいないではないですか。 存在していないリストから選択する事などは出来ません。 各セルごとにどの様なデータが入力されているリストが、Excelファイルのどのシートの何行何列目から、何行何列目にかけて存在しているのかを、この回答欄の枠内に現れている「補足する」ボタンをクリックされて、ご記入願います。 尤も、リストから選択する事なく、ただ単に”休暇”という表示が現れる様にするだけでしたら、次の様な方法も御座います。 まず、C1セルに次の関数を入力して下さい。 =IF(INDEX($B:$B,ROW())=1,"休暇","") そして、C1セルをコピーして、C2以下に貼り付けて下さい。 尚、C1セルに入力する関数を、以下の様にした場合は、B列にWEEKDAY関数を使った式を入れなくとも、同様の事が出来ます。 =IF(ISNUMBER(INDEX($B:$B,ROW())),IF(WEEKDAY(INDEX($B:$B,ROW()))=1,"休暇",""),"") 或いは =IF(TEXT(INDEX($B:$B,ROW()),"aaa")="日","休暇","")
お礼
素早い回答をくださったにも関わらず、お礼が遅くなって申し訳ありません。 そして、情報の不足も申し訳ありません。 他の回答者様からのアドバイスで、今回なんとか解決する事が出来ました。 時間を割いてくださって本当にありがとうございました。
お礼
皆さま、沢山の知恵を貸して下さりありがとうございました。 私がエクセル関数に長けていない為、正直もっと簡単に出来るものだと思っていました。 思った以上に大変な数式を入れなければならず、皆さまの回答を目にして驚いてしまいました。 最終的には回答者様の案(1)にて作成させていただきました。 私の稚拙な質問にお時間を割いて、親切に回答を下さり本当にありがとうございました。