Excel

【Excel】VBAマクロで条件に一致する行を取得(全て:複数:比較:2つ:別シートに抽出:探す:Select Case:If)する方法

当サイトでは記事内に広告を含みます。

この記事では、VBA(マクロ)を使って特定の条件に一致する行を取得し、別のシートに抽出する方法について解説していきます。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

 

VBAマクロで条件に一致する行を取得する方法(ok列がittiの場合、行ごと別シートに抽出)

それではまず、VBAマクロを使ってok列の値が「itti」の行を別のシートに抽出する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub aaaaajyouken1aaaaa()
'変数を定義
Dim aaaaakaishigyouaaaaa As Long, aaaaashuuryougyouaaaaa As Long
Dim aaaaaidougyouaaaaa As Long, aaaaaokrankaaaaa As Long
Dim aaaaashiitomeiaaaaa As String, aaaaasakuseishiitomeiaaaaa As String

'処理のシートと抽出結果のシートを設定
aaaaashiitomeiaaaaa = "Sheet1"
aaaaasakuseishiitomeiaaaaa = "抽出結果1"

'抽出条件のok列の番号設定
aaaaaokrankaaaaa = 1

'処理のシートをアクティブにする
Worksheets(aaaaashiitomeiaaaaa).Activate

'処理開始行と最終行を設定
aaaaakaishigyouaaaaa = 2
aaaaashuuryougyouaaaaa = Cells(Rows.Count, aaaaaokrankaaaaa).End(xlUp).Row

'抽出結果のシートがない場合は作成する
On Error Resume Next
Worksheets(aaaaasakuseishiitomeiaaaaa).Activate
On Error GoTo 0

If ActiveSheet.Name <> aaaaasakuseishiitomeiaaaaa Then
  Worksheets.Add After:=Worksheets(Worksheets.Count)
  ActiveSheet.Name = aaaaasakuseishiitomeiaaaaa
End If

'抽出結果のシートのA2セルからデータを貼り付ける
Worksheets(aaaaasakuseishiitomeiaaaaa).Cells.Clear
aaaaaidougyouaaaaa = 2

'条件に一致する行を抽出
For i = aaaaakaishigyouaaaaa To aaaaashuuryougyouaaaaa
  'itti の場合、行ごと抽出結果シートに値貼り付け
  If Worksheets(aaaaashiitomeiaaaaa).Cells(i, aaaaaokrankaaaaa).Value = "itti" Then
      Worksheets(aaaaashiitomeiaaaaa).Rows(i).Copy _
      Destination:=Worksheets(aaaaasakuseishiitomeiaaaaa).Rows(aaaaaidougyouaaaaa)
     aaaaaidougyouaaaaa = aaaaaidougyouaaaaa + 1
  End If
Next

End Sub

 

 

以下が元データ(Sheet1)の状態です。

コードのAlt+F8を押し、マクロ選択画面でaaaaajyouken1aaaaa関数を実行します。

すると抽出結果1シートにok列(1列目に指定)がittiの行のみが抽出できました。

なお、1行目のラベルは予め入力しています。

 

上記のコードでは、まず変数を定義し、処理のシート名と抽出結果のシート名、抽出条件のok列の番号を設定します。

次に、処理のシートをアクティブにし、処理開始行と最終行を設定します。

抽出結果のシートがない場合は新規で作成し、抽出結果のシートのA2セルから値を貼り付ける(先頭にラベルがあることを想定)ようにしています。

最後に、For文を使って条件に一致する行を抽出し、行ごと抽出結果シートに値を貼り付けています。

 

VBAマクロで複数の条件に一致する行を取得する方法(ok列がitti かつ ng列が10の場合、行ごと別シートに抽出)【Select Case文】

続いては、VBAマクロを使ってok列の値が「itti」かつng列の値が「10」の行を別のシートに抽出する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub aaaaajyouken2aaaaa()
'変数を定義
Dim aaaaakaishigyouaaaaa As Long, aaaaashuuryougyouaaaaa As Long
Dim aaaaaidougyouaaaaa As Long, aaaaaokrankaaaaa As Long, aaaaaoknaiyouaaaaa As String
Dim aaaaaaaaaaaaaaaa As Long, aaaaangrankaaaaa As Long, aaaaaaaaaaaangnaiaaaaaaaaaaa As String
Dim aaaaashiitomeiaaaaa As String, aaaaasakuseishiitomeiaaaaa As String

'処理のシートと抽出結果のシートを設定
aaaaashiitomeiaaaaa = "Sheet1"
aaaaasakuseishiitomeiaaaaa = "抽出結果2"

'抽出条件のok列の番号とng列の番号設定
aaaaaokrankaaaaa = 1
aaaaangrankaaaaa = 2

'処理のシートをアクティブにする
Worksheets(aaaaashiitomeiaaaaa).Activate

'処理開始行と最終行を設定
aaaaakaishigyouaaaaa = 2
aaaaashuuryougyouaaaaa = Cells(Rows.Count, aaaaaokrankaaaaa).End(xlUp).Row

'抽出結果のシートがない場合は作成する
On Error Resume Next
Worksheets(aaaaasakuseishiitomeiaaaaa).Activate
On Error GoTo 0

If ActiveSheet.Name <> aaaaasakuseishiitomeiaaaaa Then
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = aaaaasakuseishiitomeiaaaaa
End If

'抽出結果のシートのA2セルからデータを貼り付ける
Worksheets(aaaaasakuseishiitomeiaaaaa).Cells.Clear
aaaaaidougyouaaaaa = 2

'条件に一致する行を抽出
For i = aaaaakaishigyouaaaaa To aaaaashuuryougyouaaaaa
    aaaaaoknaiyouaaaaa = Worksheets(aaaaashiitomeiaaaaa).Cells(i, aaaaaokrankaaaaa).Value
    aaaaaaaaaaaangnaiaaaaaaaaaaa = Worksheets(aaaaashiitomeiaaaaa).Cells(i, aaaaangrankaaaaa).Value
    
    Select Case True
        Case aaaaaoknaiyouaaaaa = "itti" And aaaaaaaaaaaangnaiaaaaaaaaaaa = "10"
            Worksheets(aaaaashiitomeiaaaaa).Rows(i).Copy _
            Destination:=Worksheets(aaaaasakuseishiitomeiaaaaa).Rows(aaaaaidougyouaaaaa)
            aaaaaidougyouaaaaa = aaaaaidougyouaaaaa + 1
    End Select
Next

End Sub

 

コードのAlt+F8を押し、マクロ選択画面でaaaaajyouken2aaaaa関数を実行します。

以下でも、1行目のラベルは予め入力しています。

上記のコードでは、Select Case文を使って複数の条件に一致する行を抽出しています。

ok列の値が「itti」かつng列の値が「10」の場合、行ごと抽出結果シートに値を貼り付けるようにしています。

 

VBAマクロでok列とng列を比較し、同じの行を取得する方法(行ごと別シートに抽出)【If文】

最後に、VBAマクロを使ってok列とng列の値が同じ行を別のシートに抽出する方法について解説します。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub aaaaajyouken3aaaaa()
'変数を定義
Dim aaaaakaishigyouaaaaa As Long, aaaaashuuryougyouaaaaa As Long
Dim aaaaaidougyouaaaaa As Long, aaaaaokrankaaaaa As Long
Dim aaaaangrankaaaaa As Long
Dim aaaaashiitomeiaaaaa As String, aaaaasakuseishiitomeiaaaaa As String

'処理のシートと抽出結果のシートを設定
aaaaashiitomeiaaaaa = "Sheet1"
aaaaasakuseishiitomeiaaaaa = "抽出結果3"

'比較するok列とng列の番号設定
aaaaaokrankaaaaa = 1
aaaaangrankaaaaa = 2

'処理のシートをアクティブにする
Worksheets(aaaaashiitomeiaaaaa).Activate

'処理開始行と最終行を設定
aaaaakaishigyouaaaaa = 2
aaaaashuuryougyouaaaaa = Cells(Rows.Count, aaaaaokrankaaaaa).End(xlUp).Row

'抽出結果のシートがない場合は作成する
On Error Resume Next
Worksheets(aaaaasakuseishiitomeiaaaaa).Activate
On Error GoTo 0

If ActiveSheet.Name <> aaaaasakuseishiitomeiaaaaa Then
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = aaaaasakuseishiitomeiaaaaa
End If

'抽出結果のシートのA2セルからデータを貼り付ける
Worksheets(aaaaasakuseishiitomeiaaaaa).Cells.Clear
aaaaaidougyouaaaaa = 2

'ok列とng列を比較し、同じ値の行を抽出
For i = aaaaakaishigyouaaaaa To aaaaashuuryougyouaaaaa
    If Worksheets(aaaaashiitomeiaaaaa).Cells(i, aaaaaokrankaaaaa).Value _
        = Worksheets(aaaaashiitomeiaaaaa).Cells(i, aaaaangrankaaaaa).Value Then
        
        Worksheets(aaaaashiitomeiaaaaa).Rows(i).Copy _
        Destination:=Worksheets(aaaaasakuseishiitomeiaaaaa).Rows(aaaaaidougyouaaaaa)
        aaaaaidougyouaaaaa = aaaaaidougyouaaaaa + 1
    End If
Next

End Sub

コードのAlt+F8を押し、マクロ選択画面でaaaaajyouken3aaaaa関数を実行します。

上記のコードでは、If文を使ってok列とng列の値を比較し、同じ値の行を抽出しています。
ok列の値とng列の値が同じ場合、行ごと抽出結果シートに値を貼り付けるようにしています。

 

 

まとめ VBAで条件に一致する行を取得(別シートに抽出:探す:Select Case:If)する方法

ここでは、VBAマクロで条件に一致する行を取得(比較:2つ:別シートに抽出:探す:Select Case:If)する方法について確認しました。

マクロの扱いになれ、業務を効率化させていきましょう。