01-VBA

クラスの利用方法|Excel VBA(番外編)

お知らせ

こちらの記事は、電子書籍「難しく考えないExcel VBA基礎学習編」として出版されました。記事は途中までが試し読みの対象となります。

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

目標

「VBScriptを利用したVBAプロシージャの呼び出し(Part.1)」で作成したシート内の選択した範囲の値をクリアする処理をクラスに準備して利用する。

編集前のdataClearプロシージャの確認

シート内の選択した範囲の値をクリアする処理はdataClearプロシージャ内で記載していました。このクリアする処理についてdataClearプロシージャから一部をクラス内に移動します。dataClearプロシージャでは、そのクラスのインスタンスを作成することでその処理を呼び出す方法をとっていきます。

編集前のdataClearプロシージャの確認

編集するdataClearプロシージャの元記事はこちらになります。

VBScriptを利用したVBAプロシージャの呼び出し(Part.1)VBScriptを利用してVBAのプロシージャを呼び出す方法を記事にしています。この記事はVBAでサンプルシステムを作成する記事の関連記事となっています。VBAのプロシージャ呼び出しの記事としてはPart.1となっています。...

編集前のdataClearプロシージャ

Sub dataClear()

    Dim sheetName(7) As String
    sheetName(1) = "現金"
    sheetName(2) = "カード売上"
    sheetName(3) = "銀行預金"
    sheetName(4) = "日別統合"
    sheetName(5) = "シート統合"
    sheetName(6) = "勤務休憩シート"
    sheetName(7) = "ドリンクバック集計"
    
    Dim tableRow As Integer
    Dim tableColumns As Integer
    Dim i As Integer
    
    For i = 1 To 7
    
        Sheets(sheetName(i)).Select
        
        If i <= 5 Then
            Range("A5").Select
            If ActiveCell.Value <> "" Then
                ActiveCell.CurrentRegion.Select
                tableRow = Selection.Rows.Count
                tableColumns = Selection.Columns.Count
                ActiveCell.Offset(2, 0).Resize(tableRow - 2, tableColumns).Select
                Selection.ClearContents
            End If
        Else
            Range("A2").Select
            If ActiveCell.Value <> "" Then
                ActiveCell.CurrentRegion.Select
                tableRow = Selection.Rows.Count
                tableColumns = Selection.Columns.Count
                ActiveCell.Offset(1, 0).Resize(tableRow - 1, tableColumns).Select
                Selection.ClearContents
            End If
        End If
        
    Next i
    
End Sub

クラスの作成

新しいクラスを準備してdataClearプロシージャ内の処理の一部を移動します。

クラスの作成

クラスを準備します。今回はオブジェクト名を「Class1」のまま利用します。

Class1のファイルに次のように記述します。このクラスのインスタンスをdataClearプロシージャ内で生成して利用します。Class1クラスにclearMethodプロシージャを作成してdataClearプロシージャ内で利用していたクリア作業の処理を取り込みます。

Class1内のプログラム

Option Explicit

Private this_tableRow As Integer
Private this_tableColumns As Integer
Private this_rowNum As Integer
Private this_cellAddress As String

Private Sub Class_Initialize()
    this_rowNum = 2
    this_cellAddress = "A5"
    tableRow = tableRow
End Sub

Sub clearMethod()

    Range(this_cellAddress).Select
    If ActiveCell.value <> "" Then
        ActiveCell.CurrentRegion.Select
        this_tableRow = Selection.Rows.Count
        this_tableColumns = Selection.Columns.Count
        ActiveCell.Offset(this_rowNum, 0).Resize(this_tableRow - this_rowNum, this_tableColumns).Select
        Selection.ClearContents
    End If
    
End Sub

Public Property Get tableRow() As String
    tableRow = this_tableRow
End Property

Public Property Let tableRow(ByVal value As String)
    this_tableRow = value
End Property

Public Property Get tableColumns() As String
    tableColumns = this_tableColumns
End Property

Public Property Let tableColumns(ByVal value As String)
    this_tableColumns = value
End Property

Public Property Get rowNum() As String
    rowNum = this_rowNum
End Property

Public Property Let rowNum(ByVal value As String)
    this_rowNum = value
End Property

Public Property Get cellAddress() As String
    cellAddress = this_cellAddress
End Property

Public Property Let cellAddress(ByVal value As String)
    this_cellAddress = value
End Property

クラス内のプログラムについて詳細な説明は次の記事を参考にしてください。

VBScriptを利用したVBAプロシージャの呼び出し(Part.2)VBScriptを利用してVBAのプロシージャを呼び出すスクリプトについて解説しています。この記事はVBAでサンプルシステムを作成する記事の関連記事となっています。VBAのプロシージャ呼び出しの記事としてはPart.2となっています。...

編集後のdataClearプロシージャ

dataClearプロシージャでは今回作成したクラス「Class1」のインスタンスを生成して利用します。

編集後のdataClearプロシージャ

Sub dataClear()

    Dim sheetName(7) As String
    sheetName(1) = "現金"
    sheetName(2) = "カード売上"
    sheetName(3) = "銀行預金"
    sheetName(4) = "日別統合"
    sheetName(5) = "シート統合"
    sheetName(6) = "勤務休憩シート"
    sheetName(7) = "ドリンクバック集計"
    
    Dim tableRow As Integer
    Dim tableColumns As Integer
    Dim i As Integer
    
    Dim clearClass As Class1
    Set clearClass = New Class1
    
    For i = 1 To 7
    
        Sheets(sheetName(i)).Select
        
        If i <= 5 Then
            clearClass.clearMethod
        Else
            clearClass.cellAddress = "A2"
            clearClass.rowNum = 1
            clearClass.clearMethod
        End If
        
    Next i
    
    Set clearClass = Nothing
    
End Sub

繰り返し文の中身がすっきりとしました。今回のクラスではクラスの中身の方がプログラムが長いことや、引数付きのサブルーチンでも同じことが可能だったりで利便性を感じませんが、複数のオブジェクトを利用した処理が必要な場合はクラスはとても便利な仕組みです。

ここまでで準備は終了です。あとは稼働をとるだけになります。

dataClearプロシージャの利用

dataClearプロシージャの利用

dataClearプロシージャ内をクリックして実行ボタンをクリックします。

クラスファイルは実行できません。クラスはインスタンス化して利用できるオブジェクトになるのでインスタンス化の処理を書いているプロシージャの方で稼働をかけます。

1.dataClearプロシージャを記述しているモジュールを選択します。
2.dataClearプロシージャ内をクリックします。
3.実行ボタンをクリックします。

実行結果

指定したファイルの選択範囲がクリアされます。

今回は以上となりす。

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

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

ブックマークのすすめ

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

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