人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル2010です

0|A列 |B列 |C列 |・・・|E列
1|ABCD|1234|あい|・・・|あい ←A列が「ABCD」かつB列が「1234」の場合、同行のC列を表示
2|EFGH|5678|うえ|・・・|空白 ←「ABCD」かつ「5678」の物が無いので空白
3|ABCD|9012|おか|・・・|きく ←「WXYZ」かつ「3456」なら同行のC列を表示
4|WXYZ|3456|きく|・・・|空白 ←「WXYZ」かつ「7890」の物が無いので空白

このようにやりたいのですが、マクロを使わず関数だけでやる方法があればご教示願います

●質問者: suzuku-cara
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど

覚えると一気に便利になるSUMPRODUCT関数を使った例をだしたいと思います。
(直接書き込んでいますので動作は未確認です。)

まずは下記のように条件表を作ります。
同一シート上に作ってもかまいませんがわかりやすいように別シートにしてみました。
Sheet2

AB
1ABCD1234
2WXYZ3456

E1に入れる式は下記のような具合です。E2以下は下方向コピーします。
$の有無に注意してください。

=IF(SUMPRODUCT((Sheet2!$A$1:$A$2=A1)*(Sheet2!$B$1:$B$2=B1)),C1,"")

以下余談ですが、関数を覚えて、しっかりと動作確認するために、
まずはIF文を書かずにやってみることも勧めたいです。

=SUMPRODUCT((Sheet2!$A$1:$A$2=A1)*(Sheet2!$B$1:$B$2=B1))

もう少し詳しく身につけたいなら下記のように二列に分けてみても良いでしょう。

=SUMPRODUCT((Sheet2!$A$1:$A$2=A1))
=SUMPRODUCT((Sheet2!$B$1:$B$2=B1))

suzuku-caraさんのコメント
条件表を別に作って頂きして、大変ありがとうございます。 これでやりたいと思ってた事ができそうです。

suzuku-caraさんのコメント
すみません、説明が足りてないみたいでした。 E列とA?C列は1:1で対応してるわけでなく、ABCD,1234,あい が1行目じゃなくてもE1に表示する様にしたいのです。 また、重複データは無いという前提になってます。

2 ● きゃづみぃ
ベストアンサー

なんか 質問の3行と4行のセルは 結果が逆になっているような感じですね。

一応

=IF(AND(A1="ABCD",B1=1234),C1,"") & IF(AND(A1="ABCD",B1=5678),C1,"")&IF(AND(A1="WXYZ",B1=3456),C1,"") & IF(AND(A1="WXYZ",B1=7890),C1,"")

のようにやれば 余計な設定とかせずに できます。


suzuku-caraさんのコメント
ありがとうございます。 最初にそんな感じでやろうと思って始めたのですが、行が増えるとどうにもならなくなってきたので挫折しまいた。

suzuku-caraさんのコメント
上記の追記でおわかりかと思いますが、データの並びに関係なく、条件が満たした場合に 同じ行のC列を表示するようにしたいのです。

きゃづみぃさんのコメント
50行まであるという前提で記載しました。 >|| 1番目の条件 =IF(SUMPRODUCT((A1:A50="ABCD")*(B1:B50=1234)*ROW(1:50))>0,INDEX(C1:C50,SUMPRODUCT((A1:A50="ABCD")*(B1:B50=1234)*ROW(1:50))),"") 2番目の条件 =IF(SUMPRODUCT((A1:A50="ABCD")*(B1:B50=5678)*ROW(1:50))>0,INDEX(C1:C50,SUMPRODUCT((A1:A50="ABCD")*(B1:B50=5678)*ROW(1:50))),"") 3番目の条件 =IF(SUMPRODUCT((A1:A50="WXYZ")*(B1:B50=3456)*ROW(1:50))>0,INDEX(C1:C50,SUMPRODUCT((A1:A50="WXYZ")*(B1:B50=3456)*ROW(1:50))),"") 4番目の条件 =IF(SUMPRODUCT((A1:A50="WXYZ")*(B1:B50=7890)*ROW(1:50))>0,INDEX(C1:C50,SUMPRODUCT((A1:A50="WXYZ")*(B1:B50=7890)*ROW(1:50))),"") ||<

suzuku-caraさんのコメント
INDEXで列のn行目を使えばいいというのはわかったのですが、どうにもうまく行きません。 この式だとROWは直前の式を満たす行番号を返す様に思えるのですが、調べてみてもそういう機能では無いようなのですが。

きゃづみぃさんのコメント
ええと どこが うまくいかないのか 教えてください。

suzuku-caraさんのコメント
すみません、ROW(C1:C50)にしたら上手くいきました。 丁寧なご指導、まことにありがとうございました。

きゃづみぃさんのコメント
ありゃゃゃ
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ