今回はアクティブシート以外のシートを
全部削除する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-アクティブシート以外のシートを全部削除する
※【処理】この記事。シート全部削除。
以上。