目次
概要
Excelにおける、表からのデータ抽出に関するVBAを列挙します。
Excelで表を作った場合、オートフィルターなどを用いると必要な情報を取捨選択して効率良く作業を行えるでしょう。
ただし表のデータ数や項目が多いと、抽出する内容も複雑になっていきます。
そういった作業を自動化するVBAを挙げていきます。
Excel(Excel) VBA・マクロ データ抽出や操作に関するコード
オートフィルターの操作
オートフィルターの解除
If Worksheets("シート名").FilterMode Then
Worksheets("シート名").ShowAllData
End If
表の全てのオートフィルターを解除します。
表にオートフィルターが適用されていない場合、「ShowAllData」はエラーになるので前段階としてIFでオートフィルターを確認しています。
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
アクティブシートの場合は上記のようになります。
指定のオートフィルターの解除
Range("A1").AutoFilter Field:=1
指定のフィルターを解除します。
「Field:=」に指定の番号を入力します。
指定の条件でフィルターを絞り込み
Range("A1").AutoFilter Field:=1, Criteria1:="絞り込みたい値"
指定のフィルターを指定の条件で絞り込みます。
複数条件でオートフィルターを指定
Range("A1").AutoFilter Field:=12, Criteria1:=Array( _
"条件1", "条件2"), Operator:=xlFilterValues
1つのオートフィルターに対して複数条件での絞り込みを行います。
IFの条件で分岐し、フィルターを絞り込み
If Range("A1").Value = "任意の値1" Then
Range("A1").AutoFilter Field:=1, Criteria1:="絞り込みたい値1"
ElseIf Range("A1").Value = "任意の値2" Then
Range("A1").AutoFilter Field:=1, Criteria1:="絞り込みたい値2"
Else
Range("A1").AutoFilter Field:=1, Criteria1:="絞り込みたい値3"
End If
IFを使って条件分岐した上でフィルターを絞り込みます。
またElseIfにて複数条件に対応させています。
上記例ではA1の値に応じてフィルターを任意の条件で絞り込んでいます。
各値を状況に合わせて変更してください。
行や列の表示・非表示
指定した行や列の表示・非表示
Rows("1").Hidden = True '指定の行を非表示、Falseで再表示
Columns("A").Hidden = True '指定の列を非表示、Falseで再表示
Range("1:3,11:13").EntireRow.Hidden = True '複数の指定範囲の行を非表示、Falseで再表示
Range("A:C,F:H").EntireColumn.Hidden = True '複数の指定範囲の列を非表示、Falseで再表示
Rows.Hidden = False ' 全ての行を表示
Columns.Hidden = False ' 全ての列を表示
任意の列や行を表示・非表示するコードです。
任意の値が含まれる列を非表示
Dim i As Integer
For i = 1 To 10
If Cells(2, i) = "任意の値" Then
Columns(i).Hidden = True
End If
Next i
行であればオートフィルター機能にて表示・非表示が可能ですが、列の場合は難しいでしょう。
上記にて指定の値が含まれる列を非表示にします。
条件となる値と、ループさせる範囲を指定して運用します。
任意の値が含まれる行を非表示
Dim i As Integer
For i = 1 To 100
If Cells(i, 1) = "任意の値" Then
Rows(i).Hidden = True
End If
Next i
通常、行の非表示であればオートフィルターを使うケースが多いと思います。
しかしながら、複数のデータベースやデータベース外のセルも含めて表示を替えたい場合は上記のようなコードが一例になります。
可視セルのコピーと貼り付け
Range("A1:B10").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
オートフィルターで抽出したデータをコピー&貼り付けします。
つまり可視セルのコピーになります。