大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、別ブックや別シートに、条件別で転記する方法について、ご紹介します。別シートや別ブックに転記するには、「Worksheets」や「Workbooks」を使います。条件別で、転記する際には、オートフィルタを使ったり、重複しないリストの作成をすると便利です。

はじめに

この記事では、条件別で、別シートや別ブックに転記する方法について、ご紹介します。

別シートに転記する場合は、「Worksheets(シート名)」を使います。

別ブックに転記する場合は、「Workbooks(ブック名)」を使うとできます。

オートフィルタや、重複しないリストを作成すると、うまく条件別で、転記することができます。

では、条件別で、別シートや別ブックに転記する方法について、解説していきます。

この記事で紹介すること

  • 条件別で別シートに転記
  • 条件別で別ブックに転記

目次から見たい項目へ移動すると便利ですよ。

目次

VBAで別シートに転記する

VBAで、別シートに転記する方法について、ご紹介します。

セルの値を別シートに転記

セルの値を、別シートに転記する場合は、「Worksheets(シート名)」を使うとできます。

「Sheet1」の値を、「Sheet2」に転記するVBAコードです。

Sub TEST1()
    
    '別シートに転記
    Worksheets("Sheet1").Range("A1:C1").Copy Worksheets("Sheet2").Range("A1")
    
End Sub

「Sheet1」に次のように値を入力しました。

「Sheet1」の値

Sheet1に値を入力

すでに、「Sheet2」はあることとしています。

では、VBAコードを実行してみます。

「Sheet2」に値を転記

Sheet2に値を転記する

「Sheet2」に値を、転記できました。

シートを追加して転記(Worksheets.Add)

次は、シートを追加して、追加したシートに値を転記してみます。

シートの追加は、「Worksheets.Add」を使うとできます。

シートを追加して、追加したシートに値を転記するVBAコードです。

Sub TEST2()
    
    '別シートを追加
    Worksheets.Add after:=ActiveSheet
    '別シートに転記
    Worksheets("Sheet1").Range("A1:C1").Copy ActiveSheet.Range("A1")
    
End Sub

手順は、

  • シートを追加
  • 値を転記

という流れです。

「Sheet1」に値を入力しました。

「Sheet1」の値

Sheet1に値を入力

では、VBAコードを実行します。

まず、シートを追加すると、「Sheet2」が作成されます。

「Sheet2」が追加される

Sheet2が追加される

追加したシートに、「Sheet1」の値が転記されます。

追加したシートに値を転記

追加したシートに値が転記される

追加したシートに、値が転記されました。

こんな感じで、シートを追加して、値を転記する場合は、「Worksheets.Add」を使います。

条件別で別シートに転記

次は、条件を指定して別シートに転記してみます。

次の表を用意しました。

使う表

表を用意

この表で、支店が「東京」の値だけを、別シートに転記してみます。

VBAコードは、こんな感じになります。

Sub TEST3()
    
    '支店を東京でフィルタ
    Worksheets("Sheet1").Range("A1").AutoFilter 2, "東京"
    'シートを追加
    Worksheets.Add after:=ActiveSheet
    'フィルタしたデータを、別シートに転記
    Worksheets("Sheet1").Range("A1").CurrentRegion.Copy ActiveSheet.Range("A1")
    'フィルタを解除
    Worksheets("Sheet1").Range("A1").AutoFilter
    
End Sub

手順は、

  • ①オートフィルタで、「東京」でフィルタする
  • ②シートを追加する
  • ③フィルタした表を、追加したシートに貼り付け
  • ④フィルタを解除する

という流れです。

では、VBAコードを実行します。

「東京」でフィルタ

まず、支店が「東京」でフィルタされます。

支店が「東京」でフィルタされる

シートを追加

次に、シートが追加されます。

シートが追加される

追加したシートに転記

最後に、フィルタしたデータが、追加したシートに貼り付けられます。

フィルタしたデータが追加したシートに貼り付けられる

条件を指定して、別シートにデータを転記できました。

こんな感じで、条件を指定する場合は、オートフィルタを使うと便利です。

条件別で複数の別シートに転記

次は、条件別で、複数の別シートに転記する、というのをやってみます。

先ほどと同じ表を使います。

使う表

表を用意

支店は、「東京」、「大阪」、「名古屋」、「福岡」の4つがあります。

この表の支店ごとに、別シートに転記します。

VBAコードは、こんな感じになります。

Sub TEST4()
    
    '「支店」で重複しないリストにフィルタする
    Dim a
    Set a = Worksheets("Sheet1").Range("A1").CurrentRegion.Columns(2)
    a.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    
    '重複しないリストを別セルにコピー
    a.Copy Worksheets("Sheet1").Range("E1")
    Worksheets("Sheet1").ShowAllData 'フィルタ解除
    
    '重複しないリストを、配列に格納
    Dim Data
    With Worksheets("Sheet1")
        Data = .Range(.Range("E2"), .Range("E2").End(xlDown))
    End With
    
    '重複しないリスト分ループ
    For i = 1 To UBound(Data, 1)
        
        '支店を、フィルタする
        Worksheets("Sheet1").Range("A1").AutoFilter 2, Data(i, 1)
        
        '別シートを追加
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        
        'フィルタしデータを、追加したシートに転記
        Worksheets("Sheet1").Range("A1").CurrentRegion.Copy ActiveSheet.Range("A1")
        
        'フィルタ解除
        Worksheets("Sheet1").Range("A1").AutoFilter
    Next
    
    '重複しないリストをクリア
    Worksheets("Sheet1").Range("E1").CurrentRegion.Clear
    
End Sub

手順は、

  • ①重複しないリストを作成
  • ②重複しないリスト毎に、フィルタする
  • ③シートを追加して、フィルタしたデータを転記
  • ④重複しないリスト分だけループする

という流れです。

では、VBAコードを実行します。

手順①:重複しないリストを作成

まず、重複しないリストがフィルタされます。

重複しないリストがフィルタされる

次に、重複しないリストが別セルに入力されます。

重複しないリストが別セルに入力される

手順②:重複しないリスト毎に、フィルタする

作成した重複しないリストの「東京」でフィルタされます。

重複しないリストの「東京」でフィルタされる

手順③:シートを追加して、フィルタしたデータを転記

シートが追加されて、フィルタしたデータが転記されます。

シートが追加されて、フィルタしたデータが転記される

作成した重複しないリストの「東京」でフィルタされたデータが、別シートに転記されます。

手順④:重複しないリスト分だけループする

同じ工程が、「大阪」、「名古屋」、「福岡」で繰り返されます。

【結果】条件別で別シートに転記

結果は、次のような感じで、条件別で別シートに転記されます。

元シート
東京の条件で転記されたシート
大阪の条件で転記されたシート
名古屋の条件で転記されたシート
福岡の条件で転記されたシート

条件ごとに、別シートに転記したい場合は、こんな感じでできます。

条件別に、別シートに転記したい場合は、「オートフィルタ」と「重複しないリストの作成」を使いこなすと、便利です。

VBAで別ブックに転記する

次は、別ブックに値を転記する方法について、ご紹介します。

別ブックに転記

別ブックに値を転記する場合は、「Workbooks(ブック名)」を使います。

別ブックに値を転記するVBAコードは、こんな感じになります。

Sub TEST5()
    
    '別ブックを開く
    Workbooks.Open Filename:=ThisWorkbook.Path & "\別ブック.xlsx"
    
    '別ブックに転記
    Set a = ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion
    Set b = Workbooks("別ブック.xlsx").Worksheets("Sheet1").Range("A1")
    a.Copy b
    
    '別ブックを保存して、閉じる
    Workbooks("別ブック.xlsx").Save
    Workbooks("別ブック.xlsx").Close
    
End Sub

手順は、

  • ①別ブックを開く
  • ②別ブックに値を転記
  • ③別ブックを保存して閉じる

という流れです。

次のブックを用意しました。

転記元のブック

ブックを用意

フォルダ構成

同じフォルダ内に、「別ブック.xlsx」という空のブックを保存しています。

フォルダ構成

では、VBAコードを実行します。

手順①:別ブックを開く

まず、「別ブック.xlsx」が開かれます。

別ブックが開かれる

手順②:別ブックに値を転記

次に、値が転記されます。

値が転記される

「別ブック.xlsx」という別ブックに値を転記されます。

手順③:別ブックを保存して閉じる

最後に別ブックを保存して、閉じます。

【結果】別ブックに値を転記

結果として、「別ブック.xlsx」に値を転記することができます。

「別ブック.xlsx」を開いてみます。

別ブックに値を転記した結果

こんな感じで、すでにある別ブックに値を転記する場合は、別ブックを開いて転記します。

新規ブックに転記(Workbooks.Add)

次は、新規ブックに値を転記するというのをやってみます。

新規ブックを作成するには、「Workbooks.Add」を使います。

新規ブックに値を転記するVBAコードです。

Sub TEST6()
    
    '別ブックを追加
    Workbooks.Add
    
    '新規ブックに、転記
    Set a = ThisWorkbook.Worksheets("Sheet1").Range("A1:C1")
    Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A1")
    a.Copy b
    
    '新規ブックを保存して、閉じる
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\別ブック.xlsx"
    ActiveWorkbook.Close
    
End Sub

手順は、

  • ①新規ブックを追加
  • ②新規ブックに値を転記
  • ③新規ブックを名前を付けて保存して閉じる

という流れです。

先ほど使った、ブックを使います。

用意したブック

では、VBAコードを実行します。

手順①:新規ブックを追加

まず、新規ブックが作成されます。

新規ブックが作成される

手順②:新規ブックに値を転記

次に、新規ブックに値が転記されます。

新規ブックに値が転記される

手順③:名前を付けて保存した後に、閉じる

名前を付けて保存したあとに、閉じられます。

新規ブックを名前を付けて保存後、閉じられる

【結果】新規ブックに値を転記

結果として、「別ブック.xlsx」というブックが作成されて、値が転記されます。

「別ブック.xlsx」を開いてみます。

新規ブックを追加して、値を転記した結果

新規ブックに、値が転記されました。

こんな感じで、新規ブックに値を転記する場合は、「Workbooks.Add」で新規ブックを作成した後に、転記します。

条件別で別ブックに転記

次に、条件別で、別ブックに転記する、というのをやってみます。

次の表を使います。

使う表

表を用意

この表の支店で、「大阪」の値だけを、別ブックに転記してみます。

VBAコードは、次のようになります。

Sub TEST7()
    
    '「大阪」でフィルタ
    Worksheets("Sheet1").Range("A1").AutoFilter 2, "大阪"
    
    '新規ブックを追加
    Workbooks.Add
    
    '新規ブックに、転記
    Set a = ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion
    Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A1")
    a.Copy b

    '新規ブックを、保存して閉じる
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\別ブック.xlsx"
    ActiveWorkbook.Close
    
    '元ブックのフィルタを解除
    Worksheets("Sheet1").Range("A1").AutoFilter
    
End Sub

手順としては、

  • ①支店を「大阪」でフィルタ
  • ②新規ブックを追加
  • ③新規ブックにフィルタしたデータを転記
  • ④新規ブックを名前を付けて保存して、閉じる

という流れです。

では、VBAコードを実行してみます。

手順①:支店を「大阪」でフィルタ

まず、支店が「大阪」でフィルタでフィルタされます。

支店が「大阪」でフィルタされる

手順②:新規ブックを追加

次に、新規ブックが追加されます。

新規ブックが追加される

手順③:新規ブックにフィルタしたデータを転記

次は、新規ブックにフィルタしたデータが転記されます。

新規ブックにフィルタしたデータ転記される

手順④:新規ブックを名前を付けて保存して、閉じる

そして、名前を使えて保存したあと、新規ブックが閉じられます。

新規ブックを名前を付けて保存したあと閉じられる

【結果】「大阪」のデータを別ブックに転記した結果

結果として、「別ブック.xlsx」というブックに「大阪」のデータが転記されます。

条件別に別ブックに転記した結果

「別ブック.xlsx」に支店が「大阪」だけを転記することができました。

条件別で複数ブックに転記

次は、条件別で、複数ブックに転記する方法を、ご紹介します。

次の表を、支店別で、別ブックに転記してみます。

用意した表

用意した表

こちらの表で、それぞれ「東京」、「大阪」、「名古屋」、「福岡」だけの値を別ブックに転記します。

VBAコードは、こちらです。

Sub TEST8()
    
    '「支店」で重複しないリストをフィルタ
    Dim a
    Set a = Worksheets("Sheet1").Range("A1").CurrentRegion.Columns(2)
    a.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    
    '重複しないリストを別セルに入力
    a.Copy Worksheets("Sheet1").Range("E1")
    
    'フィルタを解除
    Worksheets("Sheet1").ShowAllData
    
    '重複しないリストを、配列に格納
    Dim Data
    With Worksheets("Sheet1")
        Data = .Range(.Range("E2"), .Range("E2").End(xlDown))
    End With
    
    '重複しないリストの支店の値で、ループ
    For i = 1 To UBound(Data, 1)
        
        '重複しないリストの値で、フィルタ
        Worksheets("Sheet1").Range("A1").AutoFilter 2, Data(i, 1)
        
        '新規ブックを追加
        Workbooks.Add
        
        '新規ブックに、フィルタしたデータを転記
        Set a = ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion
        Set b = ActiveWorkbook.Worksheets("Sheet1").Range("A1")
        a.Copy b
        
        '新規ブックを保存して、閉じる
        ActiveWorkbook.SaveAs ThisWorkbook.Path & "\別ブック_" & Data(i, 1) & ".xlsx"
        ActiveWorkbook.Close
        
        'オートフィルタを解除
        Worksheets("Sheet1").Range("A1").AutoFilter
    Next
    
    '重複しないリストを削除
    Worksheets("Sheet1").Range("E1").CurrentRegion.Clear
    
End Sub

手順は、

  • ①「支店」で重複しないリストを作成する
  • ②それぞれの「支店」でフィルタする
  • ③別ブックを追加して、転記する
  • ④それぞれの「支店」で①~③を繰り返す

という流れです。

では、実行してみます。

手順①:「支店」で重複しないリストを作成

「支店」で、重複しないリストがフィルタされます。

重複しないリストがフィルタされる

フィルタした重複しないリストが保存されます。

重複しないリストが作成される

手順②:それぞれの「支店」でフィルタする

次に、重複しないリストの1番目のデータである、「東京」でフィルタされます。

東京でフィルタされる

手順③:別ブックを追加して、転記する

別ブックが追加されて、フィルタしたデータが、この新規ブックに転記されます。

新規ブックが追加されて、フィルタしたデータが転記される

手順④:それぞれの「支店」で①~③を繰り返す

これらの手順が、それぞれの「支店」で繰り返されます。

【結果】各支店のデータが別ブックで保存される

結果として、次の別ブックが作成されます。

それぞれの支店で、別ブックが作成される

それぞれのブックは、次のように値が入力されています。

【結果】各ブックのデータ

大阪のデータ
東京のデータ
福岡のデータ
名古屋のデータ

こんな感じで、条件別で、別ブックに転記することができます。

おわりに

この記事では、条件別で、別シートや別ブックに転記する方法について、ご紹介しました。

別シートに転記する場合は、「Worksheets(シート名)」を使って、別ブックに転記する場合は、「Workbooks(ブック名)」を使います。

オートフィルタや、重複しないリストを作成すると、うまく条件別で、転記することができます。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す