プロが教える店舗&オフィスのセキュリティ対策術

Excel2013を使用しています。
左の表の中から名前と希望時間を右側(E,F列)に表示させたいです。
E3には=IF(COUNTIF(B3:C12,"佐藤 太郎"),"佐藤 太郎","")が入っています。
F3には=IF(E3="","",INDEX(A3:A12,MATCH(E3,C3:C12,0)))が入っています。
これだと希望、第二の列のみに佐藤 太郎と入力された場合は当然ですがエラー(#N/A)になってしまいます。
そこでF5に=IF(E5="","",INDEX(A3:A12,MATCH(E5,B3:C12,0)))と入れ範囲を変え(C3:C12⇒B3:C12)ましたがやはりエラーになってしまいました。
第二、第一どちらかに入力してもF列が反映されるにはどのようにすれば良いでしょうか。
また、上記が可能だった場合、第二と第一の両方に同一人物が入力された場合右側(第一)が優先される方法はありますでしょうか。

「Excelの関数についてしつもんです。」の質問画像

A 回答 (4件)

こんばんは



>第二と第一の両方に同一人物が入力された場合右側(第一)が
>優先される方法はありますでしょうか。
C列を検索してヒットしなければ、B列を検索すれば良いだけです。
ご提示のレイアウトであれば、F3セルに

=IFERROR(INDEX(A:A,MATCH(E3,C$3:C$12,0)+2),IFERROR(INDEX(A:A,MATCH(E3,B$3:B$12,0)+2),""))

の式を入力して、下方にフルコピーすればできると思います。



ご質問には関係ありませんけれど、表全体の構成や意図がよくわかりませんね。
予約表みたいなもののおつもりなのかもしれませんけれど、それぞれの人から考えると、『第二希望だけを記入して第一希望を記入しない』ってことが不自然です。
(ご質問の内容は、これに対応したいってことになので)

一方で、「ある時間帯に二人まで対応可能」と言う意味なら、「第一希望、第二希望」ではなく、枠(あるいは、ルームや器具等)が二つの意味になり、表の構成がおかしいということになります。
その場合は、二か所に名前があれば、それぞれを生かさないとおかしい。
もしも本当に希望を取るのであれば、個人名と第一、第二希望という表になるはずと考えられます。

また、E列の数式もほとんど意味がないように感じられます。
(質問者様は満足なさっているのかもしれませんけれど・・)
普通なら、「B列C列に記載のある名前のリストで、重複を除いたものをE列に求める」ということを行うと思いますけれど・・・?

※ まぁ、当方にはなさりたいことがまったくわからないので、このへんで・・
    • good
    • 0

できなくはないんだけどねえ。



 {=IF(E3="","",INDEX($A$3:$A$12,MATCH(E3,IF($C$3:$C$12<>"",$C$3:$C$12,$B$3:$B$12),0)))}

御覧の通り配列数式になります。
C列のセルが空白ならB列のセルを選択した一覧の中からE列の値に一致する行を得て、その行のA列の値を拾うってだけ。

※ 配列数式の確定方法を確認しておいてください。
  数式の前後に { } を付け足しても配列数式にはなりません。

分かりにくいでしょうから、D3セルに
 =IF(C3<>"",C3,B3)
と入力して、D12セルまで複製し、
 =IF(E3="","",INDEX($A$3:$A$12,MATCH(E3,$D$3:$D$12,0)))
としても、同じ結果を得られます。
D列に作成する一覧を関数の中で作るために ”配列数式” にしているのです。

・・・

マクロじゃないけど、面倒な数式になるってだけです。

このように作業列を設けると面倒な処理も意外と楽にこなせることを覚えておくと良いでしょう。
……この作業列を見られたくないなら、列を ”非表示” にしてしまえばいい……
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2023/09/16 06:44

関数でやるにはかなり無理がありそうです。


できたとしても、なんか(例えば第三希望が増えるとか)事情が変わったときのメンテナンスがしんどいことになりそうです。
No.1さんのご意見通りこれはマクロでやるのが無難かと。

あと、
> 第二と第一の両方に同一人物が入力された場合右側(第一)が優先される
の意味が不明です。
同一人物な訳ですから右でも左でも同じ人物が出てくる訳ですよね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
別のところで問い合わせをしたところ解決いたしました。

お礼日時:2023/09/15 14:33

かっこいいこと考えずに、時間毎(つまり行毎)に、第1が空白じゃなければ出す、空白だったら第2を出す、ってすれば?


あとは、EFをフィルターで値の空白以外で絞れば良いのでは?
関数というよりマクロの方があってる気がする
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A