前回同様,
Excelの VBAで 既存のワークシートを名前を変えてコピーするサブ関数として作ります。
VBA sub関数「既存のワークシートを名前を変えてコピー」の仕様
Excel VBAで現在あるワークシートの1シートを特定して
ワークシートの最後へコピーを行い、
指定したかワークシート名に変更後、
その追加したワークシート開く(アクティブにする)プログラム
もし既に、同一名のワークシートが存在している場合は、
コピーは行わずそのワークシートを開く(アクティブにする)仕様で作ります。
VBA sub関数「既存のワークシートを名前を変えてコピー」のソース
ソースの前半部分で、
前回の同様に同一名のワークシートが存在しているかチェック、
存在の有無フラグ SheetExistをセット、
存在していればそのワークシートをSelectメソッドでアクティブにします。
後半部分は、
同一名のワークシートが存在してなければ、
ワークシートの最後に既存のワークシート「Template1」をコピー
指定されたワークシート名に変更
ワークシートをコピーした時点で、そのシートはアクティブになります。
ソースです。
' ' 既存のワークシートを名前を変えてコピー ' SheetName = コピーしたワークシート名 ' Sub CopySheetLast(SheetName As String) Dim I As Integer Dim S As String Dim SheetExist As Boolean SheetExist = False For I = 1 To Worksheets.Count S = Worksheets(I).Name If S = SheetName Then ' 同一名のワークシート在り SheetExist = True Worksheets(I).Select Exit For End If Next If SheetExist = False Then ' 新しくワークシートを追加 Worksheets("Template1").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = SheetName End If End Sub
VBA sub関数「 既存のワークシートを名前を変えてコピー」の実行
作った「 既存のワークシートを名前を変えてコピー」関数を実行させる簡単なsub関数を用意しました。
Sub test() ' 「最後にシートを追加」というワークシートを最後に追加 CopySheetLast ("Copyしたテンプレート") End Sub
実行前
実行後
既存していたワークシート「Template1」が「Copyしたテンプレート」の名前のワークシートで最後にコピーされました。
次は、
既に同一名のワークシートがある場合で検証を
実行前です
既に同一名のワークシートがある場合での実行後
新たなワークシートは作られず
指定した名前のワークシートが開かれました(アクティブに)
この「既存のワークシートを名前を変えてコピー」関数も改修
前回の記事同様、
VBA 新しいワークシートを追加する
Excel VBA 新しいワークシートを追加するサブ関数として作ります。 VBA sub関数「VBA 新しいワークシートを追加」の仕様 Excel VBAで現在あるワークシートの最後に、新しいワークシートを名前を指定して追加後、その追加した...
Excelのワークシート名の特性上、
ワークシートの重複判定の部分と、
戻り値で有効なワークシート名を取得できるようにする必要が有るため
改修しました。
そのソースは、
' 既存のワークシートを名前を変えてコピー ' SheetName = コピーしたワークシート名 ' ' 【戻り値】有効なワークシート名 ' Function CopySheetLast(SheetName As String) As String Dim I As Integer Dim S As String Dim CopyS As String Dim SheetExist As Boolean SheetExist = False CopyS = StrConv(LCase(SheetName), vbNarrow) For I = 1 To Worksheets.Count S = Worksheets(I).Name If StrConv(LCase(S), vbNarrow) = CopyS Then ' 同一名のワークシート在り SheetExist = True Worksheets(I).Select CopySheetLast = S Exit For End If Next If SheetExist = False Then ' 新しくワークシートを追加 Worksheets("Template1").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = SheetName CopySheetLast = SheetName End If End Function
になります。