• ベストアンサー
※ 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