LibreOffice-VBA-アクティブシート以外のシートを全部削除する

2019/11/06

プログラム

t f B! P L
LibreOfficeでVBAマクロ実行。
今回はアクティブシート以外のシートを
全部削除するVBAマクロを示す。

■条件
・「祝日」という名前のSheetがある。
⇒マクロで「祝日」Sheetをアクティブにする。
⇒「祝日」以外のSheetを全部削除する。
・エクセル(xlsx)やカルク(ods)ファイルを
ひらいた状態で実行する。

■アクティブシート以外のシートを全部削除するマクロ-LibreOffice-VBA

Option VBASupport 1

Sub sample05a() 'ω'アクティブシート以外のシートを削除
Worksheets("祝日").Activate
    Dim mySht As Worksheet
Dim i As Long
for i=0 to Worksheets.Count - 1        
    For Each mySht In Worksheets 
        If mySht.Name <> ActiveSheet.Name Then mySht.Delete
    Next
next i
End Sub

■マクロ実行結果

マクロ実行前、「祝日」シート以外に11個シートがある。

マクロ実行後、「祝日」シート以外全部のシート削除。

■補足-エクセルVBAでアクティブシート以外のシートを全部削除するマクロ

Sub sample05() 'ω'アクティブシート以外のシートを削除
Worksheets("祝日").Activate
    Dim mySht As Worksheet
    For Each mySht In Worksheets
        If mySht.Name <> ActiveSheet.Name Then mySht.Delete
    Next    
End Sub
エクセルでは上記で「祝日」以外のシートを全部削除できるが、
LibreOfficeでマクロ冒頭に「Option VBASupport 1」
記述して実行した結果。
12シート中、6シートしか削除できない…。
もう1回実行。

6シート中、3シート削除。
この状態でさらにもう1回実行⇒3シート中、1シート削除。
さらに1回⇒2シート中、1シート削除⇒完了、となった。

LibreOfficeの「For Each 〇〇 In Worksheets」
はWorksheetsの半分しか補足できてないっぽい。
そういう仕様か、もしくはバグ。
なので冒頭マクロではワークシート枚数分、
「for next」でループさせている。

余計な回数ループするが、必要なのは
「祝日」シート以外の全シートを削除する
という結果なのでこれでよしとする。

シート枚数増加で
「処理が重くなる or 時間がかかる」
場合には「for next」ループ回数を1/2するなど、
再度検討を行えばいい。これが現場のやり方。
完璧ではないが、必要十分の結果を最短で求める。

「祝日」以外すべて消えてしまえ

という私の熱い想いのこもったマクロである。

■あとがき

今回はブラックボックスの最初の処理の1つとなる。
扱うファイルのデータサイズは小さい方が高速処理できるので、
まず、不要な部分、シートやデータを削除する。

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

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

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

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

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

以上。

ブログ アーカイブ

ラベル

このブログを検索

スポンサーリンク

自己紹介

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

QooQ