Excel(エクセル)VBA オートフィルターで対象がない場合の処理!

Excel(エクセル)VBA オートフィルターで対象がない場合の処理! Excel(エクセル)

業務中に調べることの多い、Excel,Word,PowerPointなどのノウハウを発信していきます!

Biz Magic編集部をフォローする

Excel(エクセル)VBAとは

皆さんExcelのVBAとはなにかをご存じでしょうか?

VBAは、Excelのワークブックやワークシート内のデータやオブジェクトに対してアクセスし、操作することができます。VBAを使用することで、ユーザーはExcelのさまざまな機能をカスタマイズしたり、繰り返し作業を自動化したり、独自の機能を追加したりすることができます。

VBAは、Excelのメニューバーやボタンに割り当てられたマクロを作成するためにも使用されます。マクロは、一連の操作や処理を記録して再生するためのスクリプトです。VBAを使用することで、マクロの記録だけでなく、より高度なプログラミング機能や条件分岐、ループなどの制御構造を使用したプログラムの作成も可能です。

VBAは、Excelだけでなく、他のMicrosoft Officeアプリケーション(Word、PowerPoint、Accessなど)でも使用することができます。また、VBAはExcel以外のアプリケーションとの連携や、外部のデータソースとのデータの取得や更新など、さまざまなタスクを実行するためにも利用されます。

VBAは、プログラミングの基礎知識があれば比較的簡単に学ぶことができます。VBAの学習には、VBAの構文やオブジェクトモデルの理解、関数やサブルーチンの作成、エラーハンドリングなどが含まれます。ExcelのVBAエディタを使用して、コードを入力、編集、実行することができます。

今回の記事ではExcelのVBA オートフィルターで対象がない場合の処理をご紹介していきます。

Excel(エクセル)VBA オートフィルターで対象がない場合の処理

では、早速ですがExcelのVBA オートフィルターで対象がない場合の処理をご紹介していきます。

まず、VBAを使用するためには「開発」タブの「Visual Basic」を選択します。

これでVBAを入力する画面を開くことができます。

開発タブがない方はExcelのオプションで開発にチェックをいれてください。

これで開発タブを使用できるようになります。

VBAのエディタに実装したい機能のコードを入力します。

今回やりたいのは指定した名前でフィルターをかけ、データを印刷し、フィルターを解除することです。また、フィルターをかけた結果対象がない場合には対象がありませんとメッセージを出すようにしたいと思います。オートフィルターで対象があるかどうかをチェックするにはEndを使用します。

ここが今回のコードで一番重要な部分ですが、以下のように記述することで対象があったかなかったかを判定しています。

If Cells(Rows.Count, "A").End(xlUp).Row > 1 Then

これはA1セルを選択しながら「Ctrl」+「Shift」+「↓」を押し、「Ctrl」+「Shift」+「↑」を押した状態で選択されているデータの個数が1より多いかを判定しています。対象がない場合は以下のようにデータは1つのみになります。

ここを抑えたうえで以下のコードを確認してみてください。

Sub FilterAndExportToPDF()
    Dim ws As Worksheet
    Dim filterColumn As Range
    Dim nameToFilter As String
    Dim filteredRange As Range
    Dim exportToPDF As VbMsgBoxResult
    
    ' 対象のワークシートを指定
    Set ws = ThisWorkbook.Sheets("Sheet1") ' ワークシート名を変更
    
    ' フィルタをかける列を指定(A列を想定)
    Set filterColumn = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
    
    ' ユーザーから名前を入力を受け取る
    nameToFilter = InputBox("名前を入力してください")
    
    ' 入力が空白でないか確認
    If nameToFilter <> "" Then
        ' フィルタを解除(すべてのオートフィルターを解除)
        ws.AutoFilterMode = False
        
        ' 名前でフィルタをかける
        filterColumn.AutoFilter Field:=1, Criteria1:=nameToFilter
        
        ' フィルタリングされたデータを別の範囲にコピー(必要に応じて)
        ' Set filteredRange = ws.UsedRange.SpecialCells(xlCellTypeVisible)
        
        ' フィルタを解除
        'ws.AutoFilterMode = False
        
        ' フィルタリングされたデータが存在するか確認
        If Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
            ' フィルタリングされたデータが存在する場合、PDFにエクスポートするか確認
            exportToPDF = MsgBox("フィルタリングされたデータをPDFにエクスポートしますか?", vbYesNo + vbQuestion, "PDFエクスポート")
            
            If exportToPDF = vbYes Then
            ' フィルタリングされたデータを印刷(ここに印刷コードを追加)
               ActiveSheet.PrintOut
               ' フィルタを解除
            ws.AutoFilterMode = False
            End If
        Else
            ' フィルタリングされたデータが存在しない場合、メッセージを表示
            MsgBox "対象データが見つかりません。"
            ' フィルタを解除
            ws.AutoFilterMode = False
        End If
    Else
        ' 名前が入力されなかった場合、メッセージを表示
        MsgBox "名前が入力されていません。"
    End If
End Sub

コードにはコメントを残しているのでわかりにくい部分はコメントをみて理解してみてください。また、コメントを見ても分からない場合は別途調べることでより自分の知識として定着させることができます。

Excelの操作方法は実際に手を動かし、身につけていきましょう

今の時代、様々な仕事でExcelを使用することがあるでしょう。今回はExcelのVBA オートフィルターで対象がない場合の処理についてご紹介しました。このような機能を使いこなすことができれば仕事にも役に立つので、実際に手を動かし、覚えていきましょう。

WordやExcelなどのOfficeツールでは便利なショートカットキーなどがたくさんあるのでよく使う作業に関してはショートカットキーを調べてみるのも効率よく仕事を進める上で大切なことなのでこれから実践してみましょう。

コメント

タイトルとURLをコピーしました