こんにちは、管理人のtsenです。
私は10年以上人事業務を担当しています。
人事業務では単純な繰り返し作業が多く、
業務効率化のために、自分が開発したExcelマクロ(VBA)を公開したところ
「うちの部署の業務でも使いたい!」
「是非Excelマクロを教えてほしい!」
と、多くの需要があることを知り、
より多くの人の役に立てるのではないかとこのサイトを立ち上げました。
現在では、社内で様々な業務効率化ツールの開発を手掛けています。
今回は、その中から
Excelのシート別に個別Excelブック作成する方法について
まとめていきます。
人事業務の「シート分割作業」を効率化しよう
人事業務の中でよくある作業の中に
「一覧データを職場別に分割してメール送信、棚卸作業をしてもらう」
ような作業があると思います。
この場合、すべてのデータを見せるわけにはいかないので
個別ブックに保存しなおさなければならないという事があります。
作業イメージとしては以下のようなものです。
1つのエクセルブックに複数のシートがある状態から
個別のエクセルブックに分割できます。
その時、保存するブックの名称はシート名称にします。
人事業務を効率化するための事前準備
初めてマクロを立ち上げる方はまず、開発タブを表示させる必要があります。
ファイル>オプション>リボンユーザーの設定>開発にチェック
これで、開発タブが表示されます。
開発タブが開いたら
開発タブ>Visual Basic>挿入>標準モジュールで表示します。
標準モジュールに以下のコードを入れてください。
Sub シート分割()
Dim i As Integer
Dim N As Integer 'ファイル作成数
Dim Filename As String '保存するファイル名
Application.ScreenUpdating = False '画面更新を停止
i = 1
Do While i <= Worksheets.Count
Filename = Worksheets(i).Name
Worksheets(i).Copy
With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "\" & Filename & ".xlsx" '元ファイルと同フォルダに保存する
.Close
N = N + 1
End With
i = i + 1
Loop
Application.ScreenUpdating = True '画面更新を再開
MsgBox N & " 個のブックを作成しました。"
End Sub
ここが難しい方は、超初心者向け「初めてのマクロ」を参考にしてください。
Excelシート分割マクロコードの解説~人事業務効率化~
では、コード解説をしていきます。
コードの意味を理解しないと「こういう場合はどうすればいいの?」等、応用が出来ません。
細かい部分は分からなくても概要は理解しておくことが重要です!
Excelマクロ:第1ブロック解説
Sub シート分割()
Dim i As Integer
Dim N As Integer 'ファイル作成数
Dim Filename As String '保存するファイル名
Application.ScreenUpdating = False '画面更新を停止
まず、この部分を解説していきます。
Sub シート分割() は単純に マクロのタイトル(名称)
です。
Dim i As Integerとは、いったい何を意味しているんでしょうか?
「この文字は”こういう意味だよ”」と定義を宣言をする必要があります。
Dim i As Integer = 「これから出てくるiっていうのはInteger(数字)だよ」
とコンピュータに教えてあげているんです。
この宣言をしないで
いきなりコンピュータに「 i 」の数だけ処理をしてね!と話しかけても
「i」って何のことですか?愛?アイ?
と困ってしまうからです。
なので、最初に
これから、「 i 」って出てくるから、それは数字のことだと思ってね!
と教えてあげているんです。
同様に、
Dim N As Integer =「N」は数字(Integer)のことだよ
Dim Filename As String =「Filename」は文字列(String)のことだよ
と、最初に教えてあげているんですね。
Application.ScreenUpdating = False
画面更新の停止とメモが入っていますね。
エクセルって、内容を編集して保存しようとするときに
こんなポップアップ画面が出てきます。
ブックを保存するたびに、「保存しますか?」といちいち聞いてくるのがうっとうしいので
Application.ScreenUpdating = False で このポップアップを出さない
と指示しています。
ちなみに、
「この場所に、○という名前のファイルが存在しますが置き換えますか?」
というポップアップはちゃんと出てくれますので
誤ってファイルを上書きしてしまうという心配はありません。
Excelマクロ:第2ブロック解説
i = 1
Do While i <= Worksheets.Count
Filename = Worksheets(i).Name
Worksheets(i).Copy
With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "\" & Filename & ".xlsx" '元ファイルと同フォルダに保存する
.Close
N = N + 1
End With
i = i + 1
Loop
さて、この部分がこのマクロの肝の部分です。
まず、
i = 1 ですが「 i 」は1を入れてくださいという意味。
中学校の数学なんかの、方程式の問題で
x=1 , y=2 を代入する
みたいな問題ありましたよね?
それと同じで
i = 1 を代入しますという意味です。
続いて、
Do While i <= Worksheets.Count です。
ひとまず、
「 i 」の部分に「 1 」を代入してみましょう。
Do While 1<= Worksheets.Count となりますね。
Worksheets.Countは読んで字のごとく、
ワークシートの数なので、今回の例では「3」ですね。(A社、B社、C社)
これも代入してみましょう。
Do While 1<= 3 となりますね。
ここで、二つ目の重要ポイントです!
~~処理内容~~
Loop
⇒条件式に当てはまる場合に、処理内容を繰り返し行う。
1<= 3ってどんな条件を意味しているかというと
1≦3 は正しい数式なので、処理を実行します。
2≦3 も正しい数式なので、処理を実行します。
3≦3 も正しい数式なので、処理を実行します。
4≦3 は間違った数式なので、処理をしません。
という条件式を書くことにより、3回処理するという事をしています。
tsen
この繰り返しの処理は、マクロではよく出てきます。
覚えておきましょう!
Filename = Worksheets(1).Name は Filenameはワークシートの1シート目の名称
なので、Filenameは「A社」ですね。
Worksheets(1).Copy は ワークシートの1シート目をコピー
With ActiveWorkbook
.SaveAs ThisWorkbook.Path & “\” & Filename & “.xlsx”
.Close
は
元ファイルと同フォルダ.(Path)にFilename(A社)の名称で
保存(Save)して閉じる(Close)
これで、まず、A社.xlsxというファイルが保存されました。
N = N + 1 End With は後々使用する数をカウントしているだけなので
あまり考えなくてOKです。
i = i + 1
ここも重要なポイントです。
i は 1のことでしたよね?そのまま入れると
1 = 1 + 1 ??
と、おかしな式になってしまいます。
正解は i = 1 + 1 と読みます。
次の変数「i」は1+1=2を入れますよ!という意味です。
なるほど!
次は2シート目のB社を処理していくのだから、
変数の「i」を2にして、また同じ処理をするんだね!
その通りです!2シート目、3シート目をコピーして
元ファイルと同フォルダ.にFilenameの名称で
保存して閉じる処理をします。
Excelマクロ:第3ブロック解説
Application.ScreenUpdating = True '画面更新を再開
MsgBox N & " 個のブックを作成しました。"
このようなメッセージボックスを出しています。
人事業務効率化のお役立ちツールを無料公開中
今回は、
Excelマクロでシートを個別のエクセルに分割して保存する方法
について解説してきました。
今回の内容と、こちらの記事の内容を組み合わせて使うとより業務効率化が出来ると思いますよ。
このサイトでは、人事業務の効率化に役立つツールをたくさん紹介しています。
主にExcelマクロを使った無料で導入できるツールになりますので是非取り入れてみてください。
ここまで読んでいただきありがとうございました。