爆速!別ブックを開かずに値を取得する|VBA高速・効率化テクニック(サンプル付き)

2025年8月22日

別ブックを開くのって遅いな~画面もチラチラするし~

別ブックを開いてそこにある値を拾ってくるマクロプログラムをお使いの方、
「実はちょっと遅いんだよな~」と思うことありませんか?
別ブックが容量も軽いCSVならそんなに苦にはならないんですが、めちゃめちゃ容量使ってる
大きなブックだった場合開くのに時間がかかってヤキモキしちゃうんですよね。
他にもブックを開いて→閉じてをしてると画面がチラチラ出たり消えたりするのも鬱陶しい!!

Shironeco(嫁)
Shironeco(嫁)
高速化できて画面がチラチラしない方法ないかな~

別ブックを開かずに値を取得したい

そんなことできるの?って思われるかもしれませんが、一応できます。
仕組みとしては実行するExcelブックの他に新しく別のExcelのアプリケーションを立ち上げ、非表示でブックを開き値を取得→Excelアプリケーションを閉じることで実質「別ブックを開かずに(開いていないように見えている状態で)値を取得」するということです。
「一応」とつけたのはこのためで開いていないように見えますが実は開いていて、でも非表示なので処理も早いし非表示なのでチラチラしないのです。

下準備:参照設定をする

VBAを開いたら「ツール」→「参照設定」から「Microsoft Scripting Runtime」にチェックを入れOKしておいてください。

プログラムを入力する

VBAを開き挿入→標準モジュールで標準モジュールを追加してプログラムを書いていきます。
まず、別のアプリケーションとしてExcelを開きます。

別のExcelを定義

Dim exapp As New Excel.Application

新しく開いた空のExcelを非表示でワークブックとしてSetします。

別のExcelを非表示で開き読取り専用でSetする

Dim thiswb As Workbook
Dim thatwbpath As String

'値を取得するブックのパス
thatwbpath = “C:\Users\shironeco\Desktop\値を取得する別ブック.xlsm"

'警告メッセージを表示しない
exapp.DisplayAlerts = False '表示True/非表示False
'非表示で開く
exapp.Visible = False '表示True/非表示False デバックの時はTrueのがいいかも

Set thatwb = exapp.Workbooks.Open(thatwbpath, , True) '読取り専用で開く

’処理=============================

exapp.Quit '別ブックのExcelを終了させる

VBAで処理が途中で止まってしまったりすると、非表示で開いた別ブックがそのまま開かれたままの状態で
「見えないけど開かれている」というカスが残ってしまいます。
exapp.Quit が実行されない場合も同じことが起きますので、忘れずに入れておいてください。
その場合はCtr+Shift+Escでタスクマネージャーを開き、開いているExcelのアプリケーションをすべて
終了させると直りますよ!(ブックを保存してから消してくださいね)

Sub 別ブックを開かずに値を取得したい()

Dim exapp As New Excel.Application
Dim thiswb As Workbook, thatwb As Workbook
Dim thatwbpath  As String

Set thiswb = ThisWorkbook

'値を取得するブックのパス
thatwbpath = "C:\Users\shironeco\Desktop\値を取得する別ブック.xlsm"

'警告メッセージを表示しない
exapp.DisplayAlerts = False '表示True/非表示False
'非表示で開く
exapp.Visible = False '表示True/非表示False デバックの時はTrueのがいいかも

Set thatwb = exapp.Workbooks.Open(thatwbpath, , True) '読取り専用で開く
'------------------------------------------
'転記処理をする
a = thatwb.ActiveSheet.Cells(1, 1)
thiswb.ActiveSheet.Cells(1, 1) = a
'
'------------------------------------------
exapp.Quit '別ブックのExcelを終了させる
Set exapp = Nothing      'Nothingは一応しておく
End Sub

↑転記処理をするの部分に転記したいシートやセルを指定して値を取得、こちらのブックに貼り付けします。
ここでは別ブックのアクティブシートのA1(.Cells(1,1))をaに代入し、
もとのシートのA1(.Cells(1,1))にaの値を入れています。

コピペをする際は配列に入れるとまた速いので、↓を参考にどうぞ

まとめ:別ブックを開かないと爆速処理ができる

時間も手間も削減!非表示で別ブックのデータ取得VBA

別ブックを開かずに処理すると開いているときより格段早く処理ができるため、取り入れてブックのレベルアップをしてみてください!
今回ご紹介した方法を使えば、複数のブックを一つずつ表示させずに、サクッと必要なセルの値を取得できるようになります。 実際に使えば開いて・待って…というムダがなくなり、作業が一気に快適になるはずです。

非表示での処理なので、作業中の チラつきもなく、ユーザー体験もスムーズ。大量ファイルを扱う職場や定型的な処理があるシーンでは特に威力を発揮します。

テキストデータを収集するならもっと速くできます!
こちらもよかったら

今後のステップ

  1. まずはこのコードで「処理の高速化」を体感してみてください。
  2. 次は他の業務シーンでの応用(シート別、値以外の処理)にチャレンジ!
  3. 効率化のための学びを続けたい方は、書籍や動画教材の活用が効果的です。

VBAを体系的に学びたい方は、以下の教材もおすすめです。

・圧倒的効率化めざしてるならこれ

・Udemyの講座もオススメです

【マクロで自動化】大量の Excel シート、ファイルを作成&集計する VBA マスターコースicon