0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[VBA] エクセルファイルを開いたり閉じたりする

Posted at

Excel VBAからエクセルファイル(ブック)を扱う方法です。

オブジェクト

Workbookオブジェクトがブックを表しています。
このオブジェクトを管理しているのがWorkbooksオブジェクトです。
単語の最後にsが付いただけです。Workbookの複数形です。
管理しているといいましたが、いわゆるコンテナです。
開いているブック全てが格納されています。
これから開くブックに対してもこのオブジェクトから呼び出します。

特別なブック

上記のWorkbooksオブジェクトを使わずにアクセスできるブックがあります。
まず、VBA(実行しているマクロ)が入っているブックで、ThisWorkbookで表します。
もう一つ、アクティブになっているブックをActiveWorkbookで表すことができます。

ThisWorkbook.Pathでパスが取得できます(基点となるのでよく使います)。
ThisWorkbook.Nameでファイル名が取得できます(まぁ、使いませんけど)。
ActiveWorkbookはあまり使いません。明記していない場合はActiveWorkbookが補完されることが理由の一つ、さらに、Excelでは新たに開いたブックが自動でActiveWorkbookになってしまうことから、実行環境によって意図しない結果になる可能性があるからです。

ブックを開く

Workbooks(Workbookの管理者)に.Add.Openメソッドを使ってブックを開きます。
これらのメソッドは開いたブックオブジェクトを返すので、set + 変数 =で受け取ります。

新規ブック

Dim wb As Workbook
Set wb = Workbooks.Add

既存のブック

既存のブックを開くにはパスが必要です。

Dim wb As Workbook
Set wb = Workbooks.Open(Filename:=パス)

パスは相対パスでも絶対パスでも使うことができます。

名前を付けて保存

SaveAsメソッドを使います。引数にパス(ファイル名)を指定します。

wb.SaveAs Filename:=パス

閉じる

Closeメソッドを使います。
個人的にはsavechanges:=falseを付けることが多いです(ほぼ全て)。
この引数は「変更あるけど保存しなくていいの?」というエクセルからのメッセージを出さないようにするものです。
事前に保存していれば問題ありません。

wb.Close savechanges:=False

小技

開く速度を上げる

エクセルはブックを開いた際、いろいろなことをやっているようです。
再計算してみたり、画面描写を計算したり。
ブックを開く速さはブックの容量によっても変わります。
出来るだけ早くする方法がいくつかあります。

  • 画面描写を止める
  • イベントを止める
  • 再計算を止める
' 止める
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

' ここに処理を記述

' 元に戻す
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True

場合によっては再計算が必要なときもあります。
イベントのことはついつい忘れてしまいます。
なのでマクロが動いているのを見る必要がなければ画面描写(ScreenUpdating)を止めるだけでかなり速くなります。

ReadOnlyを付けて少しだけ速く開く、そして安心感を得る

読み込み専用で開くことで、ほんの少し早く開けるようです。
また、データを変更してしまったかもしれないという不安を除いてくれます。

Openメソッドの引数にReadOnly:=Trueを追加します。

Set wb = Workbooks.open(Filename:=パス, ReadOnly:=True)

おわり

流れとしては、実行ファイル(ThisWorkbook)は手動で開きます。
以降はマクロで、データを保管するファイルを開き(Addで作る)、
データの元が入っているファイルも開いて、保管ファイルにデータを移したりします。
元ファイルが複数ある場合は、処理済みのファイルは閉じてから、新しいファイルを開きます。
なので同時に開いているのは3ファイルということになります。
ただ、数千ファイルを連続で開いて~閉じて~、 開いて~閉じて~とやっていくと、挙動がおかしくなることがあります。
私の経験では5,000ファイルを超えるとアクティベートが変わったり、すごく時間がかかったりします。
面倒ですが、2,000ファイル位に分割して処理することをおすすめします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?