- ベストアンサー
IF関数?いくつかの条件を纏める
エクセルの関数について教えて下さい。 セルAの番号をもとにその番号が使えるかどうかを調べたいのです。 使用履歴もとっておきたいです。 番号123456はいったん終了後、次の人が使っているため使用不可。 123457は開始も終了も日付が入っていないので使用可。 A B C D 開始 終了 123456 10月20日 10月25日 不可 123456 10月25日 不可 123457 可 IFANDの関数を使ってみたのですが、Dに結果が出てきません。 どのような関数を入れたらよいか教えて下さい。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
もう、なんとお詫びしたらよいか…No1です。 ちょっと手元にエクセルの入っているPCがなくて、確認ができないものですから… 最初の回答のD2にいれる式を =IF(OR(COUNTIF(E:E,A2)>=1,B2=""),"不可","可") にしてみてください。これも確認してないので、なんとも心もとなく、申し訳ないです。
その他の回答 (7)
- cafe_au_lait
- ベストアンサー率51% (143/276)
D2:=IF(MOD(SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$C$100<>"")),2),"NG","OK") 下にコピーします。 日付の入力数(開始・終了の合計)が奇数なら使用不可、偶数なら使用可。
- Cupper
- ベストアンサー率32% (2123/6444)
#1 Cupperです。 いろいろ面倒なことをやろうとしていらっしゃいますね。 A B C D 開始 終了 123456 10月20日 10月25日 可 123456 10月25日 10月26日 可 123457 10月25日 不可 123456 可 123457 不可 こんな結果が欲しいのでしょうか。・・・これ、見づらいですよ。 IF関数のネストが複雑になりすぎるでしょう。 質問の条件から外れてしまいますが、いっそ E F 番号 稼働状況 123456 ○待機中 123457 ●使用中 123458 ○待機中 123459 ○待機中 などと別に状況を表示するセルを用意した方が見やすいし条件がスッキリすると思います。 使うのは IF関数と SUMPRODUCT関数の二つ F2=IF(SUMPRODUCT(($A$2:$A$65535=E2)*($B$2:$B$65535<>"")*($C$2:$C$65535="")),"●使用中","○待機中") F3以降はF2のコピー こんなでどうでしょう
お礼
度々ありがとうございます。 そうですね....一枚のシートで完結しようとしていたので 複雑になり、余計わかりづらくなっていくように思います。 Cupperさんのアドバイスどおり、別シートに結果、現状のシートに 履歴をつけるようにしたいと思います。 本当にありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
こういうタイプの課題はIF関数を使っては、式が長くなり、ネストの数に制限もあり、絶対できない。 ーー この質問の重要なことが、回答者の為に、はっきりかかれてないように思う。それは、繰り返し仕様をするらしいことである。 明確に質問表現を心がけてください。 ーーー 方法としては、MATCHやVLOOKUP関数が候補にならざるを得ないが、 (1)どちらも、上から検索していく (2)2番目以降の 該当行を探せない。という欠陥がある。 そういうことなので、関数では難しいと思う。 ーー そこで ユーザー関数 fndVを定義する。 Function fndv(a, b) c = a.Column d = Cells(65536, c).End(xlUp).Row For i = d To 1 Step -1 If Cells(i, c) = b Then If Cells(i, "C") = "" Then ans = "NO" If Cells(i, "b") <> "" And Cells(i, "C") <> "" Then ans = "OK" fndv = ans Exit Function End If Next i fndv = "OK" End Function ツールーマクローVBEで出てくる画面のメニューで 挿入ー標準モジュールを選んで、出てくる画面にコピペする。 ーー シートに戻り 例データA1:C4(a1などは日付の代わり) A列 B列 C列 123456 a1 b1 123457 a2 123456 a3 123433 a4 b2 E列にE1:E6に(F列は関数の結果) E列 F列 123458 OK 123456 NO 123457 NO 123444 OK 123561 OK 123433 OK F1には式 =fndv(A1,E1) と入れて、下方向に式を複写する。 引数は、番号はA列にあり、チェックする番号はE1セルにあることを言っている。 B,C列に開始と返却情報が入っていることを前提にしている。 結果 上記のF列の通り。 OK,NOの理由はF1:F6について 新規 使用中 使用中 新規 新規 返却済 ーー OK、NOより日本語の使用可とか出したければ、上記のコードの 中のOK、NOの部分の””内にそれらの日本語を入れてください。
補足
質問が分かりづらいのに丁寧に教えてくださりありがとうございます。 マクロ始めて知りました。。。。凄過ぎです!!! でも1点よくわからないのがE列です。 E列にはどういう数字が入っているのでしょうか? もう一度教えて下さい。すみません。
- tiberius
- ベストアンサー率47% (11/23)
No2です。すみません。まちがえてました。 セルD2に入力する関数を =IF(COUNTIF(E:E,A2)>1,"不可","可")にしてください。
- guchi_yama
- ベストアンサー率47% (57/119)
別例で、 A B C D 1 1122486 12月5日 12月15日 2 19375404 12月6日 12月16日 3 15781202 12月7日 12月17日 4 5619811 12月8日 12月18日 5 924377 12月9日 12月19日 6 12 12月10日 12月20日 7 5822146 12月11日 12月21日 8 5915 12月12日 12月22日 9 5439370 12月13日 12月23日 上記のような表があるとして、 D2に下記の式をコピーして、そのまま下へオートフィルして下さい。 =IF(B2="","",IF(ISNA(MATCH(A2,$A$1:A1,0)),"可",IF(B2>INDEX($C$1:C1,MATCH(A2,$A$1:A1,0)),"可","不可")))
補足
ありがとうございます。 なんだかとっても近い気がするのですが。 でも求めている答えが出てきません。 どこを変えればよいでしょうか? Aの1と2は同じ番号だとします。 12月15日に返却されたので、この番号を他の人に貸しました。 よって、この番号は貸し出し中=使用不可 これが返却されるたびに続きます。(他の番号も同様) 番号 開始日 返却日 可/不可 1122486 12月5日 12月15日 使用可 1122486 12月16日 使用不可
- tiberius
- ベストアンサー率47% (11/23)
Aの列のそのセルの直前までに同じ番号があって、かつCのセルに何も入ってない場合は不可(その番号の意味するものが現在他で使われているかどうか)ということでよろしいでしょうか。 お望みのIFANDではないのですが… まず、あいている列、ここでは仮にEの列にAとDの結合した文字列を作ります。1行目がタイトル行で、2行目からデータが入っているとして、セルE2に =A2&C2 と入力します 次に、セルD2に =IF(ISNA(VLOOKUP(A2,$E$1:E1,1,FALSE)),"可","不可") と入力します。 D2をコピーしてDの列の下方の好きなところまで貼り付けて見てください。
補足
コメントありがとうございます。 IFANDにこだわりはありません(^^;それしか思いつかなかっただけで・・・。 説明がヘタで、本当にすみません。 教えていただいた式だと、123456は次の人が使っているのに ”可”になってしまいました.... 式を変化させる必要がありそうですが、どうしてよいやらわかりません。
- Cupper
- ベストアンサー率32% (2123/6444)
質問の例でA列の数字が重複しているところがよく分かりませんが・・・ 条件を整理すると、B列のセルが空白の行は「可」と言うことですよね D1=IF(B1="","可","不可") こんなでいかがですか。
補足
質問がわかりづらくて申し訳ありません。 数字の重複ですが、携帯電話の番号だと思って下さい。 123456をAさんが使っていて、その使用期間。 使用終了後、Bさんが同じ番号で使用中。 よって、この番号は使用できない。 123457は誰もつかっていない=空欄なので使用可。 こんな感じなのですが・・・いかがでしょうか?
お礼
出来ましたぁぁぁぁぁああああ(^O^) なんとお礼を申し上げてよいやら...。 私の関数で苦しんだ数日が1時間以内に解決されてしまうなんて... 助かりました。 また教えて下さい。 ありがとうございました。
補足
やっぱり出来ていませんでした・・お力を! 教えていただいた式を入れると、123456の番号は現在使用中なのに ”可”で表記されています・・・ また下の123457は誰も使っていないのに不可になっています・・ どうしたらよいでしょうか? 今日もこの関数に戸惑い、一日が終わってしまいました(>_<) 123456 10月1日 10月2日 可 12345639356 123456 10月3日 可 12345639358 123457 不可 123457 123458 不可 123458