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

2019/11/08

プログラム

t f B! P L
LibreOfficeでVBAマクロ実行。今回は
オートフィルタで抽出した行以外を削除するマクロ
を示す。

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

Option VBASupport 1

Sub sample06a() 'ω'15列目「新方式」フィルタ抽出

 Worksheets("Sheet1").Activate
    ActiveSheet.Cells(1, 1).AutoFilter Field:=15, Criteria1:=Array("新方式"), Operator:=xlFilterValues

 Dim SN1 As String 'ω'以下フィルタ非該当行削除
 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())

    Worksheets(SN1).AutoFilterMode = False
Worksheets(SN1).Rows.Hidden = False
    Sheets(SN1).Cells.Clear

    Worksheets("削除01").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    Worksheets(SN1).Range("A1").PasteSpecial Paste:=xlPasteAll
    Sheets("削除01").Delete

End Sub

■条件
・シートの名前は「Sheet1」
・15列目(O列)を「新方式」でフィルタ⇒非該当行を削除するマクロ
・マクロ6行目のフィルタ条件「15」と「新方式」を変更して転用可能

■マクロ実行結果

15列目(O列)発注方法「新方式」以外
すべての行が削除される。

■次回■
LibreOffice-VBA-別モジュールのSubプロシージャ呼び出し方法
今回のオートフィルタ以降の削除部分のコードをSubプロシージャにわけて
別モジュールに格納して呼び出す方法を示す。

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

エクセルVBAで使用していたマクロを示す。
Sub sample06() 'ω'15列目「新方式」フィルタ抽出

Worksheets("Sheet1").Activate
    ActiveSheet.Cells(1, 1).AutoFilter Field:=15, Criteria1:=Array("新方式"), Operator:=xlFilterValues

Dim SN1 As String 'ω'以下フィルタ非該当行削除
SN1 = ActiveSheet.Name

    Worksheets(SN1).Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "削除01"
    Worksheets("削除01").Range("A1").PasteSpecial Paste:=xlPasteAll

    Worksheets(SN1).AutoFilterMode = False
    Sheets(SN1).Cells.Clear

    Worksheets("削除01").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    Worksheets(SN1).Range("A1").PasteSpecial Paste:=xlPasteAll
    Sheets("削除01").Cells.Clear

    Sheets("削除01").Delete

End Sub
マクロ冒頭に「Option VBASupport 1」
記述してLibreOffice Basicで実行した結果。
うまく動作しなかった。
Copyの範囲選択と可視セルPasteがダメっぽいので
「Cells.Select」で全範囲選択。
PasteはLibreOffice流で記述。

オートフィルタ解除
「AutoFilterMode = False」のみでは
非表示行が表示されなかったので、
「Rows.Hidden = False」も追記したのが
冒頭のマクロとなる。

エクセルVBAとLibreOffice流混合の
キメラマクロw

■あとがき

過去記事でマクロ処理の最初と最後をおさえている。
今回は中身。以降も中身。ブラックボックスになにをつめるかの話。
扱うファイルのデータサイズは小さい方が高速処理できるので、
まず、不要な部分、シートやデータを削除する。

【全体の流れ】
以前の工程については過去記事を参照。

【過去記事】
LibreOfficeでエクセルVBAマクロを実行する方法
※実際にマクロを動かす準備。

LibreOfficeマクロ-日付が名前に含まれるxlsxファイルをひらく
※【開始】xlsxファイルをひらく。

LibreOffice-VBA-Sheet表示倍率指定⇒ファイル名変更保存
※【終了】xlsxファイルを保存する。

LibreOffice-VBA-アクティブシート以外のシートを全部削除する
※【処理】シート全部削除。

LibreOffice-VBA-オートフィルタで抽出した行以外を削除するマクロ
※【処理】この記事。オートフィルタ該当行以外のデータ削除。

以上。

ブログ アーカイブ

ラベル

このブログを検索

スポンサーリンク

自己紹介

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

QooQ