HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > 特定のワークシートを新規のブックにコピーする

即効テクニック

シート操作関連のテクニック

特定のワークシートを新規のブックにコピーする

( - )
サンプルでは、マクロを実行しているブックの、特定のシートを新規のブックにコピーしています。まず、新規ブックを追加して、特定のシートを指定するために、インプットボックスを用意します。

インプットボックスは、シート名ではなく、インデックス番号の数値で指定してもらうために、インデックス番号とシート名をメッセージに表示します。

数値以外の指定がされると、「数値が正しくありません」というメッセージが表示され、キャンセルもしくはインデックス番号以外の数値が入力された場合は、処理を行いません。
●サンプル●
Sub Sample() 

    Dim myWorkBook  As String 
    Dim newWorkBook As String 
    Dim mySeet      As Worksheet
    Dim myMsg       As String
    Dim myTitle     As String
    Dim myValue     As Integer
    Dim i           As Integer

    '<マクロを実行中のブック名を取得します。>
    myWorkBook = ThisWorkbook.Name

    '<新規にブックを追加します。>
    Workbooks.Add 

    '<追加したブックの名前を取得します。>
    newWorkBook = ActiveWorkbook.Name

    '<マクロを実行中のブックをアクティブにします。>
    Workbooks(myWorkBook).Activate

    '<新規ブックに保存するシートを指定するための
    'インプットボックスを準備します。>
    '<準備1:インプットボックスのメッセージを設定します。
'     シートをインデックス番号で指定してもらうために、
'     インデックス番号と名前を取得します。>
    myMsg = "シートインデックス番号を入力してください。" & _ 
      Chr(13)                       '←(1)

    For Each mySeet In Worksheets                '←(2)
      i = i + 1 
      myMsg = myMsg & Chr(13) & i & ": " &mySeet.Name 
    Next mySeet 

    '<準備2:インプットボックスのタイトルを設定します。>
    myTitle = "特定シートのコピー"

    '<メッセージ、タイトル、既定値を表示します。
    '返すデータの型は、数値のみに指定します。>
    myValue = Application.InputBox(myMsg, myTitle, 1, , , , , 1)  '←(3) 

    '<選択されたシートを新規ブックの
    '一番目のシートの直前(一番前)に挿入します。
    'キャンセルまたは存在しないシートを指定した場合は、
    '処理を行いません。>

    If myValue < 0 And myValue <= i Then              '←(4)
      Workbooks(myWorkBook).Sheets(myValue).Copy _ 
      Before:=Workbooks(newWorkBook).Sheets(1)           '←(5)
      MsgBox (newWorkBook & "の一番前に、シート名:" & _ 
                       Workbooks(newWorkBook).Sheets(1).Name & "を挿入しました。") 
    Else 
    MsgBox ("インデックス番号以外の数値が入力されたので、" &_ 
                     "処理を行いません。")
    End If 
End Sub 
●補足説明●
  1. 指定した文字コードに対応する文字の値を返すChr関数を使って、メッセージを途中で改行しています。
  2.     
  3. For Each〜Nextステートメントは、オブジェクトコレクション(マクロを実行中のブック)の各オブジェクト(シート)に対して繰り返して処理を行います。     <構文>      For Each element In group       (処理)      Next element     element:コレクションの各要素を繰り返す変数を指定します。     group:オブジェクトコレクションを指定します。     繰り返し処理が開始されると、引数groupの最初のオブジェクト     に対して処理が実行されます。引数groupの中にオブジェクトが     ある限り処理は続けられます。     処理から抜け出すには、「Exit For」を使います。
  4. InputBoxメソッドで指定できる引数Typeは次のとおりです。     値       意味     0        数式     1        数値     2        文字列 (テキスト)     4        論理値 (True またはFalse)     8        セル参照 (Range オブジェクト)     16       #N/A などのエラー値     64       数値配列 引数Type では、上の値を加算して、複数のデータ型を指定することができます。 例えば、文字列または数値が入力できるダイアログボックスを作成するときは、引数Typeの値を1+ 2に設定します。
  5. 比較演算子は次のとおりです。  より小さい : >  以下    : >=  より大きい : <  以上    : <=  等しい   : =  等しくない : <>
  6. Copyメソッドで、シートを新規ブックに追加しています。     <構文>      expression.Copy(Before,After)      expression:対象となるWorksheetsを指定します。      Before:省略可能です。コピーしたシートを特定のシートの直前の位置に挿入          するときに、そのシートを指定します。      After:省略可能です。コピーしたシートを特定のシートの直後の位置に挿入          するときに、そのシートを指定します。
引数Afterを指定すると、引数Beforeを指定することはできません。 引数Beforeと引数Afterの両方を省略した場合は、シートはアクティブシートの直前に追加されます。