Access2000VBA・Excel2000VBA独学~別の閉じたExcelファイルを ”閉じたまま” 読み込みや書き込をする方法~5つ
  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
  
  
※参考記事
DAO、ADO、Microsoft Query(ExcelVBAのQueryTableオブジェクト)、では「読み込み」だけでなく、「閉じたまま」の「複雑条件集計」や「書き込み」もできます。
ただし、Excelの場合はなんと「削除」ができないので対応策が必要です。
対応策はこちら。『できないこと』。(←その他の「できないこと」も書いてあります。なお、「あえて削除しない」ことも結構あります。不正対策や整合性維持のためです。基本、削除フラグを立てるだけでも対応できます。もちろん、読み込みだけに使っても構いません。)

Excel2010で、『 開かれていない閉じたままのブック・Excel(xlsやxlsx・xlsm)ファイルのデータ 』を読み込むだけでなく、書き込む方法の一覧表(DAOやADOにて)
~SQLにて「閉じたExcelファイルを ”閉じたまま” 書き込む方法01」~Microsoft Query(QueryTableオブジェクト)を利用する場合~
ADO:Excel2010で、開かれていない閉じたままのブック・Excel(xls)データをできるだけ速く読み込む方法ーその2(ADOにて)
Access2000VBA・Excel2000VBA独学~別の閉じたExcelファイルを ”閉じたまま” 読み込みや書き込をする方法~5つ
  
  

★ はじめに

ExcelVBAでは、他のExcelファイルを「閉じたまま」、読み込むだけでなく書き換えることもできます。その方法にはいろいろあって、今僕のようなExcelド素人にでも分かっているのは本記事でご紹介した5つの方法です。

ただ、一応、書き換える先の表の形態が、「動的な表」になっていることと、その表がこちら ← のルール(小中学生でも守れるルールです)で作成されていることが前提です。
(もしかしたら、イレギュラーな表やクロス集計表であってもなんとかなるかもしれませんが)

また、5つの方法のうち、3つの「SQLを使う方法」は、「SQL」自体を知っている必要があります。(参考記事『用語:「SQL」とは?』、SQL=データ管理の、言わば世界標準の基礎・命令語句です。複式簿記と同じくらい有名です。ループ処理をしなくても複雑な条件でのデータの書き換えや追加・削除などが高速にできます。基礎部分はVBAの10倍は簡単でVBAの10倍は効率よく高速にデータ管理ができます。なので、VBAを覚えながらSQLも覚えるとよいと思います。データを扱う業界ではVBAよりもSQLを知っているほうが、お給料が確実に上です。また、AccessはSQLがベースのソフトですので、Accessも扱いやすくなります。

なお、この5つの方法は、たとえば次のような場合に使えるのではないかと思います。

(a)書き換え先の 別のxlsやxlsx・xlsmを、GetObject関数などで、非表示で開いて処理するような方法をとったときに、動作速度が遅いような場合。(書き換え先のExcelファイルに対して、UNCパス=他のパソコンのxlsやxlsx・xlsmを使っている場合とか)

(b)SQLをよくご存じの方で、VBAでの値の操作(Rangeオブジェクトでの値の操作)をするよりも、「SQLで値の書き換えなどをやりたい」、という場合。

(c)ループ処理なんて書くのがめんどくさいし、コードの可読性も落ちてメンテしにくいので、SQLで少ないコードでやってしまいたい。一括データ書き換えはSQLのほうが便利だからSQLを使いたい。(SQLを使う3つの方法の場合のみ。)

・・・などなど・・・。

ぱっと思いつくだけでもこのようなケースがあると思います。

そのほか、もっと細かく、どの方法がどんな時に適しているか、というのは僕はド素人なので分かりません。ですので、そのことに関してはプロの講師の方に聞いてみてください。

では、以降、5つの方法のご紹介です。

  
  

★ (01)Microsoft Query の結果の表(QueryTableオブジェクト)にて、SQL(Refreshメソッド)で追加・書き換える方法
Access2000VBA・Excel2000VBA独学~SQLにて「閉じたExcelファイルを ”閉じたまま” 書き込む方法01」~Microsoft Queryを利用する場合~

書き換え(更新)には、「UPDATE文」を使います。
追加には、SQL文にて、「INSERT文(INSERT INTO)」を使います。

Microsoft Query の結果の表(QueryTableオブジェクト)は、ケースにもよりますが、一度作ってあれば次から作る必要がないといえばないので、その意味では、この方法は他の4つの方法よりもプログラムコードを少なくしやすいかもしれません。

また、すでにシートに書き換え先の表の内容が表示されており、また、『 書き換え直後に(ほぼ同時に)その結果をすぐに反映させ、書き換え結果をとても確認しやすい 』ので、そういう使い方をしたい場合はこの方法はおすすめかもしれません。
  
  
★ (02)DAOにて、Databaseオブジェクトを使って、SQL(Executeメソッド)で書き換え・追加をする方法
Excel2010で、『 開かれていない閉じたままのブック・Excel(xlsやxlsx・xlsm)ファイルのデータ 』を読み込むだけでなく、書き込む方法の一覧表(DAOやADOにて)

書き換え(更新)には、「UPDATE文」を使います。
追加には、SQL文にて、「INSERT文(INSERT INTO)」を使います。

これ以降の(02)~(05)ですべて同じなのですが、取得したレコードセット(表のデータ)を一括でシートに貼り付けたいとき(貼り付けて加工やテストなどをしたい場合等々含む)などは、これ以降の方法・・・つまり、(01)以外の方法が便利です。

ただ、1つのプロシージャ(VBAプログラムの最小単位)のなかで、(01)の方法とそれ以外の(02)~(05)の方法をミックスさせることもできないことはないので、なんともいえませんが・・・。

  
  
★ (03)DAOにて、Recordsetオブジェクトを使って、EditメソッドやUpdateメソッド、あるいはAddNewメソッドで書き換え・追加をする方法

  
  
★ (04)ADOにて、Connectionオブジェクトを使って、SQL(Executeメソッド)で書き換え・追加をする方法
Excel2010で、『 開かれていない閉じたままのブック・Excel(xlsやxlsx・xlsm)ファイルのデータ 』を読み込むだけでなく、書き込む方法の一覧表(DAOやADOにて)

書き換え(更新)には、「UPDATE文」を使います。
追加には、SQL文にて、「INSERT文(INSERT INTO)」を使います。
  
  
★ (05)ADOにて、Recordsetオブジェクトを使って、Updateメソッド、あるいはAddNewメソッドで書き換え・追加をする方法