0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【VBA】一瞬でシートのコピー、名前変更が出来る方法

Posted at

今回は、簡単にシートを複製するマクロを作ります。

最初に、ソースコードを記載します。

vb.シートのコピー
Sub シートをコピーする()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("見積書")

Dim wsName As String
wsName = ws.Cells(3, 1).Value

' 同名のワークシートがないことをチェック
If nameCheckFlag(wsName) = True Then
    
    MsgBox "同名のシートが存在するため、シートを作成できません。"

Else
    ' 「見積書」シートをコピーして一番右に追加する。
    ws.Copy After:=Sheets(Sheets.Count)

    ' 追加したシートがActiveになっているので、ActiveSheetを通じて名前を設定する。
    ActiveSheet.name = wsName
    
End If

' 見積書シートをアクティブにする
ws.Activate

End Sub

' 同名のワークシートがないかチェックする関数
Function nameCheckFlag(wsName As String) As Boolean
    Dim ws As Worksheet
    
    For Each ws In Worksheets
        If wsName = ws.name Then
            nameCheckFlag = True
            Exit For
        Else
            nameCheckFlag = False
        End If
    Next ws

End Function


今回は、以下のサンプルシートを使用します。
サンプル

マクロを動かすと、見積書シートがコピーされ、末尾に会社名でシートがコピーされます。

サンプル2

それでは、詳細について書いていきます。

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("見積書")

こちらで、コピー対象のwsを変数に格納しています。

Dim wsName As String
wsName = ws.Cells(3, 1).Value

ここでは、コピーしたシートの名前を取得してます。
取得名は会社名としたいので、列は3、行は1を指定しています。

If nameCheckFlag(wsName) = True Then

こちらで、同名のシートがないか確認しています。
同名のシートが存在していた場合は、MsgBoxにてエラーメッセージを表示します。

Function nameCheckFlag(wsName As String) As Boolean
    Dim ws As Worksheet
    
    For Each ws In Worksheets
        If wsName = ws.name Then
            nameCheckFlag = True
            Exit For
        Else
            nameCheckFlag = False
        End If
    Next ws

End Function

上記が同名のシートが存在するかチェックする関数です。

For Each ws In Worksheets
        If wsName = ws.name Then
            nameCheckFlag = True
            Exit For
        Else
            nameCheckFlag = False
        End If
    Next ws

For Eachを使用し、全てのワークシートを1ずつチェックし、
同名なものが1つでもあった場合はTrueを返し、Exit Forでループ終了しています。

ws.Copy After:=Sheets(Sheets.Count)

上記では、コピーしたシートを末尾に設置します。

ActiveSheet.name = wsName

コピーすると、コピーされたシートがアクティブになるため、
会社名を格納したwsNameでシート名を変更します。

ws.Activate

コピーとシート名の変更が完了したら、アクティブシートを見積書に戻してます。

以上が、シートを複製するマクロになります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?