● ファイルを開かずに特定のデータを取得する。
● 相手のファイルを開かずに、こちらのデータを複数行書き込む
Option Explicit        ' 書き忘れたら動作しない。
------------------------------------------------
Sub 相手のファイルを開かずにこちらのデータを複数行書き込む()
  ' このプログラムは、Excel 2007 以前のデータベースファイルを使用する場合である。
  ' 拡張子は、 xls になっている。

Dim Cnn As ADODB.Connection
Dim Rec As ADODB.Recordset
Dim i As Integer

Set Cnn = New ADODB.Connection
Cnn.Provider = "Microsoft.Jet.OLEDB.4.0"         ' ここが違うところである。

'Excel97,2000のブックはExcel8.0で設定する
Cnn.Properties("Extended Properties") = "Excel 8.0"    ' ここが違うところである。

Cnn.Open "E" & ":" & "\" & "TestData.xls"

Set Rec = New ADODB.Recordset
Set Rec.ActiveConnection = Cnn
Rec.Open "[Sheet2$]", , adOpenKeyset, adLockPessimistic, adCmdTable

     'データを追加する
For i = 2 To 4
     '新しいレコードを追加する
Rec.AddNew
Rec!製番 = Range("A" & i)
Rec!日付 = Range("B" & i)
     'カレント行の内容を更新する
Rec.Update
Next

Rec.Close
Cnn.Close
Set Rec = Nothing
Set Cnn = Nothing

End Sub
Eドライブのファイルに、データが追加された。
このファイルから、データベースを開かないで
このデータを追加する。
Eドライブにこのようなデータベースがある。
そのデータの最下行に、こちらのデータを
追加して書き込む。
Option Explicit
------------------------------------------------
Sub 実績を取得する()
'Excel 2007バージョンのファイルの取得
'Microsoft ActiveX Data Objects 2.1 Library 以上 2.8は不可
'ツール - 参照設定にてチェックを付ける。

Dim Cnn As ADODB.Connection
Dim Rec As ADODB.Recordset
Dim intMon As Integer

Worksheets("Sheet2").Select
Range("B3:O50").ClearContents

Set Cnn = New ADODB.Connection
Cnn.Provider = "Microsoft.ACE.OLEDB.12.0"

'Excel97,2000のブックはExcel8.0で設定する
Cnn.Properties("Extended Properties") = "Excel 12.0"

Cnn.Open "E" & ":" & "\" & "Book2.xlsm"

Set Rec = New ADODB.Recordset
Set Rec.ActiveConnection = Cnn
Rec.Open "[集計$F21:F22]", , adOpenKeyset, adLockPessimistic, adCmdTable
     ' BooK2.xlsm の集計シートの F22 のセルに、合計値が Sum 関数で記載されている
     ' ものを取得する。
     ' ここでは、[集計 $ F21:F22]と記入しないで、[集計 $ F22]と記入すればエラーになるし、
     ' [集計 $ F22:F22] と記入すれば、データが取得されない。
     ' 取得するデータの一つ上のセルから、取得するセルまでを範囲としなければならない。

Worksheets("Sheet2").Range("B4").CopyFromRecordset Rec

Rec.Close
Cnn.Close
Set Rec = Nothing
Set Cnn = Nothing

End Sub
ファイルを開かずに取得したデータである。
上図のようなデータがEドライブにあるのを、ファイルを開かずに金額の合計値を取得する。
'Excel 2007バージョンのファイルの取得
'Microsoft ActiveX Data Objects 2.1 Library 以上 2.8は不可
'ツール - 参照設定にてチェックを付ける。
参照可能なライブラリファイルが開くので、Microsoft ActiveX Data Objects ―Library が上部にない場合は、
スクロールをクリックして下部のM範囲を探せば見つかるので、Objects 2.1以上2.8以下にチェックを付けると、
上部に移動される。[OK]をクリックして閉じる。
尚、一度チェックを付けるとExcelを終了しても記憶される。

Dim Cnn As ADODB.Connection     ' この変数定義はこのまま使用する。
Dim Rec As ADODB.Recordset       ' この変数定義はこのまま使用する。
Dim intMon As Integer          ' この変数名は変更可能です。

Worksheets("当月仕入").Select       ' 操作ファイルのシート
Range("B4:H100").ClearContents    ' セル選択のデータ消去

Set Cnn = New ADODB.Connection   ' このままの文法で使用する。

'Excel97,2000のブックはExcel 8.0で設定する
'Excel2007以上のブックはExcel 12.0で設定する

Cnn.Provider = "Microsoft.ACE.OLEDB.12.0"         ' バージョンで変わる
Cnn.Properties("Extended Properties") = "Excel 12.0"    ' バージョンで変わる

Cnn.Open "E" & ":" & "\" & "当月仕入データファイル.xlsm"  ' 開かないで参照するファイル

Set Rec = New ADODB.Recordset              ' このままの文法で使用する。
Set Rec.ActiveConnection = Cnn                ' このままの文法で使用する。
Rec.Open "[当月仕入$B2:H100]", , adOpenKeyset, adLockPessimistic, adCmdTable
                            ' 開かないで参照するファイルのシート名と取得範囲
Worksheets("当月仕入").Range("B2").CopyFromRecordset Rec
                            ' 取得した範囲を転記するシート名

Rec.Close                        ' Recを閉じている
Cnn.Close
Set Rec = Nothing
Set Cnn = Nothing 

Option Explicit                     ' 先頭に書き忘れてはいけない。
----------------------------------------------------------------------

VBAで[ツール]-[参照設定]の順のクリックする。
● ファイルを開かずに、データを取得するような操作の設定方法
上図がデータを取得したものである。
下がプログラムである。
Eドライブに、上図のようなデータベースがある。ファイル名は「当月仕入データファイル.xlsm」である。
下のファイルは、「当月仕入データファイル.xlsm」を開かずに、必要なデータを取得する。
相手のファイルを開かないと、[開く]-[閉じる]の動作が無いので実行が速い。
容量の大きなデータベースでは、顕著に時間短縮が分かる。
● 相手のファイルを開かずにデータを取得する。
 
基本的なマクロの習得
相手のファイルを開かないでデータの操作


実際に使っているシステムの内容で解説
  EXCEL VBA 講座