オートフィルタ該当なしの場合の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分岐マクロ
※この記事。
以上。