• 締切済み

<Excel>複数列を条件に別表から値を拾う方法

教えてください。 図G-K列(下の表)のような標準値を与える表があります。 (実際は150行程度、順番は完全にランダムです) 別表で、図A-C列(上の表)のような「地質」「樹種」「年齢」が、 実測値で手入力されたデータがあります。 (1000行程度) この上表の各行に既存の3つの条件(「地質」「樹種」「年齢」)に対応した「生長量」「糖度」を、 標準値の表から拾ってきたい場合、どのような関数を指定すればよいでしょうか。 (たとえば、図だとD9には850、E9には4が入るようにしたい) VLOOKUP関数を試しましたが、複数の参照列がある場合は適当でないようでした。 やはりデータベース関数でしょうか? 浅学な質問で申し訳ありませんが、よろしくご教授ください。

みんなの回答

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

エクセルの複数条件での抜き出しや参照は関数式が長くなって、式の理解も難しい。既に回答があるとおり。 興味があれば、Googleででも「imogasi方式」で照会すれば、過去の抜き出し問題と回答のタイプが判る。 ーー そういう事情で、エクセルでそれが出来るのは、データーフィルターフィルタオプションの設定しかない。 他にはデータベースのSQLなど使わないと複雑になる。 ただしフィルタオプションの操作は、1条件に1件分しか出来ない。これをVBAで連続作業処理をするようにしてみた。 ーー 例データ Sheet1 地質 樹種 年令 成長量 a b c d e f j jk l kk mm aa 成長量の列にSheet2を参照した値を入れるのが目的 Sheet2 検索表 地質 樹種 年令 成長量 a b c 23 d e f 2 g h i 3 j jk l 4 kk mm aa 45 ーー Sheet2 G1:I2 条件をセットするセル範囲 地質 樹種 年令 kk mm aa <-仮の値。空白でセル良い。 ーー G5:J6 結果をセットするセル範囲 地質 樹種 年令 成長量 kk mm aa 45  <--仮の値。空白セルで良い。 結果はVBA実行後、Sheet2のJ6セルにセットされる ーーー 標準モジュールに Sub Macro4() '--シートの定義 Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '--シート1の最下行をとらえる d1 = sh1.Range("A65536").End(xlUp).Row MsgBox d1 For i = 2 To d1 'シート1の最下行まで各行で繰り返し '--シート2へ条件の値を、シート1の行からセット sh2.Range("G2") = sh1.Cells(i, "A") sh2.Range("H2") = sh1.Cells(i, "B") sh2.Range("I2") = sh1.Cells(i, "C") '---フィルタオプションの設定をシート2で実行。マクロの記録から sh2.Range("A1:D12").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=sh2.Range( _ "G1:I2"), CopyToRange:=sh2.Range("G5:J10"), Unique:=False '--結果をシート1のD行にセット sh1.Cells(i, "D") = sh2.Range("j6") Next i End Sub マクロの記録で、出るコードを一部修正した程度のもの。 ーー 結果 Sheet1 のD列に求めるものが出る。 地質 樹種 年令 成長量 a b c 23 d e f 2 j jk l 4 kk mm aa 45 成長量のほかに他項目も1度に取りたいときはコードの修正追加・シート2のK列の項目見出しの追加が必要。略。 ーー 本件で3列((「地質」「樹種」「年齢」)を文字列結合して、その列でVLOOKUP関数を使うのが考えやすいかも。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

数式入力セルが多くなると動きが重くなるのであまりお勧めできませんが、例示のレイアウトなら以下のような数式をD3セルに入力して方向にオートフィルすれば該当データを表示できます。(エラー処理はしてありません) =INDEX(J$3:J$1000,MATCH($A3&$B3&$C3,INDEX($G$3:$G$1000&$H$3:$H$1000&$I$3:$I$1000,),0)) #Officeソフトはバージョンによって使用できる機能(Excelの場合は関数など)や操作方法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 作業列を使用しない方法としては次の様なものがあります。  まず、D3セルに次の数式を入力して下さい。 =IF(AND($A3<>"",$B3<>"",$C3<>"",SUMPRODUCT(($G$2:INDEX($G:$G,MATCH("゛",$H:$H,-1))=$A3)*($H$2:INDEX($H:$H,MATCH("゛",$H:$H,-1))=$B3)*($I$2:INDEX($I:$I,MATCH("゛",$H:$H,-1))=$C3))=1),INDEX(J:J,SUMPRODUCT(ROW($H$2:INDEX($H:$H,MATCH("゛",$H:$H,-1)))*($G$2:INDEX($G:$G,MATCH("゛",$H:$H,-1))=$A3)*($H$2:INDEX($H:$H,MATCH("゛",$H:$H,-1))=$B3)*($I$2:INDEX($I:$I,MATCH("゛",$H:$H,-1))=$C3))),"")  次に、D3セルをコピーして、E3セルに貼り付けて下さい。  次に、D3~E3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。  以上です。  尚、I列~K列の値が、必ず数値データのみである場合には、D3セルに入力する数式を次の様なものとする事も出来ます。 =IF(AND($A3<>"",$B3<>"",$C3<>"",SUMPRODUCT(($G$3:INDEX($G:$G,MATCH(9^99,$I:$I))=$A3)*($H$3:INDEX($H:$H,MATCH(9^99,$I:$I))=$B3)*($I$3:INDEX($I:$I,MATCH(9^99,$I:$I))=$C3))=1),SUMPRODUCT((J$3:INDEX(J:J,MATCH(9^99,$I:$I)))*($G$3:INDEX($G:$G,MATCH(9^99,$I:$I))=$A3)*($H$3:INDEX($H:$H,MATCH(9^99,$I:$I))=$B3)*($I$3:INDEX($I:$I,MATCH(9^99,$I:$I))=$C3)),"")

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 ↓の画像のように作業用の列を設けています。 作業列L3セルを =G3&H3&I3 としてオートフィルでずぃ~~~!っと下へコピー! D3セルに =IF(A3="","",IF(COUNTIF($L:$L,$A3&$B3&$C3),INDEX(J:J,MATCH($A3&$B3&$C3,$L:$L,0)),"")) という数式を入れ列方向と行方向にオートフィルでコピーすると画像のような感じになります。 参考になれば良いのですが・・・m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

一つ列を追加して、3つの項目をつなげた値を作るのはどうですか? 一つの項目になればvlookupが使えると思いますし。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [EXCEL2000]複数の列からデータを取り出して1列にまとめたい!

    (1)一行にA列、B列、C列があります。 (2)各行のどれか1つの列には、必ずデータが入っています。 (3)データの入っているセルからデータを取り出し、D列の同じ行のセルに移します。(コピーでもかまいません) (4)結果、D列には、A列~C列のデータが1列にまとまる! 具体的には↓のようになりますが、どのような関数を使えばよいですか?教えてください。 (具体例) A列 B列 C列 D列 12         12        50  50      32     32

  • EXCEL2003 複数の条件を満たす値の摘出

    補充付きで、再度質問します。 行と列の交わるところの値を摘出したいのですが、条件が複数になってしまいます。 例えば 「1月のA社の入金は?」と言う具合です。表は下記のような感じです。 B16には、数式バーに入力されている関数が入っています。(B17・B18にも) A14の月を変更すると、15行目の請求額・入金額がその月に変更になるので、16~18行目にそれぞれの金額等を上記の表(5~7行目)から摘出して自動で表示させたいのです。 どんな計算式を使えばいいのか教えてください。 言いたい事がわかりずらいかもしれませんが、よろしくお願いします。

  • 2つの値が同じという条件で行を消したい。

    下のような表で、1列目、2列目の値がともにダブっている行のみを消したいです。 1   A 1   B 1   B 1   C 2   A 3   C 3   A 3   C でいうと2、3行めの 1   B と 6、8行めの 3   C がダブっているので それを行ごと消して 次のようにしたいのです。 1   A 1   B 1   C 2   A 3   C 3   A ちなみに各行には他の列にもデータがならんでいます (3   A   あ   カ・・・・・・のようになっています)。 また、ダブるのは2行に限らず3行4行にわたるものもあります。 これってけっこう難しいのでしょうか? ぜひアドバイスを。

  • Excel2010 関数 複数条件で人数カウント

    Excel2010で、複数条件を指定して人数をカウントする関数を作成したいのですが うまくできません。やりたい事は、 Sheet1に、1行につき1名の名前(B列)と、○印(C列)が入った表があります。 Sheet2に、2行につき1名の同じ名前(B列)と、○印(C列)が入った表があります。 Sheet2のC列に○印が入った人が何人か知りたいのですが、この時の条件として Sheet1で○が入っている人で、なおかつSheet2でも○が入っている人、をカウントしたいのです。 添付の図の場合、答えはAさん、Cさん、Jさんの3人となります。 下のような式を作ってみたのですが、Sheet2が2行になっているためダメでした。 =SUMPRODUCT((Sheet1!C2:C11="○")*(Sheet2!C2:C21="○")) 関数でカウントできますでしょうか? お分かりの方いらっしゃいましたらご教示ください! よろしくお願いいたします。

  • エクセル 異なる列から部分的に同じ値を抽出する方法

    掲題の件について教えてください。 Excel初心者です。 →→A列→→→→→→→→B列 1行 名古屋クリニック→→名古屋病院 2行 瑞穂歯科→→→→→→瑞穂専門学校 という表があった時、(各行ごとに)A列とB列に共通する『名古屋』、『瑞穂』を抽出する関数を教えていただきたくお願いいたします。 *値を指定する作業セルは使わない。(約4万行に異なる会社名が羅列してあり、その旧名称と新名称が対応しているかどうかをチェックする作業に使用するため) 説明不足な部分すらも分からないので、補足で質問していただければ幸いです。 よろしくお願いいたします。

  • 表から条件の合う値を取り出す方法

    EXECL初心者です。 お手数お掛け致しますが宜しくお願い致します。 関数にて表から摘出したいのですが方法が解りません。 ご教授願います。 (1)画像のC列のC1行の「1A」を選択する。 (2)B列のB3行の「B」を選択する。 結果=C列のC3の「1」を返す。

  • (エクセル)表から1列の別表をつくりたい。

    表に入力されたものを1列に並び替えをしたいのです。(エクセル関数) エクセルの表から、セルに入力された情報を抜き出し、並び替えたいのですが、行き詰ってしまい質問させていただきます。 (やりたいこと) 添付資料のように、事業所ごとに購入した物品が日付ごとに入力されていきます。この表を一列で並び替えることを したいのですが、現状の表の形で1列に抜き出すやり方が思い浮かびません。ひとつずつリンクを設定していけばいいですが、 それですと、空白のセルができてしまうこともあり、空白を消すためにフィルタをやらなくてはいけず、なんとか関数でどうにかできないと質問させていただきました(つまり空白のセルは飛ばし、隙間のない1列の表に変換したいです)。 (試したこと) (1)vlookup関数を使うために、日付の横に検索列を作ってもみましたが、同じ行に複数の抜き出すべくものがあると、 if関数のネストをいれるにも「if(c5="","",vlookup(v5,b5:r10,2,fasle)」みたくやってみましたが、c5までは取り出せても、 d5,e5,f5・・・と右にずらしていく関数式が思い当たりません。 (2)種類、数量データ入力されている全てのセルの横に(1.2.3.4.5.6.7.8.9.・・・)と数字をいれて検索列をつくり、vlookupとmatch関数の 組み合わせも試しましたが、vlookup関数の性質上、複数列に検索値(「vlookup(検索値,範囲,列番号,検索の型)」)が存在しているとこれも出来ず。 説明が不十分な点もあると思いますが、よろしくお願いいたします。もし、VBAでなければ難しいとのことでしたら、どのようなVBAを組めばいいかもお願いいたします。

  • Excel:条件付き文字列の結合方法

    Excel本当の初心者です。ヘルプなど使って、自分なりにがんばって 考えたのですが、やりたいことがどうしてもできず、お力を貸して ください! やりたいのは、下記の通りです。 Sheet1のような表があります。カテゴリー毎にID が 付いていて、表は20,000行位あります。 同じID(カテゴリー)のものは、C列の商品名を”、”で 結合して、1行にまとめたいのです。 Sheet2のような結果を得たいのです。 Sheet1 A列     B列     C列 ID      カテゴリー  商品名 12345    くだもの   りんご 12345    くだもの   みかん 12345    くだもの   イチゴ 67891    野菜     いんげん 23456    お菓子    チョコ 23456    お菓子    お煎餅 Sheet2 A列     B列     C列 ID      カテゴリー  商品名 12345    くだもの   りんご、みかん、イチゴ 67891    野菜     いんげん 23456    お菓子    チョコ、お煎餅 Sheet1のA列とB列を「フィルタの重複レコードを無視する」を したものをSheet2のA列とB列に貼り付けて、ISNUMBERとFIND を使ってと思ったのですが、Sheet2のC列で商品名の結合を"、 " で結合しようと思ったのですが、重複IDがない物もあれば、 10個も20個もあるものもあるので、CONCATENATEではできなくて... どんな関数を使えば良いのでしょうか? それと、事前にSheet1にフィルタをかけてSheet2に貼り付けたり ぜずに、Sheet2のA列とB列とも関数でやる事はできるのでしょうか? あともうひとつ、教えてただきたい事があります。 いつも一番上の行に式を入れて、下にドラッグすることで 下の行にコピーしているのですが、20,000行もあるので この方法だと大変なので、行数をしていして、コピーする 方法とかあれば教えてください! 一度にいくつもすみませんが、教えてくださると 嬉しいです。

  • csvのデータを複数条件で値を抽出したい

    A列~E列のようなCSVのデータがあり、行に回答者氏名、列に質問番号(Q1~Q3)としてH列~K列のようにそれぞれの質問の回答が表示されるような表を作りたいと思っています。 回答者は500名くらいあるためコピペでは時間がかかりすぎるので関数で出来ないかと試してみているのですが上手くいきません。 どのような関数を使用すれば良いでしょうか?

  • エクセルで、2つの条件に一致する値を返す方法 教えてください

    A B C D E F 1 日付 分数 2 Aさん Bさん Cさん Aさん Bさん Cさん 3 3/2 2/12 3/15 9 10 10 4 3/4 2/12 3/15 2 3 3 5 3/4 2/12 3/15 30 30 30 6 3/3 2/12 3/15 1 1 2 7 3/4 2/12 3/15 3 5 4 8 3/4 2/12 3/15 29 29 29 上記の表より 列A,B,Cは日付 列D,E,Fは分数です ・3行目のG列にD3:F3の範囲で最小値であり、A3:C3の範囲で最新の日付(最大値)である時の 日付を表示したい。 G3のセルを下に引っ張り各行ごとに値を表示したいです。 関数(式)を教えてください。

このQ&Aのポイント
  • PX-M5081Fを利用しています。ADFからコピーしようとしても自動でコピーが始まりません。コピーボタンを押してコピーしようとすると、紙詰まりのエラーが毎回表示されますが、何も詰まっていません。
  • 両面コピーをするのにとても不便なので、解決方法を知りたいです。
  • EPSON社製品についての質問です。
回答を見る

専門家に質問してみよう