『別シートへ抽出したい』(ともこ) よろしくお願いいたします。 シート1 通  枝番   日付   D列      E列   F列 1   1    7/3   運転しない   空欄 2   1    7/4   私有車     2815 2   2    7/4   空欄      空欄      3   1    7/5   休暇      空欄   空欄 4   1    7/6   レンタカー   2222   空欄 4   2    7/6   空欄      空欄 シート2  A列    B列 7/3    運転しない 7/4    2815 7/5    休暇 7/6    2222 シート1からシート2へB列を抽出したいのです。 IF関数とVLOOKUPとOffsetを使ってましたが上手くいきません・・・ シート1は行を削除したり挿入することも想定しています。 お知恵をいただけますか? < 使用 Excel:Excel2010、使用 OS:Windows10 > ---- >シート1からシート2へB列を抽出したいのです。 >IF関数とVLOOKUPとOffsetを使ってましたが上手くいきません・・・ 無理にとは言いませんが、【どのようなルール】で抽出しているのか、【どのようにうまくいかないのか】説明できませんか? (もこな2) 2023/07/13(木) 10:18:02 ---- 仕様も実際のコードも書いていないのに >IF関数とVLOOKUPとOffsetを使ってましたが上手くいきません・・・ >お知恵をいただけますか? そりゃあんさん、無茶でっせ! (そう思わん?) 2023/07/13(木) 10:28:32 ---- 枝番が1と日付けで抽出 E列が空白でなければ抽出 E列が空白であればD列を抽出です。 下の公式に最初はOffsetで左側を抽出していたのですが シート1の行を追加や削除をしているとずれるみたいだったので 下記のようにしてみましがうまくいきません。 INDEXやMATCHを使った方がいいでしょうか? =IFERROR(IF(VLOOKUP($A10,入力!$C:$E,3,0)<>"",VLOOKUP($A10,入力!$C:$T,2,0),VLOOKUP($A10,入力!$C:$E,3,0)),"") (ともこ) 2023/07/13(木) 10:30:15 ---- >シート2へB列を抽出したいのです。 A列の日付は入力済みってこと? >シート1は行を削除したり挿入することも想定しています。 それでどうなるかは試してません。 ・Sheet1のD列以降は手入力(数式の結果ではない) ・枝番1で、Sheet1のD列以降がすべて空白ということはない ・Sheet2は1行目から B1 =IFERROR(VLOOKUP(A1,Sheet1!C:F,COUNTA(INDEX(Sheet1!D:F,MATCH(A1,Sheet1!C:C,0),0))+1,FALSE),"") 下コピー 少なくとも例示通りにはなります。 または B1 =IFERROR(LOOKUP(1,0/(INDEX(Sheet1!D:F,MATCH(A1,Sheet1!C:C,0),0)<>""),INDEX(Sheet1!D:F,MATCH(A1,Sheet1!C:C,0),0)),"") 参考まで (笑) 2023/07/13(木) 11:04:35 ---- >E列が空白でなければ抽出 >E列が空白であればD列を抽出です。 D列とE列の2列だけ? 2列だけなら B1 =IFERROR(VLOOKUP(A1,Sheet1!C:E,2+(INDEX(Sheet1!E:E,MATCH(A1,Sheet1!C:C,0))<>""),FALSE),"") 参考まで (笑) 2023/07/13(木) 11:13:23 数式ちょっと修正 11:26 ---- 2列だけなら、そちらが試した式の場合 B1 =IFERROR(IF(VLOOKUP(A1,Sheet1!C:E,3,0)<>"",VLOOKUP(A1,Sheet1!C:E,3,0),VLOOKUP(A1,Sheet1!C:E,2,0)),"") 参考まで (笑) 2023/07/13(木) 11:39:58 ---- 説明不足ですいません。 シート2は8列目よりはじまります シート2Aに日付けはすでに入力済みです。 シート2のC列から抽出です。 シート2      A列     C列 8行目  7/1      7/2   7/3    運転しない   7/4    2815   7/5    休暇   7/6    2222 C8=IFERROR(VLOOKUP(A8,入力!C:E,COUNTA(INDEX(入力!D:E,MATCH(A8,入力!C:C,0),0))+1,FALSE),"") 入れてみましたが「運転しない」「休暇」は抽出されないようです。 (ともこ) 2023/07/13(木) 11:59:01 ---- >「運転しない」「休暇」は抽出されないようです。 Sheet1のE列を数式で空白にしてませんか? その式は、手入力だったら、と書きましたけど・・・ D列とE列の2列だけなら C8 =IFERROR(IF(VLOOKUP(A8,入力!C:E,3,0)<>"",VLOOKUP(A8,入力!C:E,3,0),VLOOKUP(A8,入力!C:E,2,0)),"") これでいいのでは? (笑) 2023/07/13(木) 12:17:49 ---- プルダウンではダメということでしょうか? 勉強不足で申し訳ありません。 (ともこ) 2023/07/13(木) 12:22:06 ---- 確かに手入力だと大丈夫でした。 実は下記の数式は当初私も試してみました。 参考までになぜ手入力でないといけないか教えて下さい C8 =IFERROR(IF(VLOOKUP(A8,入力!C:E,3,0)<>"",VLOOKUP(A8,入力!C:E,3,0),VLOOKUP(A8,入力!C:E,2,0)),"") (ともこ) 2023/07/13(木) 12:29:04 ---- >プルダウンではダメということでしょうか? これはどこの話? Sheet1のD列とE列は、入力規則のリストから選択してるってこと? >参考までになぜ手入力でないといけないか教えて下さい Sheet1のE列を数式の「""」で空白にしてるんだったら COUNTA 関数はそれもカウントするから。 例示の「7/3」の場合 =COUNTA(INDEX(入力!D:E,MATCH(A8,入力!C:C,0),0))+1 この式は「2」にならないとダメなのに、E列を数式で空白にしていたら「3」になってしまいます。 で、D列とE列の「2列」だけ? 書き忘れてましたが、2列だけなら ↓ でもできますよね。 C8 =IFERROR(VLOOKUP(A8,入力!C:E,2+(INDEX(入力!E:E,MATCH(A8,入力!C:C,0))<>""),0),"") 以上 (笑) 2023/07/13(木) 12:47:39 ---- >C8 =IFERROR(VLOOKUP(A8,入力!C:E,2+(INDEX(入力!E:E,MATCH(A8,入力!C:C,0))<>""),0),"")   ↓ の方がいいかも C8 =IFERROR(VLOOKUP(A9,入力!C:E,2+(VLOOKUP(A9,入力!C:E,3,0)<>""),0),"") 以上 (笑) 2023/07/13(木) 12:59:12 ---- 「プルダウン」がおもむろに出てきたり、あんさん説明不足がエグイって。ほんま。 (そう思わん?) 2023/07/13(木) 13:37:14 ---- (笑)様 様々なパターンを教えていただき 勉強になりました。 シート1のD列がプルダウンでも全く問題ありませんでした。 C8 =IFERROR(VLOOKUP(A8,入力!C:E,2+(INDEX(入力!E:E,MATCH(A8,入力!C:C,0))<>""),0),"") 若しくは C8 =IFERROR(VLOOKUP(A9,入力!C:E,2+(VLOOKUP(A9,入力!C:E,3,0)<>""),0),"") (ともこ) 2023/07/13(木) 15:42:48