• ベストアンサー

エクセルにて複数の条件から検索できますか?

業務の関係で検索できるよう依頼を受けました。 先ほども質問させてもらいましたが、私の説明不足でしたので、再度説明させてもらいました。 質問につきましては添付の画像を使い説明させてもらいます。 C3とC4に数値を入力すると、C7とC8に数値を表示できるようにしたいと考えています。 元データはI4からM11となります。 高さはIだけですが、許容衝撃はJのMAXもしくはKのMIINの中の数値と合致したらとなりますので、 C3・C4の数値がIとJもしくはKの数値が合致したら返すようにしたいと考えています。 わたしくのエクセル知識が足りてないのでご教授をお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

画像が良く見えないので間違っているかもしれませんが、JのMAXとかKのMINって実際にJ列の最大値、K列の最小値と言う意味ではなく、単なるデータの項目名ですか? でしたら、作業列とVLOOKUPを使った方法を。 添付の画像、見えますかね? F4に =I4&"_"&J4 G4に =I4&"_"&K4 と、入れて11行目までコピーしています。 次に、 F14に =VLOOKUP(C3&"_"&C4,F4:M11,7,FALSE) F15に =VLOOKUP(C3&"_"&C4,F4:M11,8,FALSE) と、入れます。これがI列とJ列がC3,C4の値と一致した時のデータです。 次に G14に =VLOOKUP(C3&"_"&C4,G4:M11,6,FALSE) G15に =VLOOKUP(C3&"_"&C4,G4:M11,7,FALSE) と、入れます。これはI列とK列がC3,C4の値と一致した時のデータです。 最後に、 C7に =IF(ISNA(F14),IF(ISNA(G14),"",G14),F14) C8に =IF(ISNA(F15),IF(ISNA(G15),"",G15),F15) と、入れます。これで、F14にデータがあれば表示、無ければG14にデータがあれば表示して、無ければ空白にしています。

178cho
質問者

お礼

ご回答ありがとうございました。 早速試してみましたら、できました。 本当に助かりました。 私の説明不足にも拘らず丁寧な対応ありがとうございました。

その他の回答 (4)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

VLOOKUPを使うだろう、 ということが分かったとして、使い方をマスターできるか?。 式を教えてもらうとして、 行や列が増えたり、計算位置、範囲が変わっても対応できるか?。 式を誤って削除してしまったとき再現できるだけの理解を得られるか。 要は、 結果が出たとして、この先も掲示板頼りだけ、というのは大変な話なんです。 「知識が足りてない。」 なんて思わずに、 類似質問を探すとか何が工夫できることはないか、を考えてみたらいいです。 質問=仕様、 質問があいまいだと回答も遅いし結果もブレます。 この時間ロスがもったいない。

178cho
質問者

お礼

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

また判りにくい質問をしている。実例を挙げてないからややこしくなる。今回は画像を上げているが質問回答をするために操作してご覧。拡大してもはっきり見えない。実例は文字テキストで、エクセルシートに似せてあげてみて。 質問が検索とあったからミスリードしたと思う。 ーー そしてあなたの会社で使う用語、業務の高さ、許容衝撃などはなるべく使わず(パターンが肝心で中身は影響しない場合が多いのだ)、 A1セルの値から表1を引いてC1の値を求め、B1の値から表2を引いてD1の値を求め、C1とD1の積を求めたい、という風に質問文を書いて。 多分VLOOKUP関数を2箇所(2セル)で使う問題ではないかな。 補足要求します。 ーー >エクセル知識が足りてないのでご、ではなくて、他人に同説明するかの文章力の問題で、こちらのほうが世の中では大切ですよ。

178cho
質問者

お礼

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

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

質問内容がいま一つわからないのですが(添付画像も良く見えない)、おそらく以下のような数式でご希望の数値が求められるのではないかと思います。 C7セル(L列の値を表示する欄) =IF(MAX(INDEX((I4:I11=C3)*((J4:J11=C4)+(K4:K11=C4)),)),INDEX(L:L,MAX(INDEX((I4:I11=C3)*((J4:J11=C4)+(K4:K11=C4))*ROW(I4:I11),))),"") C8セル(K列の値を表示する欄) =IF(MAX(INDEX((I4:I11=C3)*((J4:J11=C4)+(K4:K11=C4)),)),INDEX(K:K,MAX(INDEX((I4:I11=C3)*((J4:J11=C4)+(K4:K11=C4))*ROW(I4:I11),))),"")

178cho
質問者

お礼

ご回答ありがとうございました。 早速試してみます。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

VLOOKUP関数の使い方を学習する。 機能要件から関数を探すには? 今後どうする?。 ネット質疑応答だけでは不十分になりがちです。 画像はわかりません。

178cho
質問者

お礼

回答ありがとうございました。 画像はわかりづらくすいませんでした。

関連するQ&A

  • Excel 複数検索条件について

    ついさきほど別の質問をさせていただいて立て続けですみません。 Excelでレポートを作成したいのですが、関数がよくわからずにいます。 A B C D ---------------------------------- 1 月 車番 発地 行先 2 1 001 OSAKA TOKYO 3 3 010 NARA SHIGA 4 6 103 TOKYO FUKUOKA こういう感じでA2:D500まであります。 たとえば、「3月」の「車番001」の「大阪発」の「東京行き」のデータ個数を数えたい場合、DCOUNTA関数を使って H I J K ---------------------------------- 1 月 車番 発地 行先 DCOUNTA(A1:D500,,H1:K1)としてみました。 しかし、「大阪発かつ京都発」としたい場合、セルJ2に京都を入れてDCOUNTA(A1:D500,,H1:K2)とすると期待した数字がかえってきませんでした。おそらくH2, I2, K2が空欄だからかなと予想しています。 こういう風に条件となる項目の数が異なる場合に、すべてを満たす満たす個数を調べたい場合はどうすればいいでしょうか。 フィルタを使うよりもなんとか関数でできないでしょうか。 わかりにくくてすみません。補足しますのでよろしくお願いします。

  • エクセル複数検索で

    A、B、C列を検索してD列のデータを求める式を作成しました。 データリスト   A     B   C   D   1 F2    M2  55  100 2 F21   M3  55  110 3 S22   M2  60  105 4 S2    M2  65  115 求める式(10行目のA、B、Cに文字及び数値を入力し、その値に合致するDの値をD10に求める) 式:INDEX(D1:D4,MATCH(A10&"!"&B10&"!"&C10,A1:A4&"!"&B1:B4&"!"&C1:C4,)) ここで質問ですがA10のセルにはフルネームで入力してデータ行のA1~A4の値は最初の文字(F又はS)だけ認識させたいのですがその方法が分かりません。 質問がわかりにくいかもしれませんがA1~A4にはForSのみ記入しA10セルにはF2、S22などと表示したいのです。よろしくお願い致します。

  • ソースコードを簡潔に直したいのですが…

    有限積分法(参考 http://www.akita-nct.jp/yamamoto/study/thesis/2005/thesis_namekawa.pdf) を用いて、格子点 ( i, j, k )の磁場成分 Bx, By, Bz をその周辺を囲む電場成分 Ex, Ey, Ez で逐次計算するコードは次のようになります。 for ( i = 0; i < i_max; i++ ) {   for ( j = 0; j < j_max; j++ ) {     for ( k = 0; k < k_max; k++ ) {       Bx [ i ][ j ][ k ] = Ey [ i + 1 ][ j ][ k ] - Ey [ i + 1 ][ j ][ k + 1 ] + Ez [ i + 1 ][ j + 1 ][ k ] - Ez [ i + 1 ][ j ][ k ];       By [ i ][ j ][ k ] = Ez [ i ][ j + 1 ][ k ] - Ez [ i + 1 ][ j + 1 ][ k ] + Ex [ i ][ j + 1 ][ k + 1 ] - Ex [ i ][ j + 1 ][ k ];       Bz [ i ][ j ][ k ] = Ex [ i ][ j ][ k + 1 ] - Ex [ i ][ j + 1 ][ k + 1 ] + Ey [ i + 1 ][ j ][ k + 1 ] - Ey [ i ][ j ][ k + 1 ];     }   } } 電場成分の係数行列 C ( 0, 1, -1 のいずれかをもつ ) を求める必要が生じた、すなわち CCC  E  B CCC * E = B CCC  E  B のような行列計算に変更するため、次のように書き直しましたが係数行列 C を求める部分を簡潔にできませんでした。 for ( i = 0; i < i_max; i++ ) {   for ( j = 0; j < j_max; j++ ) {     for ( k = 0; k < k_max; k++ ) {       for ( x = 0; x < 3; x++ ) {         row = index ( x, i, j, k, i_max, j_max, k_max );         y = ( x + 1 ) % 3;         z = ( x + 2 ) % 3;         if ( x == 0 ) {           C[ row ][ index ( y, i + 1, j,   k,   i_max, j_max, k_max )] = 1;           C[ row ][ index ( y, i + 1, j,   k + 1, i_max, j_max, k_max )] = -1;           C[ row ][ index ( z, i + 1, j + 1, k,   i_max, j_max, k_max )] = 1;           C[ row ][ index ( z, i + 1, j,   k,   i_max, j_max, k_max )] = -1;         }         if ( x == 1 ) {           C[ row ][ index ( y, i,   j + 1, k,   i_max, j_max, k_max )] = 1;           C[ row ][ index ( y, i + 1, j + 1, k,   i_max, j_max, k_max )] = -1;           C[ row ][ index ( z, i,   j + 1, k + 1, i_max, j_max, k_max )] = 1;           C[ row ][ index ( z, i,   j + 1, k,   i_max, j_max, k_max )] = -1;         }         if ( x == 2 ) {           C[ row ][ index ( y, i,   j,   k + 1, i_max, j_max, k_max )] = 1;           C[ row ][ index ( y, i,   j + 1, k + 1, i_max, j_max, k_max )] = -1;           C[ row ][ index ( z, i + 1, j,   k + 1, i_max, j_max, k_max )] = 1;           C[ row ][ index ( z, i,   j,   k + 1, i_max, j_max, k_max )] = -1;         }       }     }   } } int index ( const int d, const int i, const int j, const int k, const int i_max, const int j_max, const int k_max ) {   return ( ( d * i_max + i ) * j_max + j ) * k_max + k; } void Solver ( const int i_max, const int j_max, const int k_max) {   int row, col,     cell_num = i_max * j_max * k_max;   for ( row = 0; row < cell_num; row++ ) {     for ( col = 0; col < cell_num; col++ ) {       B [ row ] += C [ row ][ col ] * E [ col ];     }   } } 添え字計算が多く、非常に複雑なソースコードですが、規則性があるので、 皆様の力をお借りして簡潔に表現したいです。 よろしくお願いします。

  • Excelの式の誤りを教えてください。

    Excel2003を使用しています。 A4からL204までデータがあります。(ところどころに空白の行があります) C 列は文字列で、"B"の文字が表示されている行であれば、同じ行の I列とJ列の数値を足し算して、その計にL列の数値を掛け算して、その4行目から204行目までの"B"行の I列とJ列を足し算して、その計にL列の数値を掛け算した合計を、"B"の文字が表示されている行のI列とJ列を足し算した合計の数値で割り算した数値をL1のセルに表示する数 式を教えてください。 下の式は自分で考えたのですが、だめです。 L1=SUMPRODUCT((C4:C204="B")*1,(I4:I204+J4:J204)*L4:L204)/SUMIF(C4:C204,"B",I4:I204)+SUMIF(C4:C204,"B",J4:J204) 宜しくお願いいたします。

  • エクセルで複数条件(固定&流動)で数値を求める

    EXCEL2010で質問です。 画像内、左側のような表があります。 これを右側の表に反映させたいのです。  A列の6ケタのコードとC列の項目名、  H列と J&K列 で対比させ、数値を入れたいのですが、 J2~J7 K2~K7 のセル内にどのような数式を入れれば良いでしょうか? 簡単にできそうな気がしたのですが、いざ組んでみるとつまづいてます。

  • Excelの関数を使って(条件付)

    計算式の表を作成したいのですが関数の使い方が分からないのでお願いいたします。 A1:数値 A2:数量 A3:数値×数量の積 上記のA3の数値を元に数種類の係数(B3,C3,C43,D3,E3,F3)を掛けてゆき その中で欲しい数値に一番近いものの最大値だけセル(B4,C4,C4,D4,E4,F4のどれか)に表示します。 その表示された数値を別計算で求めた値から引いた 数値を次の行で別計算の数値に足したいのです。 A1: 11.4  A2 :14  A3 :159.6 ・ B3:0.000014・C3:0.000112・D3:0.000663 E3・0.00785 ・F3:0.0292 F4:46.6 (50以下の50に一番近い数値を係数の下のセルに表示) 説明がへたくそで申し訳有りませんが教えてください

  • エクセル計算式

       A    B    C    D    E    F   G   H   I   J    K    L  1 名前(1) 80.00  50.0  51.0 ×54.0 80.0  85.0  90.0  51.0   90.0  141.0  2 2 名前(2) 79.00  50.0 ×52.0 ×53.0  88.0 89.0 91.0 50.0  91.0 141.0 1 このとき、      C~EのMAXをIに(×の場合は00.0で計算)      F~HのMAXをJに(×の場合は00.0で計算)      (※C~Hの前には×を入れるためのセルあり)      I,J,K共にBの数値が小さいほうが上位に来る      (※I,Jの後ろには、順位を入れるセルあり)      Kは、I+J      Lは、Kの計に対する順位       列がずれていて見にくいです。すみません。 どなたか回答お願いします。

  • 下記プログラミングについて

    下のプログラミングの解説ができる方がいましたら教えてください! どう頑張っても理解できなくて困っています;; もしかしたら間違っているところがあるかもしれませんが、よろしくお願いします。 ---------------------------------------------------------------- #include<stdio.h> #include<math.h> main() { int A,B,C,t,h,i,j,k; int sum_column,sum_row,diagonal1,diagonal2; int conf,diag,seed,max; int U[101][101],V[101][101]; int rand(); A=1,B=1,C=1; printf("Please define the pueen problem size(5-100).\n"); scanf("%d", &max); printf("Please input a seed(0-999).\n"); scanf("%d", &seed); for(i=1; i<=seed; i++){ U[1][1]=rand(); }; for(i=1; i<=max; i++){ for(j=1; j<=max; j++){ U[i][j] = -(abs(rand() % 8)); V[i][j]=0; }; };   /* Main program */ t=0; diag=1; while((diag>0)&&(t<500)){ diag=0; for(i=1; i<=max; i++){ for(j=1; j<=max; j++){ sum_column=0; sum_row=0; for(k=1; k<=max; k++){ sum_row=sum_row+V[i][k]; sum_column=sum_column+V[k][j]; } diagonal1=0; k=1; while(((j+k)<=max)&&((i-k)>=1)){ diagonal1=diagonal1+V[i-k][j+k]; k++; } k=1; while(((j-k)>=1)&&((i+k)<=max)){ diagonal1=diagonal1+V[i+k][j-k]; k++; } k=1; while(((j+k)<=max)&&((i+k)<=max)){ diagonal2=diagonal2+V[i+k][j+k]; k++; } k=1; while(((j-k)>=1)&&((i-k)>=1)){ diagonal2=diagonal2+V[i-k][j-k]; k++; } k=1; h=0; conf=1; if(sum_column == 0) h=1; if(sum_row == 0) h++; if((sum_column+sum_row==2) && (diagonal1<2) && (diagonal2<2)) conf=0; U[i][j]=U[i][j]-A*(sum_row+sum_column-2)-B*(diagonal1+diagonal2)+C*h; if(U[i][j]>8) U[i][j]=8; if(U[i][j]<-8) U[i][j]=-8; if(U[i][j]>0) V[i][j]=1; else V[i][j]=0; diag=diag+conf; }; }; t++; printf("t=%d\n", t); if((t % 15) < 5) C=4; else C=1; }; printf("the number of iteretion steps=%d\n", t); printf("\n"); for(i=1; i<=max; i++){ for(j=1; j<=max; j++){ if(j==max){ if(V[i][j]==1) printf("*\n"); else printf("-\n"); } else{ if(V[i][j]==1) printf("* "); else printf("- "); } } } }

  • 複数条件の番号付けについて

    「メーカー」「商品」「販売可否」のある行に対し、以下の条件付きで番号を1から振りたいと考えています。 条件1: メーカー及び商品が重複した行があれば、既に振られた番号にする 条件2: 販売可否が空白の場合は無視する 条件3: 同じメーカーが連続するように番号を振る 条件4: 元の表は並び替えなどの加工は出来ない 一応、添付画像のような形で実現は出来ています。 以下のような式を使っています。 (1)G4:G21 =IF(COUNTIF(C$3:C3,C4)=0,MAX(G$3:G3)+1,VLOOKUP(C4,C$3:G3,5,FALSE)) (2)I4:I21 =IF(COUNTIF(D$3:D3,D4)=0,MAX(I$3:I3)+1,VLOOKUP(D4,D$3:I3,6,FALSE)) (3)K4:K21 =IF(E4<>"",G4*1000+I4,"") (4)M4:M21 =INT(IF($K4<>"",SUMPRODUCT(($K$4:$K$21<>"")*($K$4:$K$21<=$K4)/COUNTIF($K$4:$K$21,$K$4:$K$21)),0)) (4)で算出される値を得るために、(1)(2)(3)の行を使っています。 ちなみにこの(4)の値を使って、B24:D37の表を作っています。 ※画像では省略していますが、メーカー・商品ごとの台数・金額合計の表になります。 この表で使っている式は以下の通りとなります。 (5)B26:B37 =IF(MAX(B$25:B25)+1>MAX($M4:$M21),"",B25+1) (6)C25:C37 =IFERROR(INDEX($C$4:$E$21,MATCH($B25,$M$4:$M$21,0),1),"") (7)D25:D37 =IFERROR(INDEX($C$4:$E$21,MATCH($B25,$M$4:$M$21,0),2),"") 質問としては、(4)を求める為に4列使っているものを減らせられないか、理想は1列ですがせめて2列に纏められないかと思っております。 何卒、宜しくお願い致します。

  • エクセル関数でちょっと悩んでます。

    エクセル関数でちょっと悩んでます。 sheet1にセルB4、C4、D4、B5、C5、D5(グループ1)とI4、J4、K4、I5、J5、K5(グループ2)にデータが入っているとします。 sheet2のB3、C3、D3、E3、F3、G3にグループ1のデータを記入します。 B4、C4、D4、E4、F4、G4にはグループ2を入れたいのですが、sheet1からみて列7つ移動したものとして記入したいです。どうやればいいですか? 例えば、sheet2のB3には、=Sheet1!B4を入れれば反映されます。 sheet2のB4にはsheet1のI4を入れたいのですが、sheet1からみて列7つ移動した形でエクセル関数を使って表現したいのです。どうやればいいですか? =Sheet1!B4+?

専門家に質問してみよう