エクセルについて質問です。


★エクセルの状態です。

http://oskuni7.sakura.ne.jp/hatena/question24/question24.htm

SHEET1のデータの

希望する/しない の所が 【希望する】 になっていて、且つ【メールアドレスが記入】されているもの

をSHEET2に順番に表示していきたいと考えております。

そうする為にはどのようにすればよろしいでしょうか。

マクロではなく、関数でできればいいのですがやり方を知っているかたおりましたらよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2009/03/20 15:11:34
  • 終了:2009/03/20 17:30:15

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/03/20 16:02:54

ポイント100pt

オートフィルタではダメですか。

http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter.htm

  C列:希望する
  D列:空白以外

で希望の結果になると思いますが。

id:aiomock

ご回答ありがとうございます。

オートフィルタで出来ました。

2009/03/20 17:14:54
  • id:nobnob3
    C、D列で並び替えてコピペするのが一番簡単な気がしますが、一応関数作ってみました。
    スマートではありません。
    シート1のA列に一列新しい列を挿入して次の関数を入れます。
    セルA1には0を入れます。
    セルA2以降に=IF(D2="希望キボウする ",IF(E2="",A1,1+A1),A1)
    の関数を入れてデータの入る範囲までコピーします。

    シート2にも一行A列に新しい列を挿入します。
    一行目には1,2,3と一つずつ増える行番号を作成します。
    実際にデータの欲しい場所に次の関数を入れます
    =IF(ISERROR(VLOOKUP($A2,Sheet1!$A$2:$E$999,@,FALSE))=TRUE,"",VLOOKUP($A2,Sheet1!$A$2:$E$999,@,FALSE))
    @部分にそれぞれ2、3、5を入力します。

    以上で一応上手くいきました。

  • id:SALINGER
    既に終了したようですが、関数だけで表示する方法を紹介しておきます。
    A2セルの数式に
    >>
    =INDEX(Sheet1!A$1:A$101,SMALL(IF(Sheet1!C$1:C$100="希望する",ROW(Sheet1!C$1:C$100),101),ROW()-1))
    <<
    を入れて、Shift+Ctrl+Enterで配列数式にします。後は下にコピー。
    データ2とメールアドレスはそれぞれ最初のところのAをBとDに変えるか、
    上記の式で求めたデータ1の値からVLookupを使ってもいいです。
    (データの行数が100より多い場合は、100と101を1000と1001とかに変えてください。)
  • id:nobnob3
    SALINGERさん
    面白い方法の紹介ありがとうございます。
    配列数式は初めて知ったのでとても勉強になりました。
    ただ、SALINGERさんの方法だとメールアドレスが入力されている場合という条件は抜けていますよね。
    色々考えて、次のような式を作ったんですがどこがいけないんでしょうか?上手く働きません。
    まだ理解が不十分でないのだと思います。

    =INDEX(Sheet1!A$1:A$101,SMALL(IF((Sheet1!C$1:C$100="希望する")*(D$1:D$101<>""),ROW(Sheet1!C$1:C$100),101),ROW()-1))
  • id:SALINGER
    すいません。メールアドレスが抜けてました。
    nobnob3さんの複数条件の場合は掛け合わせるというのはあってます。

    >>
    =INDEX(Sheet1!A$1:A$101,SMALL(IF((Sheet1!C$1:C$100="希望する")*(Sheet1!D$1:D$100<>""),ROW(Sheet1!C$1:C$100),101),ROW()-1))
    <<
  • id:nobnob3
    質問者と関係ないところで話が進んでいますが、SALINGERさんちゃんと出来ました。
    配列数式の範囲をきっちり合わせないといけないようですね。
    配列数式についても、大部理解出来てきました。
    しかし不思議なのは、上記式で、どうしてちゃんと、a、e、i・・・と並ぶのでしょうか?
    そのまま行くとa、0、e、0・・・という具合で並びそうな気がするんですが。
    SALINGERさんもしよろしかったらお教えください。
  • id:SALINGER
    説明すると、条件式では2つの条件を満たすとその行を、満たさないと101(最大行が100なのでそれ以上の数)を返します。
    次のような配列ができます。(1行目からにしてるので、1行目も条件に合わないとして101が返っています)
    101
    2
    101
    4
    101
    6
    7

    この配列からROW()-1番目に小さい値は、すなわち何行目かを意味します。
    後はSheet1のA列でINDEXを使えばその行の値を取り出せます。

    配列数式は直感的にわかりづらいので、あまり使われてるのを見かけませんが、
    使いこなせると作業列無しでスッキリした関数を可能にする仕組みなんで、
    私も理解を深めたいと思っている部分です。
  • id:nobnob3
    ありがとうございます!
    思わずいるかをあげたくなりました。
    ”この配列からROW()-1番目に小さい値”
    ここを読み落としていました。

    エクセルは奥が深いですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません