• ベストアンサー

【Excel】条件を満たすデータを全て取り出す

Excel2003を使用しています。 ある書類を作成するための下準備として、条件を満たすデータを全て取り出したいのですが、うまくいかないので、教えてください。 例えば、G7に入力されているデータがC列に入力されているデータと一致したら(必ず1個以上あります)、一致するD列とE列のデータをそれぞれ別セルに全て取り出したいのですが、どのようにすればいいでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.6

お約束のコードです。 実際にはもっと汎用性に富んだコードを書くべきなのですが 時間がないので今回こっきりコードということで。。。 が、セル位置などの変更はちょこっと修正すればできますね。 '---------------------------------------------------------  Sub Test()   Dim LastRow As Long  '検査範囲(C列)最終行   Dim myRange As Range  '検査範囲(C列)      Dim R As Long    '検査値(S列)行カウンター   Dim Clm As Integer  '抽出先の列   Dim PutRow As Long  '抽出先の行      Dim FindCell As Range  '検査範囲(C列)でヒットしたセル   Dim FirstAdrs As String '最初にヒットしたセルアドレス    '検査範囲(C列)の確定   LastRow = Range("C65536").End(xlUp).Row   Set myRange = Range(Cells(6, "C"), Cells(LastRow, "C"))    'ぐるぐる開始   For R = 7 To 30        PutRow = 6     Clm = Clm + 1          Set FindCell = myRange.Find(Cells(R, "S"), , xlValues, xlWhole)          If Not (FindCell Is Nothing) Then       FirstAdrs = FindCell.Address          Do       PutRow = PutRow + 1       Cells(PutRow, Clm + 19).Value = Cells(FindCell.Row, "E").Value       Cells(PutRow, Clm + 49).Value = Cells(FindCell.Row, "F").Value              Set FindCell = myRange.FindNext(FindCell)     Loop While Not (FindCell Is Nothing) And FindCell.Address <> FirstAdrs   End If      Next R    End Sub '------------------------------------------------------ 動作確認してありますので、意図しない動作をする場合は 質問者の提示したセル番地などが違うものと考えられます。  

rx-z5815
質問者

お礼

onlyrom さん、こんにちは。 お忙しいところ、回答ありがとうございます。 早速、教えていただいたコードで、マクロを実行してみたところ、うまくいきました! 今回抽出したデータを元に、さらにマクロを使用して、書類を作成することを考えていて、これが解決しないと先に進めなかったので、大変助かりました。 また、機会がありましたら、よろしくお願いします。

その他の回答 (5)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.5

onlyromです。 くどいようですが、も少し補足願います。 実際の表(テーブル)について (1)見出しは、何行目? (2)データの始まり、何行目から? (3)先の質問では、検索値は、G7ひとつでしたが実際は、S7~S30で      先ず、S7でC列を検索      次に、S8でC列を検索      以下、S30まで繰り返す ということですね? (4)S7でヒットしたものが3つ、S8でヒットしたものが2つあった場合      T,Uの2~4行目、続けて5~6行へ抽出と、連続で抽出していいのですね?     (T,Uの一行目は見出しと仮定) 後、これだけ補足いただければ、必ず今日中にコードアップします。   今からちょとお仕事。。。(^^;;;  

rx-z5815
質問者

補足

onlyrom さん、おはようございます。 何度も恐れ入ります。説明不足でスミマセン…。 早速、補足要求の件ですが  (1) 見出しは6行目です。  (2) データの始まりは7行目からです。  (3) おっしゃるとおり、検索値はS7~S30で、S7でC列を検索後、S8、S9…S30まで繰り返します。  (4) データを抽出する場所については、どうしたらいいのか迷っていました。いろいろ考えてみて、この分だけは、前回補足させていただいた内容から下記のように変更させていただきたいのですが…  S7でC列を検索してヒットしたE列のデータは、T7セル以下に抽出  S8でC列を検索してヒットしたE列のデータは、U7セル以下に抽出     :     :  S30でC列を検索してヒットしたE列のデータは、AW7セル以下に抽出 同じく  S7でC列を検索してヒットしたF列のデータは、AX7セル以下に抽出  S8でC列を検索してヒットしたF列のデータは、AY7セル以下に抽出     :     :  S30でC列を検索してヒットしたF列のデータは、CA7セル以下に抽出 というふうに、したいのですが。。。 よろしくお願いします。  

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

ANO,2 onlyromです >VBAでの処理でも、もちろん構いません で、あれば実際に沿ったシートレイアウトアップして 扱うセルも、例えば、ではなくて具体的に。 特に重要なのは、質問でいうと、G7とC列の関係。 表に、G7(G列)は含まれているのかいないのか? >C列に入力されているかどうか検索するデータも複数あるので これから判断すると、G7は表に含まれていなくて(いてもいいが) G7の値を変更しながら、質問の件を実行するということですね? 要するに、G列を頭から検索値として、C列を検査範囲とするわけではなく、 検査値は、あくまでも、G7のみということですね。 それから、ヒットしたら、D,E列をどこに取り出すのか。 等々、具体的に補足願います。   これらが分かると的確な回答が直ぐ寄せられるでしょう。 もちろん、当方もそうする積もりですが。。。  

rx-z5815
質問者

補足

再度の書き込みありがとうございます。 質問文の例えばで書いたものと実際のものは、セルの列が違うだけで、ほぼ同じように書いていました。 実際のセルの位置は、下記のようになっています。  ・検索するデータは、 S7:S30 に入力されています。  ・検索する範囲は、これは質問文と同じくC列です。  ・ヒットしたら、E列、F列をそれぞれT列、U列に取り出せたらと思っています。 よろしくお願いします。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

次の方法は如何でしょうか。 一例ですが、検索範囲をC1:C200として次の方法は数式は如何でしょうか。 数式は、配列数式の為、入力完了時にshift+ctrl+enterキーを同時押下して、そのセルを下方向にコピーして下さい。 D列抽出:=IF(ROW(A1)-1<COUNTIF($C$1:$C$200,$G$7),INDEX($D$1:$D$200,SMALL(IF($C$1:$C$200=$G$7,ROW($C$1:$C$200),99999),ROW(A1))),"") E列抽出:=IF(ROW(A1)-1<COUNTIF($C$1:$C$200,$G$7),INDEX($E$1:$E$200,SMALL(IF($C$1:$C$200=$G$7,ROW($C$1:$C$200),99999),ROW(A1))),"")

rx-z5815
質問者

お礼

回答ありがとうございます。 教えていただいた配列数式で試してみたところ、うまくいきました。 配列数式は以前、別の質問でも回答をいただいたことがあるのですが、なかなか手を出せずにいます。 時間を見つけて勉強したいと思っているのですが。。。 ありがとうございました。

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

>必ず1個以上あります フィルターオプションで、G7に該当する値のデータを全て抽出して DE列をどこかのセル(これ書いてないので分からない)にコピペ。 では拙いのですか? 質問者はVBAも少々弄れますよね。 VBAでの処理は考えていませんか。

rx-z5815
質問者

お礼

回答ありがとうございます。 フィルタオプションも考えたのですが、C列に入力されているかどうか検索するデータも複数あるので、回答者様のお言葉を借りて言うならば、ちょっと拙いのです。 VBAでの処理でも、もちろん構いません。何か良い方法があれば、教えていただけると助かります。

  • suekun
  • ベストアンサー率25% (369/1454)
回答No.1

VLOOKUPの事を考えてよいでしょうか? 対応表があってその右端を(質問の場合はC列)検索して G7セルと同じ値を見つけた場合は、C列の該当セルの右隣の D列E列の値を拾ってくる。 C D E F G H 1 あ a た 2 い b ち 3 う c つ 4 え d て 5 お e と 6 か f な う 7 き g に 8 く h ぬ 9 け i ね とあったとして、 値の欲しいセルに =IF(ISERROR(VLOOKUP($G$7,$C$1:$E$9,COLUMN(B1),0)),"",VLOOKUP($G$7,$C$1:$E$9,COLUMN(B1),0)) と入力して右方向にフィルコピーして下さい。

rx-z5815
質問者

補足

回答ありがとうございます。 VLOOKUPだと、一致するデータがひとつのときはいいのですが、一致するデータは必ず1個以上で、複数のときもあるというより、複数のときがほとんどなのです。 全ての一致するデータを拾う、何か良い方法はないでしょうか?

関連するQ&A

  • 【Excel】日付を条件のひとつに指定してデータ集計

    Excel2003を使用しています。 Sheet1   A    B         C 1 4/1  (株)Excel    \100 2 4/1  ACCESS    \300 3 4/1  Excel(株)    \200 4 4/2  Word       \150 5 4/2  Excel       \100 6 4/3  ACCESS(有)  \200 7 4/3  Excel       \100 7 4/3  (有)ACCESS  \100 が入力されている表があります。 Sheet2に   A    B    C 1 4/2  合計値 個数 2 4/3  合計値 個数 Sheet2のA1セルに日付(仮に4/2とします)を入力したら、Sheet1にある条件に一致する日付を検索し、尚且つ、部分一致する文字列(仮にExcelとします)を検索し、両条件に一致したC列の合計を Sheet2のB1セルに表示させる様にしたいのですが、どのようにすればいいでしょうか? 又、上記同様で Sheet2のA1セルに日付(仮に4/3とします)を入力したら、Sheet1にある条件に一致する日付を検索し、尚且つ、部分一致する文字列(仮にACCESSとします)を検索し、両条件に一致した個数を Sheet2のC2セルに表示させる様にしたいのですが、どのようにすればいいでしょうか? 関数で試してみたのですが、うまくいかなかったので、質問させていただきました。 よろしくお願いします。

  • excel2000 で条件に一致するセル検索

    二つの条件に一致するセルを検索する方法について、ご指導お願いします。 C列 NO D列 作業日 E列 作業NO とあります。 D2セル と E2セルに検索したい、作業日と、作業NOを入力して、G2セルに 該当するNOを、写真のように表示させたいです。 検索条件といたしまして、作業NOは完全一致ですが、作業日は検索条件日から6日以内にあるかどうかです。また、作業日と作業NOの並び昇順、降順ではなくランダムです。 G2セルにどういった関数を入れればいいか、アドバイスを頂ければ幸いです。 よろしくお願いいたします。

  • Excel2003、配列から、複数の条件一致する行のデータを取り出す方

    Excel2003、配列から、複数の条件一致する行のデータを取り出す方法 配列は最大で10行、10列程度ですが、このデータはリアルタイム(0.5秒間隔)で更新されますので、 分類等はできません。 A列のデータがZ1のセルのデータと一致し、かつ、B列は、特定の”文字列”と一致し、かつ、C列は数量で、0より大きい(負のデータは無いが、""はあり得る)という条件に合致した行があったら、その行のD列の値をZ2のセルに格納したい。 条件に合致する行は複数あり得るが、そのときは最初に条件が合致した行のデータが必要。 いくつかの関数を調べましたが、つまづいています。

  • 【Excel】ある条件を満たすまでの件数を調べるには?

    Excel2003を使用しています。 ある書類作成で、合計金額の70%に達するまでには、何件目まで(何行目まで)記載すればよいかを調べるには、どのようにしたらよいでしょうか? データは、A列~K列の6行目以下に入力されています。 金額はG列に、降順に並んでいて、合計金額をH1セル、H1セルの70%の数値をH2セルに出しています。 A列には、6行目以下に連番がふってあり(A6=1,A7=2,A8=3,…)、H2セルの値(合計金額の70%)を超えた行のA列に入力されている値を取得できないかなと思っているのですが…。 うまく説明できなくて申し訳ないのですが、よろしくお願いします。

  • 【Excel VBA】複数の条件を満たすデータを行削除

    Excel2003を使用しています。 ある表の中のデータで、次の4つの条件を満たすデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか?  E列…データが入力されている  F列…空白  G列…空白  H列…空白 よろしくお願いします。

  • Excel_VB:条件を入れてデータ抽出

    別シートにあるデータベースを 特定のセルに抽出条件となるwordを入力すると別シートから情報を返すマクロを作成しています。 簡易的なコードがございましたらご教授ください。 何卒よろしくお願いいたします。 詳細 ▼検索条件の単語を入力するセル  1~3を複数条件で抽出   1_バンド名(B6) 2_曲名(B8) 3_アルバム名(B10) ▼別シートのデータベース 1行目はタイトルを入力しています。 バンド名(A列) 曲名(B列) アルバム (C列)    時間(D列) ジャンル(E列) メディア(F列) 備考(G列) ▼情報を返すセル バンド名(F15) 曲名(G15) アルバム (H15)    時間(I列) ジャンル(J15) メディア(K15) 備考(L15)

  • 【Excel VBA】データを集計する数式を入力するマクロ

    Excel2003を使用しています。   A列   B列   C列   D列   E列   F列 1      9/1                    20000 2      9/2              1000 3      9/10              5000 : : 10           9月計        ※1    ※2    11 12 13     10/1                   10000 14     10/10             2000 15     10/14                   4000 : : 20           10月計       ※3    ※4 上記のデータでいうと、 ※1(E10セル) =SUM(E1:E9) ※2(F10セル) =SUM(F1:F9) ※3(E20セル) =SUM(E13:E19) ※4(F20セル) =SUM(F13:F19) という内容の数式を入力するマクロを作成したく、数式を入力したいセルをアクティブにして、ボタン等に登録したマクロを実行すると数式が入力されるようにしたいと考えていますが、その際、集計範囲の最下行は、アクティブセルの1行上までになりますが、最上行をどのようにして取得すればよいかがわかりません。 (実際のデータは、もっと行数も入力されているデータ数も多いです) また、他にもこんな方法があるとか、こうしたほうが簡単とかあれば、教えていただけると勉強にもなりますので助かります。 うまく説明できなくて申し訳ありませんが、よろしくお願いします。

  • 【EXCEL】条件が一致したら、入力が可能になる。

    (画像を添付しています。) 「条件が一致したら、入力が可能になる」方法を探しています。 【バージョン EXCEL2010】 -- 例) 条件選択セル:B2セル ⇒ ここで条件『A』『B』『C』のいずれかを選択します。 入力欄セル:D3セル ⇒ 条件選択セルで『A』を選んでいた場合のみ入力可能       E3セル ⇒ 条件選択セルで『B』を選んでいた場合のみ入力可能       F3セル ⇒ 条件選択セルで『C』を選んでいた場合のみ入力可能 -- このようなことを行ないたいです。 ご教授お願いいたします。

  • Excel2000 エクセル 範囲内で条件を満たす最小の列を返す方法

    Excel2000 エクセル 範囲内で条件を満たす最小の列を返す方法 Excelで関数を使って「ある範囲内で条件を満たす最小の列を返す」 というセルの作成方法を教えていただけませんか? 例えばA1からJ1の1行に 0 0 0 1 2 1 3 6 0 0 という数値が入力されているとします。 この10個のセルを左から順に「セル内の値>0となる」という条件に合うか調べた場合、 何列目に条件を初めて満たす事ができるかを返すセルを作りたいのです。 この場合「セル内の値>0」の条件を満たす最小の列のセルは、 「1>0」となるセルD1となり、左から4列目なので 「4」 を返したい。 出来れば「ある範囲内で条件を満たす最大の列を返すセル」の作成法も教えていただけませんか? (1)の例の場合「セル内の数値>0」の条件を満たす最大の列のセルは、 「6>0」となるセルH1となり、左から8列目なので「8」を返すようなセルを作りたい。 複数のシートにデータがあり、それらのシートに一括でこのセルを作りたいため、 補助となる行を入れるのはよいのですが、 行列を入れ替えるような操作がいらない方法が知りたいです。 どうかよろしくお願いします。

  • EXCEL関数で条件を満たす個数

    EXCEL関数で条件を満たす個数をカウントしたいのですが、どのようにしたらよいのでしょうか?    A列 B列 C列 D列 E列 F列 G列 H列 ----------------------------------------------------------- 1行    目標 1日 2日 3日 4日 5日   目標達成日数 ----------------------------------------------------------- 2行 山田  5  2  4  1  6  3    1 ----------------------------------------------------------- 3行 佐藤  3  1  2  6  5  4    3 ----------------------------------------------------------- 4行 岩本  4  6  2  1  2  5    2 上記のような表を作成し、目標を達成している日数をカウント するには、どのような関数を使用すれば良いのでしょうか? (H列)に目標達成日数を表示したいです。 山田さんの場合、 目標(セルB2)5以上を満たす日は、4日(セルF2)の6だけなので 目標達成日数(セルH2)は1となります。 佐藤さんの場合、 目標(セルB3)3以上を満たす日は、 3日(セルE3)の6と 4日(セルF3)の5と 5日(セルG3)の4と 目標達成日数(セルH3)は3となります。

専門家に質問してみよう