LibreOffice-VBA-オートフィルタ該当なしの場合のif分岐マクロ

2019/11/16

プログラム

t f B! P L
LibreOfficeでVBAマクロ実行。今回は
オートフィルタ該当なしの場合のif分岐マクロ
を示す。

■LibreOffice-VBA-オートフィルタ該当なしの場合のif分岐マクロ

Option VBASupport 1

Sub sample10a()
    Cells(1, 1).AutoFilter Field:=6, Criteria1:=Array("通信ケーブル")
    
 Dim SN1 As String 'ω'可視セル別シート「削除01」へコピペ
 SN1 = ActiveSheet.Name
Cells.Select
    Worksheets(SN1).Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "削除01"
Dim DM1 as object
Dim DP1 as object
DM1 = ThisComponent.CurrentController.Frame
DP1 = createUnoService("com.sun.star.frame.DispatchHelper")
DP1.executeDispatch(DM1, ".uno:Paste", "", 0, Array())

Dim MR As Long
MR = Cells(Rows.Count, 2).End(xlUp).Row 'ω'最終行数取得,B列に空白なきこと
    Sheets("削除01").Delete
    Worksheets(SN1).Activate
        
If MR = 1 Then
    MsgBox "データがありません"
Else
    MsgBox "データがあります"
End If
End Sub
※[4.] アクティブシートの6列目(F列)に対して「通信ケーブル」を抽出する。
※[18.] 最終行数取得は空白セルのない2列目(B列)を使う。

■マクロ実行対象

「部品データ_191108.ods」の「Sheet1」。

■マクロ実行結果

■オートフィルタ該当ありの場合-if分岐
実行すると、6列目(F列)が「通信ケーブル」でフィルタ抽出される。
メッセージボックス「データがあります」表示される。

■オートフィルタ該当なしの場合-if分岐
6列目(F列)フィルタ抽出部品名称「セーブデータ破損」とする。
    Cells(1, 1).AutoFilter Field:=6, Criteria1:=Array("セーブデータ破損")

実行すると、「セーブデータ破損」という部品名称は存在せず、抽出行なし。
メッセージボックス「データがありません」表示される。
無慈悲。
実務ではメッセージボックスのコードを削除して
実行したい処理に書きかえて使っていた。

■補足-エクセルVBA-オートフィルタ該当なしの場合のif分岐マクロ

Sub sample10()
    Cells(1, 1).AutoFilter Field:=6, Criteria1:=Array("通信ケーブル")
If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then
    MsgBox "データがありません"
Else
    MsgBox "データがあります"
End If
End Sub
短い。

■あとがき

LibreOffice BasicでエクセルVBAの可視セル操作コード
「SpecialCells(xlCellTypeVisible)」がエラーで動かないっぽい。
なので他の記述で実現したのが冒頭のマクロとなる。
エクセルVBAのマクロと比べると記述量多し。

LibreOffice流の記述をもっとよく知っていれば、
あるいはエラー原因つきとめ解除すれば、
シンプル、コンパクトに記述できるのかもしれない。

まあ記述のキレイさは、
目的を実現して結果を出したあとですわ。

全く関係ないが、
ポケモン剣盾のセーブデータ破損はデマっぽい。
デマが拡散されるこんな世の中はポイズン属性。

■過去記事-オートフィルタ

LibreOffice-VBA-オートフィルタで抽出した行以外を削除するマクロ

LibreOffice-VBA-別モジュールのSubプロシージャ呼び出し方法

LibreOffice-VBA-オートフィルタ-複数条件で抽出するマクロ

LibreOffice-VBA-オートフィルタ-以上-以下などの条件抽出マクロ

LibreOffice-VBA-オートフィルタのあいまい検索-ワイルドカード

LibreOffice-VBA-オートフィルタ該当なしの場合のif分岐マクロ
※この記事。

以上。

ブログ アーカイブ

ラベル

このブログを検索

スポンサーリンク

自己紹介

機械メーカー総合職正社員10年勤務後退職。 エクセルVBAプログラム歴 5年。 LibreOffice(無料)でVBAマクロ検証。
■Fortniteクエスト攻略動画■
■Twitter■
⇒詳細プロフィールを表示

QooQ