Excelファイルに、シートを1つにするマクロを入れる手順

Excelファイルを改造して、シートを1つにするマクロを入れる手順をまとめてみました。

マクロを知らなくても使えます。

※那覇空港にて Pixel 3

Excelは、シートを1つにまとめるのが基本

Excelは、ファイル(ブック)に、複数のシートを入れることができます。
しかしながら、同じ種類のデータが、複数のシートに分かれていると、効率よく処理することができません。

image

Excelは、1つのシートにあったほうが、計算、集計が楽だからです。

Screenshot_1

しかしながら、そうはいっても、シートごとに分けたい場合やそういったファイルに出くわす場合があります。
そんなときは、シートのデータを1つずつコピー、貼り付けするか、シートごとに処理(会計ソフトへの取込、集計など)をしなければいけません。
もし、年間12枚のシートならそれができてしまいますが、それでも大変でしょう。

複数のシートのデータを1つにする方法を身につけておきたいものです。
その方法は、Excelマクロ(プログラミング)を使うこと。
そういうと難しく感じるかもしれませんが、この記事の方法なら、マクロを書かなくてもマクロを使えます。
(ただし、理想はプログラミングできることであるのは変わりませんが)

Excelファイルに、マクロ入れる方法

既存のExcelファイルにマクロを入れるなら、次のような手順でやりましょう。

1 既存のExcelファイルを開く

マクロを入れたい、つまりシートを1つにしたいファイルを開きます。

image

2 名前を付けて保存(F12)でマクロ有効ファイル(xlsm)で保存

そのファイルを名前を付けて保存(F12で、Excelマクロ有効ブックで保存しましょう。

image

マクロが入っていないExcelファイルは、xlsx(またはxls)という種類で、マクロが入っているファイルは、xlsm)という種類です。
ここで変更しておきましょう。

3 元のExcelファイル(xlsxまたはxls)を削除

上記2で名前を付けて保存をすると、元のファイル(xlsx)とマクロ入りのファイル(xlsm)とファイルが2つになります。

image

これらの違いは、マクロが入っているかどうかということだけです。
Excelとマクロは、表裏一体、一緒に保存されます。
元のファイルはExcelだけなので削除してしまいましょう。

4 マクロ有効ファイルで、Alt+F11

マクロのファイル(xlsm)に戻り、AltキーとF11キーを同時に押します。

すると、こういったVisualBasicEditor(VBE)というソフトが開きますのが、過度に気にしないようにしましょう。image

5 VBEで、[挿入]→[標準モジュール]

そのままツールバーの[挿入]→[標準モジュール](Alt→E→L)をクリックします。

image

Module1というものが出てきて、右側が白くなればOKです。

image

6 VBEのModule1に次のプログラムを貼り付ける

その白い部分に次のプログラムを貼り付けます。
「merge」(結合という意味)というシートをつくり、そのシートに他のシートをすべて集めるマクロです。

Sub sheetmerge()
    
    'シート「merge」を削除
    On Error Resume Next
    Application.DisplayAlerts = False
    Worksheets("merge").Delete
    Application.DisplayAlerts = True
    
    'シート「merge」を追加
    Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge"
    
    
    'すべてのシートで処理
    Dim w As Worksheet
    For Each w In Worksheets
        'ただし、シート名が「merge」を除く
        If w.Name <> "merge" Then
        
            'コピーする各シートのデータで最も下にあるデータの行を探す(A列にデータがあることが前提)
            Dim From_Max_Row As Long
            From_Max_Row = w.Range("a" & Rows.Count).End(xlUp).Row
            
            '貼り付け先のシート「merge」で最も下にあるデータの行を探す
            Dim To_Max_Row As Long
            To_Max_Row = Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Row
           
           '各シートのデータを1行目からすべてコピーし、「merge」に貼り付けていく
           w.Rows("1:" & From_Max_Row).Copy Worksheets("merge").Range("a" & To_Max_Row + 1)
           
        End If
    Next

End Sub

「Sub」から「End Sub」までをきっちり選択してコピーし、貼り付けましょう。

image

貼り付けたらいったんVBEを閉じ、Excelファイルも保存して閉じます。
これで準備完了です。
(すぐに使うこともできますが、いったん保存したほうがわかりやすいので)

すぐに使いたいときは、下記の「マクロの実行」の項のとおり、F5で実行していただければ。

シートを1つにするマクロを使う方法・注意点

セキュリティ設定の確認

マクロをはじめて使う方は、次の設定を確認しましょう。

[ファイル]→[オプション]→[セキュリティーセンター]→[マクロの設定]で「警告を表示してすべてのマクロを無効にする」になっているかの確認です。

image

マクロファイルを開く

マクロファイルを開くと、次のような警告が出るので、[コンテンツの有効化]でマクロを有効にしましょう。

image

自分に身の覚えのないファイルを開いてこれが出てきた場合は有効にしてはいけません。

また、このような警告が出る場合もあります。
(VBEを開いている場合)

image

マクロを実行

Alt+F11でVBEを開き、先ほど貼り付けたプログラムが表示されていることを確認してから、F5キーで実行します。

image

すると、このように、すべてのシート、今回の場合は、7月、8月、9月が1つのシートのまとまります。

image

もう一度実行すると、シート「merge」をいったん削除して、新たに処理しますので、たとえば、シートの内容を変更したり10月のシートを追加したりしても対応します。
また、行で選択してすべてのデータを集めるようにしてますので、ほぼすべてのデータに対応しているものです。

見出しは集めない、3行目から集めるなどといったご希望の処理はあるでしょうが、ひとまずは集めることからはじめていただければ。
プログラムを変えてみて、どう処理が変わるかを試してみるのもおすすめです。

このプログラムのw.Rows(“1:” & From_Max_Row)をw.Rows(“3:” & From_Max_Row)とすれば、3行目からコピーします。

w.Rows(“1:” & From_Max_Row).Copy Worksheets(“merge”).Range(“a” & To_Max_Row + 1)

“が1つ抜けてもエラーになりますので、ご注意いただければ。
融通が利かないと思われるかもしれませんが、プログラミングってそういうもんなんです。
そのかわりきちんと書いておけば、間違いなくいくらシートがあっても1つにまとめることができます。

融通が利くのは人間だけでよく、繰り返しやるのはExcel、プログラムだけでいいのです。

当ブログの他のプログラムも同様に貼り付けて使うことができますので、試していただければ。

マクロファイルはこちらからダウンロードできます。
EX-ITサンプル 既存ファイルにマクロ.xlsm


■編集後記

昨日は、沖縄国際トライアスロン。
第2回の開催となるこの大会、はじめての参加です。
練習不足か暑さのせいか、ペースが上がらず、アップダウンのあるバイクコースや水が足りなくなるランに苦戦しました。
(スイムはもちろん苦戦)。
なんとかゴールし、ホテルに戻って風呂に入って、セミナー会場へ。
「税理士のためのExcel入門セミナー」を開催しました。
ご参加いただいた皆様、すてきな自宅兼オフィスの会場を提供していただいたひふみ税理士事務所の酒井さん、ありがとうございます。
その後、コーヒー飲みながらホテルのロビーでブログ更新。
なんとかゴールしました。

■昨日の「1日1新」

沖縄国際トライアスロン
沖縄県宜野湾市でExcel入門セミナー開催
ラグナガーデンホテル

■昨日の娘日記
レース中は手を振って応援してくれました。
一緒にゴールも。
セミナー後の懇親会には妻も娘も参加。
やはり人見知りし、別テーブルにて食事しました。
私は行ったり来たり。
最後のほうには、参加者の方にだいぶ興味を示していましたが。

Spread the love