ユーザーフォームで特定シートをコピー、または削除するマクロコードをご紹介します。
シートのコピー・削除は以外と手間がかかるので、VBAを組むと作業高速化できちゃいます。
このページのマクロコードは、コピペで使えます。
ぜひお試しください!
ユーザーフォームを作成して開く
エクセルにコマンドボタンを作成し、ユーザーフォームを開きます。
マクロコードを標準モジュール「Module1」に入力します。
Sub ボタン1_Click()
UserForm1.Show vbModeless
End Sub
マクロコードを「Module1」に入力した画面の様子
ユーザーフォーム内部にマクロコードを入力する
マクロコードを「UserForm1」に入力します。
Option Explicit
Dim ShtName As String
Dim Rc1 As Long
Private Sub CommandButton1_Click()
'シートコピー
ShtName = UserForm1.ListBox1.Value
Sheets(ShtName).Copy After:=Sheets(ShtName)
Call main
End Sub
Private Sub CommandButton2_Click()
'シート削除
ShtName = UserForm1.ListBox1.Value
Rc1 = MsgBox(ShtName & " シートを削除しますか?", vbYesNo + vbQuestion)
'「はい」の場合
If Rc1 = vbYes Then
Application.DisplayAlerts = False
Sheets(ShtName).Delete
Application.DisplayAlerts = True
Call main
Else
'「いいえ」の場合
Exit Sub
End If
End Sub
Sub main()
Dim MyList() As Variant
Dim i As Integer
UserForm1.ListBox1.Clear
With UserForm1.ListBox1
'1つだけ選択
.MultiSelect = fmMultiSelectSingle
'チェックボックス表示
.ListStyle = fmListStyleOption
ReDim Preserve MyList(Sheets.Count)
'シート名を取得
For i = 2 To Sheets.Count
MyList(i) = Sheets(i).Name
Next i
'リストボックスに追加
For i = 2 To UBound(MyList)
.AddItem MyList(i)
Next i
End With
End Sub
Private Sub UserForm_Initialize()
Call main
End Sub
マクロコードを入力する場所「UserForm1」
動作
「ユーザーフォームを開く」ボタンをクリックして、ユーザーフォームを起動します。
[ ListBox1 ] にシート名の一覧が表示されます。
シートをコピーしたいとき
ユーザーフォームからコピーしたいシートを指定して、「コピー」ボタンをクリックします。
選択したシートのコピーを作成しました。
[ListBox1] に コピーとして作成したシート名が即表示されます。
シートを削除したいとき
ユーザーフォームから削除したいシートを選択して、「削除」ボタンをクリックします。
メッセージボックスが表示されるので、シートを削除するか選択します。
・「はい」をクリックすると、選択したシートを削除します。
[ListBox1] が即時更新され、削除したシート名が消えます。
・「いいえ」をクリックすると、シートを削除せず処理をキャンセルすることができます。
この記事がお役に立ちますと幸いです。
・【ExcelVBA】ユーザーフォーム作成の事例まとめ
「たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】」
「5時間かかる作業が3時間でできます」ではなく「1秒で終わらせます」へ
毎日の業務を瞬時に終わらせるしくみを解説