Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2013)
Excelシートのインポート範囲の設定方法について
投稿日時: 20/10/06 10:47:38
投稿者: tekuteku5050

お世話になります。
ADOで下記の勤務合計表シートをT_勤務合計表Dummyテーブルに取り込むコードを記述しておりました。
しかし、Excelシートの行数が作成月によって、変化する場合がある事が分かりました。そこで、空行の位置を取得して、そこから−1の行数までを取り込みたいのですが、方法が良く分かりません。何方かアドバイス頂けないでしょうか?先頭行のA9はフィールド名として取得しております。最終行の合計欄は除外しております。
 
VBAコード抜粋
DoCmd.TransferSpreadsheet acImport _
        , , "T_勤務合計表Dummy", GetFileNameImport, , "勤務合計表!A9:D85"
 
Excelファイルの勤務合計表のシート
   A   B   C    D
9 社員CD 氏名 勤務時間 残業時間



85
86     合計
 

回答
投稿日時: 20/10/06 13:03:57
投稿者: sk

引用:
勤務合計表シートをT_勤務合計表Dummyテーブルに取り込むコード

引用:
Excelシートの行数が作成月によって、変化する場合がある事が分かりました。
そこで、空行の位置を取得して、そこから−1の行数までを取り込みたいのですが、
方法が良く分かりません。

引用:
DoCmd.TransferSpreadsheet acImport _
        , , "T_勤務合計表Dummy", GetFileNameImport, , "勤務合計表!A9:D85"

・セル範囲のアドレスを指定するのではなく、
 (あらかじめ定義された)名前付きセル範囲を指定して
 インポートを実行するようにする。
 
・帳票のヘッダー/フッターに相当する情報が記録された行/列を含まない
 ( 1 行目が列見出し行、2 行目以降がデータ行という表構造の)
 ワークシートの名前を指定してインポートするようにする。
 
オートメーションによってインポート元のブックを開き、
 インポート対象となるセル範囲の最後のデータ行の番号を
 取得してインポート範囲のアドレスを生成した上、
 ブックを閉じてからインポートを実行するようにする。
 
以上のいずれかで対応することになるかと。

回答
投稿日時: 20/10/06 15:10:21
投稿者: hatena
投稿者のウェブサイトに移動

DoCmd.TransferSpreadsheet acImport _
        , , "T_勤務合計表Dummy", GetFileNameImport, , "勤務合計表!A9:D"

 
というように最後の行番号を省略するとデータのある最終行までをインポートしてくれます。
合計行があるとそれも取り込んでしまいますので、インポート後に最終行を削除するようにすればいいでしょう。

投稿日時: 20/10/08 11:04:51
投稿者: tekuteku5050

sk様、hatena様
アドバイス有難うございます。
 
Excelシートの行番号を指定しなければデータがある行までインポートしてくれるんですね。知りませんでした。
一旦、合計欄まで取り込んで、その後クエリで合計欄のみ抽出条件から外すように指定して、上手くいくように
なりました。本当に助かりました。ありがとうございます。