エクセルでデータを管理することは多いと思います。そんなとき、1つのファイルで別のファイルにデータを反映させたい…なんて思うこともあります。今回は、そのような方向けに、「エクセルで別ファイルを自動的に反映させる」方法についてご説明致します。
Written By 巫 夏希
エクセルを使う時に複数のファイルに同じデータを入力する機会などありますでしょうか?
たとえば仕事で【管理用】と書かれたファイルがあるとしましょう。同じように【印刷用】というファイルを作ったとして、膨大なデータから一部だけを抜き出したいとか、そういうこともあるかもしれません。
今回は、エクセルで別ファイルを自動的に反映させる方法と、その注意点についてご説明したいと思います。
※記事内の写真は、筆者のPCでエクセルを使用し、キャプチャしたものに加工を加えたものとなります。
エクセルで別ファイルにデータを自動的に反映させる場合とは、どういう場合を指すのでしょうか。
たとえば、バックアップ。たとえば、確認用に保管しておく。たとえば、データの管理や評価をするために一部だけデータを抜き取りたいなど、様々な場合が考えられます。
一つのファイル(以下、元ファイルと言います)と、コピーするファイル(以下、コピー先ファイルと言います)を同一のフォルダに格納します。
今回の場合、下記のような学生のテストの点数と平均点が格納された元ファイルを「名簿A.xlsx」、コピー先ファイルを「名簿B.xlsx」とします。
写真は、名簿A.xlsxのものです。
このとき、名簿B.xlsxは空白(新規作成ファイル)であることがポイントになります。
ここで、名簿Bを開きます。
名簿Aと名簿Bを見やすくするために、「整列」という動作を挟みます。
表示タブの、ウインドウと呼ばれるグループ内に「整列」というボタンがありますので、そこを押下します。
「左右に並べて表示」を選択して、「OK」と押下します。
すると、下の図のように、名簿A.xlsxと名簿B.xlsxが並べて表示されるようになりました。
今回は、名前と数学の点数だけを抽出出来るようにします。
名前の列はA列、数学の点数はB列ですので、A列とB列を選択し、コピーします。
③でコピーしたデータを貼り付けるのですが、ここで注意点が一つあります。
ただの貼り付けではなく、「リンク貼り付け」を選択します。(「形式を選択して貼り付け」の上にある図の一番右側です)
成功すると、下の図のようになり、A1が下記のように表示されているはずです。
「=[名簿A.xlsx]Sheet1!A1」
この方法を利用した場合の注意点を簡単に説明致します。
この方法を利用すると、名簿A.xlsxのデータを直接名簿B.xlsxが参照しに行っているということになるので、元ファイルのデータが書き替えられると、データが書き換わってしまいます。(自動的に参照ポイントが変わるので、これは仕方がありません)
また、同一フォルダに格納しておかないと、リンクの参照がうまく行かなくなります。これも注意が必要です。
今説明したのは、マクロを使わない場合でしたが、次にマクロを使った場合についてご説明します。
まず、マクロについて簡単にご説明したいと思います。
マクロとは、マイクロソフトのエクセルに標準装備されている、複数の手順を記憶して、自動的に実行させる機能のことを指します。
今回の場合であれば「元ファイルからのデータをコピーする」ことが複数の手順で、それを記憶させて、たとえばボタン1つ押せばデータが勝手にコピーされるようなことを言います。
次の項目から、簡単にマクロを使って自動的に別ファイルに反映させる手順について、説明していきたいと思います。
まず、マクロを使うことの出来るファイルを作成します。
今まで作成していたファイルは、xlsxという拡張子(ファイルにつけられる、そのファイルを識別するもの。たとえばテキストファイルならtxtの拡張子がつきます)で作成していましたが、今回は、マクロを使うため、xlsmというファイルで作り直します。
このファイルを「名簿A.xlsm」と呼び、以下「マクロファイル」と呼ぶことにします。
それでは、実際にマクロを作ってみようと思います。
「表示」タブ右端にあるマクロボタンを押下します。
まだマクロが無いと思いますので、適当に名前をつけて「作成」ボタンを押下します。
下の図のような画面が出てきたら、マクロの作成が完了です。さっそく打ち込んでみましょう。
マクロは、今回の場合このように打ち込めば良いと思います。
Dim sh As Worksheet
Dim v As Variant
Application.ScreenUpdating = False
Worksheets.copy
For Each sh In Worksheets
v = sh.Range("A1:B11").Value
sh.Cells.ClearContents
sh.Range("A1:B11").Value = v
Next
Application.ScreenUpdating = True
(最初と最後の部分は省いてあります。)
作成したら、忘れずに保存しておきましょう。
あとは、マクロから「copy」を選択し、実行すれば、コピーされたファイルが自動的に作成されます。
今回説明した場合では、自動的にファイルを作成することは出来ますが、更新することは出来ません。ファイルを常に作り続けてしまうため、このマクロにさらに改良を加える必要があります。
また、名前を自分で決められないため、その場合は、マクロに、書き出しファイルの名前を指定する実行命令を記載すれば問題無いと思います。
また、自動的に反映させる方法ではなく、どちらかといえば、半自動的に「ボタン一つで」反映させるやり方なので、そこも注意が必要です。
いかがだったでしょうか。エクセルで別ファイルに自動的に反映させる方法として、マクロを使わない方法と使う方法があります。
マクロを使わない方法は、セルを「リンク貼り付け」で貼り付けること。その場合は、元ファイルが更新された場合勝手に更新されてしまうことと、同一のフォルダに保管しておく必要があることが注意点としてあげられます。
マクロを使う方法は、範囲を指定すればどの部分でも反映させることが出来ます。しかし、元ファイルが更新された場合は、再度ファイルを作り直す必要があることや、自動的に反映というよりかは半自動的に反映させるやり方であることに注意が必要です。