01-VBA

Excel VBA の「オブジェクト活用」(Part.3)【データの並び替え・抽出編】

お知らせ

howahowablogのVBA記事が電子書籍にて販売となりました。

目標

Excelのオブジェクトへの操作を体験して動きを把握し利用できる
データの並び替え・抽出方法を確認して動きを把握できる

オブジェクトの概要と操作

オブジェクトの概要についてはこちらを参考にしてください。

初心者のためのExcelVBAのオブジェクトExcelVBAのオブジェクトについて説明しています...

Excelブックの準備

前回のオブジェクト活用(Part.2)の操作後のシートを利用しています。
Excelブックのシートは「Sheet7」まであります。「Sheet6」には何も記述はありません。

「Sheet7」は「Sheet5」のコピーでA列にIDを挿入しています。以下表示

データの並び替え・抽出の操作

サンプルプロシージャ1

Sub filterObjectOpe()
'##################################################
'#  並び替え、抽出の操作                                                                                  #
'##################################################
'データベースの中で「並び替え」や「抽出」「検索」などに利用するデータ(基本的にはフィールド名に該当する列)のことをキーといいます。

'データの並び替え
'並び替えを行うときは「この表の」「この列(キー)」を「昇順か降順」で並び替えるといった手順になります。
'表のタイトルを除く場合はHeaderプロパティの設定をxlYesとします。
'---------------------------------------------------------------------------------------------
Worksheets("sheet7").Activate
Range("A1").Select
    With ActiveSheet.Sort
        'SortFields.Clearを利用して以前に使用した設定を解除します。
        .SortFields.Clear
        '下のプログラムで「この表の」を設定します。
        .SetRange Range("A1").CurrentRegion
        'Add2メソッドを利用して「キー」と「昇順か降順か」を設定します。
        '名前付き引数「Order」の定数「xlAscending」は昇順、「xlDescending」は降順。
        .SortFields.Add2 Key:=Range("D1"), Order:=xlDescending
        'HeaderプロパティをxlYesとして表のタイトルを並び替えの対象から外します。
        .Header = xlYes
        'Applyメソッドはこれまでの設定を利用して並び替えを行わせるメソッドです。
        .Apply
    End With
'---------------------------------------------------------------------------------------------

'データの抽出
'抽出を行うときは「この表の」「この列(キー)」で「設定条件に合う(もしくは合わない)」で抽出するといった手順になります。
'「AutoFilterの利用」
'---------------------------------------------------------------------------------------------
'現在のセレクション(セルA1かた連続したセル)の左から3列目の(C列)で「東京都●●」となっているデータを抽出
Selection.AutoFilter 3, "東京都*"
'引数を付けないでAutoFilterメソッドを利用するとフィルターを解除できます。
Selection.AutoFilter
'---------------------------------------------------------------------------------------------

Worksheets("Sheet6").Select
'セルの全ての設定(書式や値)のクリア
'---------------------------------------------------------------------------------------------
Range("A1:J50").Clear
'---------------------------------------------------------------------------------------------

Worksheets("Sheet7").Select
Range("C1").Select
'「AdvancedFilterの利用」
'Actionで抽出先を設定「xlFilterCopy」はCopyToRangeで指定した場所。「xlFilterInPlace」は現在の表を利用します。
'CriteriaRangeで検索条件の範囲を設定
'CopyToRangeでコピー先を設定
'---------------------------------------------------------------------------------------------
ActiveSheet.Columns("A:J").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Worksheets("Sheet7").Range("L10:L11"), _
        CopyToRange:=Worksheets("Sheet6").Range("A2:J2")
'---------------------------------------------------------------------------------------------

'Worksheets("Sheet6").Select
'データの検索
'検索を行うときは「この表の」「この列(キー)」で「条件に合致するデータ」を探すといった手順になります。
'---------------------------------------------------------------------------------------------
Worksheets("Sheet6").Select
ActiveSheet.Range("A1").Value = "東京都"
Worksheets("Sheet7").Select

Dim tableRange As Range
Dim ObjectsTarget As Range
Dim StartRange As String

'検索の対象範囲をセットします。
Set tableRange = Range("A1").CurrentRegion

'「Findメソッド」の名前付き引数のWhatに検索する値を設定します。
'Lookatに「xlPart」を指定すると部分一致で検索し、「xlWhole」だと完全一致で検索を行います。
'検索対象のオブジェクトでFindメソッドを利用するためのオブジェクトを作成します。
Set ObjectsTarget = tableRange.Find(What:=Worksheets("Sheet6").Range("A1").Value, Lookat:=xlPart)

'「Findメソッド」を利用
'ここでは「Findメソッド」の設定を入れたObjectsTargetを利用します。
'検索対象が見つかった場合(ObjectsTargetがNothingでないなら)
    If Not ObjectsTarget Is Nothing Then
    '得た情報のセルを選択します。
        ObjectsTarget.Select
    Else
        MsgBox ("検索対象は見つかりませんでした。")
    End If

'「FindNextメソッド」を利用
'「FindNextメソッド」は「Findメソッド」で開始した検索を続けて行うことができるメソッドです。
    If Not ObjectsTarget Is Nothing Then
    'ObjectsTargetのアドレスをStartRangeに格納します。
        StartRange = ObjectsTarget.Address
        Do
        MsgBox ObjectsTarget
        'FindNextメソッドの引数で検索中の現在のセルを指定して
        Set ObjectsTarget = tableRange.FindNext(ObjectsTarget)
        'ObjectsTargetのアドレスがStartRangeと再度同じになったら(検索が一周したら)終了します。
        Loop Until ObjectsTarget.Address = StartRange
    Else
        MsgBox ("検索対象は見つかりませんでした。")
    End If
'---------------------------------------------------------------------------------------------

'データの置き換え
'検索を行ったデータを別のデータとして書き換えるといった手順になります。
'---------------------------------------------------------------------------------------------
Range("A1").CurrentRegion.Replace What:="山本", Replacement:="山田", Lookat:=xlPart
'---------------------------------------------------------------------------------------------

End Sub

ステップモードで動作を確認

実行結果

セルの書式や値のクリアについてはこちらを参考にしてください。

Excel VBA の「オブジェクト活用」(Part.2)【セル活用編】ExcelVBAの「オブジェクト活用」(Part.2)セルの活用方法についての記事です。...
引数定数意味
What検索する文字列の設定
After検索を開始するセルの指定
LookInxlFormulas数式を検索の対象にする
xlValues値を検索の対象にする
xlComentsコメントを検索の対象にする
LookAtxlPart部分一致で検索を行う
xlWhole完全一致で検索を行う
MatchByteTrue半角と全角を区別する
False半角と全角を区別しない

今回は以上となります。

howahowablogのVBA記事が電子書籍にて販売となりました。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST