オートフィルタで抽出した行以外を削除するマクロ
を示す。
■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-オートフィルタで抽出した行以外を削除するマクロ
※【処理】この記事。オートフィルタ該当行以外のデータ削除。
以上。