• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA 複数の条件を含む対象を抜き出す。)

エクセルVBAで複数条件のデータを抜き出す方法

このQ&Aのポイント
  • エクセルVBAを使用して、特定の条件を満たすデータを抜き出す方法についての質問です。
  • 具体的には、部活動が「野球」であり、クラブが「囲碁」である生徒の学籍番号を別のシートにリスト化する方法が知りたいです。
  • 現在、find nextなどの方法を試してみましたが、うまく実装できていません。助けてください!

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

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

こんばんは! Sheet1のA列(学籍番号)のみをSheet2のB3セル以降に表示すれば良いわけですね? 一例です。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i, k As Long Dim ws As Worksheet Set ws = Worksheets(2) k = 2 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 4) = "野球" And Cells(i, 5) = "囲碁" Then k = k + 1 ws.Cells(k, 2) = Cells(i, 1) End If Next i End Sub こんな感じではどうでしょうか?m(_ _)m

dio2000
質問者

お礼

有難うございます。 無事成功しました。こんなに早く、しかも短い構文で作れるとは… まだまだ、勉強不足でした。 本当に有難うございました。

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

その他の回答 (2)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

Sheet2のB2に学籍番号と入力されている事が前提です。 Sub Macro1() Set ws01 = Worksheets("Sheet1") Set ws02 = Worksheets("Sheet2") If ws02.Range("B3") <> "" Then ws02.Range("B3:B" & ws02.Cells(Rows.Count, 2).End(xlUp).Row).ClearContents End If For i = 2 To ws01.Cells(Rows.Count, 1).End(xlUp).Row If ws01.Range("D" & i) = "野球" And ws01.Range("E" & i) = "囲碁" Then ws02.Range("B" & ws02.Cells(Rows.Count, 2).End(xlUp).Offset(1).Row) = ws01.Range("A" & i) End If Next i End Sub

dio2000
質問者

お礼

ありがとうございます!! さっそく試してみます!

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

今回質問された動作だとFind関数を使用しなくても実現できます。 以下にご質問された内容の動作をするソースコードを貼り付けたので試してみてください。 Sheet2のB3から下の順にリスト化されているはずです。 Public Sub test() Dim strSerch1 As String Dim strSerch2 As String Dim lngLastRow As Long Dim i As Long, j As Long '検索する文字を以下の二つの変数に代入 strSerch1 = "野球" strSerch2 = "囲碁" 'Sheet2にリスト化するための変数 '最初に入れるのが3行目なのでjに3を代入 j = 3 With Worksheets("Sheet1") '.Cells(.Rows.Count, 1).End(xlUp).Rowで最後の行がどこなのか調べて 'lngLastRow変数に代入する。 '今回の場合は五行目が最後なので5が格納されます。 lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row For i = lngLastRow To 2 Step -1 'ここで四列目と五列目を同時に比較して、両方とも同じならSheet2に学籍番号を入れる処理に移る。 If .Cells(i, 4).Value = strSerch1 And .Cells(i, 5).Value = strSerch2 Then Worksheets("Sheet2").Cells(j, 2).Value = .Cells(i, 1).Value j = j + 1 End If Next i End With End Sub

dio2000
質問者

お礼

1つ1つの工程が何を意味しているのか分かりやすく、他のことにも代用できそうです! ありがとうございました! さっそく試してみます!

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

関連するQ&A

  • ExcelVBAが25項目目で終了する。

    以前に以下の様な質問を致しました。    ↓ 下記の様なデータがあるときに、部活が「野球」でかつクラブは「囲碁」に入っている生徒の学籍番号を別のシート(Sheet2)のB3から下に順にリスト化するマクロがどうしても出来なくて困っています。 <sheet1>    A      B      C       D    E 1 学籍番号 学年    名前     部活   クラブ 2 2222222   1   山田 太郎  野球   囲碁 3 9854923   2   吉田 次郎  剣道   絵画   4 1111111   3   佐藤 三郎  野球   囲碁 5 8888883   1   米山 権蔵  卓球   囲碁 <ご回答いただいた内容> Sub test() Dim i, k As Long Dim ws As Worksheet Set ws = Worksheets(2) k = 2 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 4) = "野球" And Cells(i, 5) = "囲碁" Then k = k + 1 ws.Cells(k, 2) = Cells(i, 1) End If Next i End Sub 上記、マクロを多少編集し、運用してみた結果、項目が25項目目までは正しく反映されるのですが、それ以降のデータは一切反映されないことが判明しました。 構文とにらめっこしても何故25項目目で終了するのかが分からなかったので、もしお分かりになれば教えて頂ければ幸いです。 もし情報が不十分なら、追って私のオリジナルもアップするように致します。

  • エクセルのマクロで全シ-ト複数条件検索

    エクセルで全シートから複数項目で検索をかけ、条件に合う項目の行ごと 新しいシートに抽出結果として表示することは可能なのでしょうか。 初心者なりに考え、無様なコードではありますが、 検索条件が1つであれば、条件にあう行をすべて抽出することはできました。 ですが複数、または列ごと条件として指定することができず、難儀しております。 たとえば Sheet1    A    B    C    D 1      田中太郎   男   穏やか  2      鈴木次郎   女   うっかり 3      山田三郎   女   怒りっぽい 4      佐藤四郎   男   せっかち Sheet2    A    B    C    D 1      伊藤五郎   女   用心深い 2      加藤六郎   男   ずぼら 3      斎藤七郎   女   臆病 4      後藤八郎   男   陽気 Sheet3    A    B    C    D 1      【条件】 2      加藤六郎 3      鈴木次郎 4      山田三郎 5      後藤八郎 マクロ実行後↓ 新しいシート    A    B    C    D 1      加藤六郎   男   ずぼら 2      鈴木次郎   女   うっかり 3      山田三郎   女   怒りっぽい 4      後藤八郎   男   陽気 といった具合にしたいと考えております。 この場合ですと、B列全体を条件としたり、 Sheet3の条件が入力されているセルすべてを検索条件として 渡すことはできるのでしょうか。 実際のシートでは、条件が10個~100個ほどあり、 シートごとに数はばらばらになっております。 どうかわかる方、お力をお貸しください。

  • 【Excel VBA】コピー&ペーストの自動化

    以下のエクセル表があり、同じ日付ごとのデータを自動的に別のシートに移したいです。 例えば、別のシートに、2004/1/1に書かれているデータのみを移す。(シート2参照) それをVBAで書くにはどうすればいいでしょうか。 マクロの記録をするのではなく、この表の日付を増やしたり変えたりしても機能するようにコードを書きたいと思っております。 For LoopとIf thenを使い、A1セルがそれより下のセルの値と異なるまでコピーし続ける、、といった作業をすればよいのでしょうか。 全くの初心者で勉強中です。よろしくお願いいたします。 列行 A B 1 2004/1/1 太郎 2 2004/1/1 次郎 3 2004/1/1 三郎 4 2004/1/1 一郎 5 2004/1/1 五郎 6 2005/3/3 三郎 7 2005/3/3 次郎 8 2005/3/3 太郎 9 2005/3/3 四朗 10 2006/2/2 次郎 11 2006/2/2 一郎 12 2006/2/2 太郎 シート2 2004/1/1 太郎 次郎 三郎 一郎 五郎 シート3 2005/3/3 三郎 次郎 太郎 四朗 シート4 2006/2/2 次郎 一郎 太郎

  • エクセルの同じ名前をカウントする方法

    エクセルの同じ名前をカウントする方法 初歩的な質問ですみません。 山田太郎 田中一郎 鈴木三郎 高橋次郎 鈴木三郎 高橋次郎 鈴木三郎 A1のセルにこういった状態で名前が入力されていた場合に 山田太郎 1 田中一郎 1 鈴木三郎 3 高橋次郎 2 となるように同じ名前がいくつあるかをカウントさせ上記のように表示させたいのですが、 どうしたらいいのでしょうか? (同じシートでも、別のシートでもどちらでも構いません) 至急お答えいただけるとありがたいです。 よろしくお願いします。 

  • Excelの条件書式で複数の条件を指定することは可能でしょうか?

    Excelの条件書式で複数の条件を指定することは可能でしょうか? 下記のように名簿と平均があった時に、名簿の所属クラスの平均より低い項目の背景色を変更したいです。 条件書式で無理な場合はマクロを教えて頂けると助かります。。。 よろしくお願い致します。 名簿 クラス..名前..国語..算数..理科..社会 A.......一郎....50....60....70....80 B.......次郎....40....50....60....70 A.......三郎....10....20....30....40 B.......四郎....45....62....48....90 平均 クラス......国語..算数..理科..社会 A.............60....70....80....75 B.............65....80....70....60

  • 条件にあった複数データを組合わせて別のセルに表示するには?

    例えば、以下のデータがセルに入っていたとして A列には姓 B列には名 A1:鈴木  B1:一郎 A2:鈴木  B2:次郎 A3:鈴木  B3:三郎 A4:佐藤  B3:あきら A5:佐藤  B3:けんた 同じ姓にあてはまるデータの名を、組合わせて別のセルに表示したいのです。 結果イメージ C1:鈴木  D1:一郎 次郎 三郎 C2:佐藤  D2:あきら けんた このようなことAccessかExcelで出来ますか?

  • エクセルでのデータ抽出について

    エクセルでのデータ抽出について質問です。 現在、エクセルで以下のようなシートがあります。 *アルファベットと数字はエクセルシートの座標です。データではないです。 _|__A___|__B___|__C___|__D__|  1|_太郎_|_次郎_|_三郎_| 2|__@___|__@___|__ ___| 3|__@___|__@___|__ ___| 4|__@___|__ ___|__@___| 5|__@___|__ ___|__@___| 上記のように1行目には人の名前が入っていて、二行目以降には@が入っているシートです。 現在、私のやりたいことはDセルの2~5行目までに何かしら数式を入れて、シートを行で見たときに@が入っている人の名前をDセルに表示をさせたいです。 具体的に言うと、D2には『太郎・次郎』、D5には『太郎・三郎』といった具合です。 どなたかこの処理が簡単にできる関数や方法をご存知の方はいらっしゃいませんでしょうか? 実際にはデータシートが1000行ほどあって手打ちだとなかなか骨が折れる仕事です。。。 どなたかご助言お願いいたします。 よろしくお願いいたします。

  • エクセルで複数条件を満たす値を表示する方法

     質問初めてで失礼しますが、よろしくお願いします。 エクセルにおいて  下記のようにシート「犬」に基礎となるデータがあります。     A   B  C  D  E   ・・・ 1        花子 太郎 次郎 2 1994 6月 200 100 320  3 1994 7月 700 300 500 4 1995 6月 800 500 100 5 1995 9月 900 800 300 6 1996 6月 500 200 200 ・ ・ ・  これを別のシート「猫」に花子の情報のみ一覧表示したいのですが、B3、B4・・・C3、C4・・・にどのような数式をいれればよいでしょうか?  なお、このようにして、太郎や次郎もシート毎に一覧表示させる予定です。    A B C D E   ・・・ 1 花子 2     6月 7月 8月 9月 3 1994  4 1995  5 1996  6 1997  7 1998  ・ ・ ・  よろしくお願いします。  

  • エクセルで文字列を数えて一覧表にしたいのですが

    たとえばですが、2人一組で配達に行きます。 メンバーは、太郎、次郎、三郎、四郎、五郎・・・と多人数です。 A1に太郎、B1に三郎 A2に次郎、B2に五郎 A3に太郎、B3に次郎 ・ ・ ・ と、いうような表ができます。 このとき、*郎は何回配達にいったのかをカウントしたいのです。 *郎は、A、Bのどちらに登場するかわかりませんし、 何回も登場しますし、組み合わせもばらばらです。 最終的に、太郎 15回、次郎 8回、三郎 21回・・・というように分かるようにしたいので、 仮にD1に太郎、E1に次郎、F1に三郎・・・の名前 (ダブって登場する名前を一つにまとめて、登場する全ての名前を残したい)、 D2に太郎、E2次郎、F2に三郎の回数(登場した名前の回数を数字で求めたい) というようにしたいのです。 エクセルの詳しい方、よろしくお願いします。

  • エクセルVBAで複数の条件を満たす検索方法

    エクセルのVBAを使ってデータ検索を行うプログラムを作っています "Sheet2"は下記のように、A列に生年月日、B列に住所、C列に電話番号、D列にメールアドレスが入力されています        【Sheet2】   生年月日  住所    電話番号  メールアドレス     A      B       C        D 1 1999/9/10 東京都○○ 11-111-1111 aa@goo.co.jp 2 2003/2/26 大阪府○○ 22-222-2222 bb@goo.co.jp 3 1985/6/22 福岡県○○ 33-333-3333 cc@goo.co.jp 4 1995/4/11 愛知県○○ 44-444-4444 dd@goo.co.jp "Sheet1"のA1に生年月日、A2に住所、A3に電話番号を入力し、"Sheet2"のデータと照合して、3つの値が合致した行のD列のメールアドレスを"Sheet1"のB1に返したいと思います 上記の表だと、"Sheet1"のA1に1985/6/22、A2に福岡県○○、A3に33-333-3333と入力されている場合、B1にcc@goo.co.jpの値を返すようにしたいのです。 findを使って生年月日、住所、電話番号を検索し、行番号を取得して、3つの行番号が同じならその行番号のD列の値を返すというような方法で考えていたのですが、エラーが回避できずに困っています。 生年月日が同じ人がいたり、夫婦や親子などは住所と電話番号が同じといった場合があり、上手く検索できません。  エラー回避の方法、もしくは他のやり方でも構いませんので どなたかご教授願えないでしょうか? よろしくお願いします。

専門家に質問してみよう