• ベストアンサー

エクセルで複数条件に一致する値を抽出する

お世話になります。 エクセル2007で次のように単語のテストを作成したいのですが,どういう設定をすれば可能でしょうか。 データというシートにはA列に出題テキスト名が上から入力されています。B列には対象学年が入っています。C列にはテキストのページ数が入っています。D列には英単語が入っています。E列には日本語訳が入っています。 問題作成,というシートのA1に「テキスト名」B1に「学年」C1に「開始ページ」D1に「終了ページ」が入力されており,A2からD2にそれぞれ,テキスト名などを入力するようになっています。その横に「問題作成」というボタン(開発タブのなかにあるものを使用)を配置し,このボタンをクリックすると(どんなマクロを組めばいいのでしょうか),A3からB3以下に「データ」というシートの中から,条件に合致する英単語と日本語訳が抽出される,ということをしたいのです。 エクセルの関数はよく使いますし,入力規則も条件付き書式も理解しています。しかし,ここまで複雑な作業は初めてなので,いろいろと試しているのですが,まったく光が見えてきません。 何か説明不足な点がございましたら,補足いたしますので,ご教授,何卒よろしくお願いいたします。

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

  • ベストアンサー
  • mimeu
  • ベストアンサー率49% (39/79)
回答No.4

> マクロを組むにはまず,どこから手をつければいいでしょうか。 基本的には、Excel VBA の参考書を1~2冊お買いになることです。 (たいてい内容のワリにバカ高いですが、しかたありません、授業料です。) ともあれ、簡単に説明いたします。 (1) まず普通にこのブックを開きます。    (仮に ABCD.XLS という名だとします) (2) [Alt] + [F11] キーを押します。    → VBAの編集画面が表示されます。      タイトルバーには 『Microsoft Visual Basic -』などと書かれています。 (3) 画面左に プロジェクトエクスプローラー といタテ長の窓がありますから   その中の VBAProject(ABCD.XLS) を探します。   更にその中に、『Sheet? (問題作成)』 がありますから、それを選択します。   ? は数字の 1 とか 2 とかで、『問題作成』と名前を変える前の名前です。   これでタイトルバーは、   『Microsoft Visual Basic -ABCD.XLS \ [Sheet1 (コード)]』などとなります。 (4) とともに画面右が真っ白になっていると思います。ここにプログラムを書きます。   まずその真っ白な上に、多分 『(General)』 と表示したテキストボックスがありますから、   その右の▼を押すと『CommandButton1』, 『Worksheet』とあると思います。   あなたは『問題作成』という名前でボタンを作ったとお思いでしょうが、   実際にはこんな名前になっているかもしれません。   それを選択します。 (5) そうすると、その右のテキストボックスの内容が変わるはずですから   その右の▼を押し、リストの中から Click を選択します。   すると、真っ白な画面に   Private Sub CommandButton1_Click ()   End Sub   と出ます。中味のないプログラムです。   そこへ私のプログラムの 中 味 部 分 を貼り付ければ、OKです。   Private Sub ... と End Sub の行が二重にならないように、という意味です。 これで、Excel画面に戻って、ボタンを押せば、実行されるハズです。

mine2309
質問者

お礼

何度もありがとうございます。 実は今日の昼間VBAの本を購入してきたばかりなんです。 「達人が教えるExcelVBAテクニック207」というものです。 達人だからすごいことができるだろう,と思い購入したのですが,内容が達人過ぎてシロウトには理解不能でした(笑) でもmimeuさんに教えていただいたやり方はわかりやすいので,挑戦してみたいと思います。うまくいくかどうか,不安ではありますが。 本当に何度もありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 参考になるかどうか判りませんが・・・ 関数でやってみました。 「問題作成」というボタンではなく、Sheet1に全ての条件を入力した段階で英語と日本語が表示されるようになります。 ↓の画像で右側がSheet2で質問の「データ」Sheetになり、左側がSheet1で「問題作成」というSheetになります。 Sheet2に作業用の列を設けています。 Sheet2のF2セルに =IF(AND(A2=Sheet1!$A$2,B2=Sheet1!$B$2,AND(C2>=Sheet1!$C$2,C2<=Sheet1!$D$2)),ROW(A1),"") という数式を入れオートフィルでずぃ~~~!っと下へコピーします。 そして、Sheet1のA5セルに =IF(COUNT(Sheet2!$F$2:$F$1000)<ROW(A1),"",INDEX(Sheet2!D$2:D$1000,SMALL(Sheet2!$F$2:$F$1000,ROW(A1)))) という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 尚、数式はSheet2の1000行目まで対応できるようにしていますが データ量によって範囲指定の領域はアレンジしてみてください。 以上、参考になれば良いのですが 的外れなら読み流してくださいね。m(__)m

mine2309
質問者

お礼

ありがとうございます。 マクロを使わずに,関数のみで引っ張ってくるんですね。結構関数は使っているつもりでしたが,まだまだ全然勉強不足でした。試しにやってみたところ,いい感じでいきました。 もしマクロを使うやり方がうまくいかない場合は,tom04さんのやり方で今回は乗り切ろうかと思っています。 ありがとうございました。

  • mimeu
  • ベストアンサー率49% (39/79)
回答No.2

VBAだけでやっても簡単ですよ。 ボタンの名前が 『btn問題作成』 だという前提です。 行数は長いけど、心を静めて読んでいただくと とっても単純な内容だとおわかりになると思います。 Private Sub btn問題作成_Click()   Const 行頭 = 2 ' ★★★★★ データの先頭行、違ってたら直してね ★★★★★   Dim データ As Worksheet, 問題作成 As Worksheet, 行1 As Long, 行2 As Long, 行末 As Long   Dim 出題テキスト As String, 出題学年 As Integer, 開始頁 As Integer, 終了頁 As Integer   Set データ = Worksheets("データ")   Set 問題作成 = Worksheets("問題作成")   出題テキスト = 問題作成.Range("A2")   出題学年 = 問題作成.Range("B2")   開始頁 = 問題作成.Range("C2")   終了頁 = 問題作成.Range("D2")   行末 = データ.Range("A65536").End(xlUp).Row   行2 = 5 ' ★★★★★ 抽出先の先頭行、違ってたら直してね ★★★★★      ' 実際の処理はここから   For 行1 = 行頭 To 行末     If データ.Range("A" & 行1) = 出題テキスト Then       If データ.Range("B" & 行1) = 出題学年 Then         If データ.Range("C" & 行1) >= 開始頁 Then           If データ.Range("C" & 行1) <= 終了頁 Then             データ.Range("D" & 行1 & ":E" & 行1).Copy 問題作成.Range("A" & 行2)             行2 = 行2 + 1           End If         End If       End If     End If   Next 行1 End Sub

mine2309
質問者

補足

ご回答ありがとうございます。 教えていただいた通りにVBAでやろうと思ったのですが,申し訳ありません。質問では「マクロ」なんてかっこいいことを書いてしまいましたが,当方実はマクロの超初心者なんです。触ったことはほとんどゼロです。 まず,教えていただいたものをどこに入力するのか,というところからつまずいてしまいました。でも添付してくださった画像を見ると,見事に私が望んでいる状態になっているので,なんとか達成したいのですが。 こんな状態ですがマクロを組むにはまず,どこから手をつければいいでしょうか。 お忙しいところ本当にもうしわけありません。こんな能力しかありませんが,なんとかしたいと思っておりますので,ご協力していただけると大変ありがたいです。よろしくお願いします。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

「フィルタオプションの設定」を利用すれば結構簡単にできます。 事前準備として E1に「テキスト名」F1に「学年」G1に「ページ」H1に「ページ」を入力 ※データシートの1行目の項目名に合わせてください。 E2="=*"&A2&"*" F2="=B2 G2=IF(C2="",">0",">="&C2) H2=IF(D2<C2,C2,"<="&D2) とします。 「ツール」「マクロ」「マクロの記録」 ※これで標準モジュールにマクロが自動で作られます。 ------------------------- 「データ」「フィルタ」「フィルタオプションの設定」 抽出先___:指定した範囲 リスト範囲_:=データ!$A:$E 抽出条件範囲:=問題作成!$E$1:$H$2 抽出範囲__:=問題作成!$A$4 でOKを押す。 ------------------------- マクロの記録の終了ボタンを押します。 これで4行目に項目名、5行目以降にデータシートの条件に一致した内容が表示されます。 「挿入」「図形」でボタンにする図形を選択。 テキストの挿入で"問題作成"と入力 図形を右クリックして"マクロの登録"で↑で作ったマクロを選択してください。

mine2309
質問者

補足

ご回答ありがとうございます。 教えていただいた通りに入力してみたのですが,F2に="=B2を入力するとエラーが出てしまいます。自動修正してその後も進めてみたのですが,最終的に「問題作成」ボタンを押すと,「データ」のシートの1行目にある「テキスト名」「学年」などが「問題作成」シートのA4の行に返されてしまいます。 何か設定がまずいのでしょうか。ちなみにセキュリティの設定では,マクロが使えるようにしてあります。 お手数ですが,もう一度ご回答をお願いできますでしょうか。 お忙しいところ,本当にすみません。よろしくお願いします。

関連するQ&A

  • エクセルでの該当する条件に一致する値の抽出

    エクセル初心者で困っています。 どなたかお助け下さい。 以下の様な表があります。 A   B  C  D   E  F   G 1商品名 入荷数 消費1 消費2 性能1 性能2 性能3 2○○  2   1   2   △△  ◆◆  □□   3××  2   1   2   □□  △△  ◆◆ 4○○  2   1   2   ●●  □□  ◎◎ この表を基に、別シートを以下の様に作成して A   B  C  D   E  F   G 1性能 【◆◆】 2 3商品名 入荷数 消費1 消費2 性能1 性能2 性能3 4○○  2   1   2   △△  ◆◆  □□   5××  2   1   2   □□  △△  ◆◆ セルB1に性能名を入力して、入力した値と 基となるシートのEFGの列から一致する値があった場合 該当する行をそのまま表示するような式を作りたいのですが可能でしょうか? 分かりづらい質問で申し訳ありませんが ご回答いただけるとありがたいです。

  • エクセル2つのセルを1つのデータとして一致

    エクセル初心者です。 (1)シートのA列には店舗名(A列には同じ店舗名が複数あります)とB列には数値を入力しています。(2)のシートには(1)シート同様のデータが入力されていますがCとD列に値があります。 (1)シートの同行内のAとB列を1つのデータとして(2)のシートのAとB列が一致したらCとD列の値を(1)シートに返す事は可能でしょうか? (1)シート A列    B列   C列   D列 ヤマダ   25 スズキ   10 ヤマダ   100 (2)シート A列    B列   C列   D列 ヤマダ   25    5    英 スズキ   10    6    独 ヤマダ   100    6 仏 さくら  20    8 英 つたない説明で申し訳ありません。

  • エクセル 複数条件一致したセルの抽出方法について

    はじめまして。 エクセルの複数条件で一致するセルの抽出方法の質問が幾つかありましたので 参考に試してみましたが上手く計算することができなくて、投稿致しました。 問題が解決すると非常に助かりますので、教えて頂けますでしょうか。 質問内容 エクセル2007を使用しております。 同じ商品を複数社で購入する場合、単価が異なります。 購入先と商品名で一致した場合に単価が参照されるようにしたいです 2つのシート使用しており、1つは■データベースシート、1つは●入力シートとなってます。 ■データベースシートの項目は A列    B列   C列   D列   E列    F列 購入先  〔※〕  〔※〕  品名   〔※〕   単価 AA社             みかん       1,000 BB社            みかん       1,500 CC社            みかん        700 CC社             いちご        5,000 DD社              いちご        3,500 〔※〕B・C・E列にも項目がありますが、質問(単価参照)とは関連がありません。 この項目は他のデータと使うことがありますので、削除や他の列に移動をしない方法が希望です。 ●入力シートの項目も同じです。 A列    B列   C列    D列    E列     F列 購入先  〔※〕  〔※〕   品名    〔※〕    単価 【 (1) 】           【 (2) 】          《 (3) 》 (3)に関数を入力されるように組みたいです。(1)と(2)を入力すると ■データベースシートの「F列」の単価が参照されるイメージです。 分かり難い質問で申し訳ありません。お知恵を頂けますと助かりますので 何卒宜しくお願い致します。 以上

  • エクセル 複数の条件を抽出

    エクセルで複数の条件を抽出する方法について教えてください。 sheet2には以下の表があります。 A列  商品名1 B列  商品名2 C列  評価1 D列  評価2 sheet1には複数のデータがあり、そのデータを使って商品名と評価を出しています。 (商品名は手入力して、評価は関数を使って数値を出しています。) ここから、評価1がある値以上かつ評価2がある値以上の商品名1と商品名2をsheet3に抽出したいのです。(実際にやりたいのは、評価1が2%以上かつ評価2が0.9以上という条件です。) sheet3に出したいのは見やすいと思ったからで、どうしてもというわけではありません。 商品名が分かれているのはsheet2で作業がしやすいように分けています。必要であれば統合します。 評価1は書式設定で%表記にしています。 一応自分なりに調べてはみたものの、全くの初心者な為わかりませんでした。 初心者でもわかるように教えていただければありがたいです。

  • エクセルで3つの条件で返す値を変えたい

    エクセルの1シート目 B列にメールアドレス エクセルの2シート目 A列に「○」または空欄 B列にメールアドレス のブックがあります。 エクセルの1シート目の A列に 2シート目B列に同じメールアドレスがあり、その行のA列が「○」の場合・・・・「○」を表示 2シート目B列に同じメールアドレスがあり、その行のA列が「空白」の場合・・・「△」を表示 2シート目B列に同じメールアドレスがない・・・「×」を表示 させたいのです。 =IF(COUNTIF(2シート名!B:B,1シート目!B1)>=1,"○","×") をいれたんですが これだと ○と×しか出ません。 なんとか値を3つ出せるようにできないでしょうか? よろしくお願いいたします。

  • Excelで2つの条件が一致したデータの抽出

    Excelで2つの条件が一致したデータの抽出 こんにちわ。 タイトルの通り、Excelで2つの条件が一致したデータの抽出作業を行っています。 Sheet1にデータがあり、以下のような構成なっています。 A列    B列    C列 日付   社員名   売上金 6月1日 鈴木     3万円 6月1日 今井     2万円 6月2日 川口     10万円 6月3日 鈴木     4万円 6月3日 野口     1万円 6月4日 鈴木     3万円 6月7日 佐藤     6万円 6月7日 今井     2万円 6月7日 黒木     7万円 6月9日 野口     3万円 A列の日付は不連続かつ同一日付のものもあります。 Sheet2に以下のフォーマットを作成してあります。 1行目:B1セルから連続する日付(6/1~6/30まで) A列:A2から社員名(社員名は各セルに固定) 6月1日 6月2日 6月3日 6月4日 6月5日 ・・・ 鈴木 佐藤 今井 川口 野口 黒木 Sheet2のセルに、Sheet1の表の日付と社員名が一致した売上金のデータを反映させたいのです。 そこで例えばSheet2のB2セルには以下の関数を入れました。 B2=IF(ISNA(MATCH($A$2:$A$9&$B$1:$N$1,INDEX(Sheet1!$C$2:$C$24&Sheet1!$A$2:$A$24,))),"",INDEX(Sheet1!$D$2:$D$24,MATCH($A$2:$A$9&$B$1:$N$1,INDEX(Sheet1!$C$2:$C$24&Sheet1!$A$2:$A$24,),0))) この関数を入れると、該当するところには売上金のデータが反映されるものの、それ以外のセルには全て#N/Aが表示されてしまいます。 この#N/Aを表示させないようにするには、関数をどのようにすればいいのでしょうか? エクセル初心者なので、分かりやすくご教授願えたら…と思います。 よろしくお願いいたします。 使用OS:XP  使用ソフト:Office2000 Pro.

  • Excel 条件に一致する日付の求め方について

    こんにちは!初めて質問します。 Excel関数の使い方がわからずに困っています。 売上と在庫管理をそれぞれ別シートに入力しています。 売上が出た場合、在庫管理シートに売上日が表示されるようにしたいのです。 シートは、このような形で、それぞれデータを入力しています。 売上表シート A列  B列    C列      D列 日付  顧客名  商品コード  売上金額 在庫管理シート A列   B列     C列    D列    E列 入荷日 商品コード  商品名  売上日  売上金額 商品コードが一致する売上表シートの日付を、在庫管理シートの売上日に表示させたいのですが、 上手くいきません。 売上金額はSUMIF関数で処理することができました。 Excelに関する知識も乏しく、非常に困っています。 なにぶん初めての質問のために質問内容も的を得ず、わかりづらいかもしれませんが、 どなたかお分かりになる方、是非ご教示くださいませ。

  • EXCELで2つ条件で1つが部分一致のとき

    Excelの2003バージョンです。 現在使用しているファイル名「会社」シート名「支社」のセルE12に 同じシート上のD12(同じ行ですね)と ファイル名「埼玉」シート名「データ」のA列の中の値と一致(完全一致)して なおかつ、シート名「支社」のF3の値(例・後1、後2)とシート名「データ」の C列の値(例・後1 第23号)と部分一致をした時に 使用中シート「支社」のE12に●、していない時は空白にしたいのです。 ファイル「会社」シート名「支社」 行数 --A列----B列----C列-----D列----E列----F列---- 1                             11223344  (ここに関数)  後1 ファイル「埼玉」シート名「データ」 行数 --A列----B列----C列-----D列----E列----F列---- 10   11223344         後1 第23号  11   11223344         一般会社 第44号  のような場合はE1に●になるようにしたいのです。 それ以外は空白で。 あまり詳しくないので、よろしくお願いします。

  • エクセルで条件1つで、複数の値を抽出することできますか?

    加工作業の日報をエクセルでつけているのですが、品名と、それに使う資材をあるシートにマスターテーブルとして登録してあるのを前提に、日報のシートで、以下の作業を自動的にでるようにできますでしょうか? ★マスターシート:   A   B 品名   資材名  ←項目名 FD    シール FD    FDケース FD    FD本体 FD    箱 CD-R   シール CD-R   CDケース CD-R   CD本体   ・     ・ ・     ・ ★日報シート:   A   B  FD   シール   ←例えば、このA1にFDと入力すると、      FDケース    B1~B4に資材が出る      FD本体     A5にCD-Rと入れると、B5~B7に      箱       その資材が出る いろいろ検索してみたのですが、知りたいことを見つけることができなかったので、質問します。 関数でできれば一番良いのですが、VBAでもかまいません。 どうかよろしくお願いします。

  • エクセルで一覧から値を検索して抽出

    エクセルで一覧から値を検索して抽出 エクセル初心者です まる一日がんばりましたがギブアップです。 (今日の成果ゼロで上司の目が痛いです。。) 下のようなシートが2つあり、 シート2[A2からA51]の売上ランキングから シート1[B2からCX9000]を検索して →商品名をシート2のB2からB51に表示させたいと思っています ※本来ならばVBAですべき計算かもしれませんが関数で教えていただけるとうれしいです 何卒よろしくお願いいたします (シート1) A列 B列   C列   D列 時間 商品あ 商品い 商品う・・ 0時 1098 7232 1211 1時 3460 5656 4342 2時 9843 9843 9322 3時 9843 9977 2323 4時 1111 3232 2323 5時 4783 8045 3874 ・・ ※商品名は約1,000個 ※時間は日付含め約8,000行 (シート2) A列     B列 ランキング  商品名 9977  (  ) 9843  (  ) 9322  (  ) 8425  (  ) 8045  (  ) ・・ ※ランキングは50位まで

専門家に質問してみよう