アクセスの外部データ(エクセル)の取り込み。VBAの質問です。
アクセス2003 エクセル2003
不要な行・列がある場合の外部データ取り込みVBAを教えて下さい。
今は、エクセルで削除して取り込んでいます。
アクセスに「得意先リスト」というテーブルを作っています。
コード(テキスト型)主キー
名称(テキスト型)
フリガナ(テキスト型)
郵便番号(テキスト型)
住所1(テキスト型)
住所2(テキスト型)
TEL(テキスト型)
FAX(テキスト型)
エクセルブック[得意先リスト.xls]
シートは「リスト形式」のみです。
1~4行は不要。
5行目が見出しです。
A~AZ列までデータがあります。
必要な列は、B・C・D・F・G・H・M・N列です。
セルの書式設定は「文字列」です。
[アクセス エクセル インポート 行 列 削除]などでサンプルVBAを探しましたが見つからなかったので質問させて頂きました。
申し訳ありませんが、教えて下さい。
No.2ベストアンサー
- 回答日時:
手作業でやっていることを、そのまま置き換えるのが一番簡単そうです。
Access からオートメーションでExcelのBookを開き
Access で取り出しやすいように整形してから取り込む。
こんな感じ
※MDB ファイルと XLS ファイルは同じフォルダにあると仮定しています。
Sub test()
Dim oXL As Object
Dim oBK As Object
Dim oSH As Object
Dim tmpXls As String
Set oXL = CreateObject("excel.application")
Set oBK = oXL.Workbooks.Open(CurrentProject.Path & "\得意先リスト.xls")
Set oSH = oBK.Sheets("リスト形式")
tmpXls = CurrentProject.Path & "\得意先リストtmp.xls"
With oSH
.Rows("1:4").Delete Shift:=xlUp
.Columns("O:AZ").Delete Shift:=xlToLeft
.Columns("I:L").Delete Shift:=xlToLeft
.Columns("E:E").Delete Shift:=xlToLeft
.Columns("A:A").Delete Shift:=xlToLeft
End With
If Dir(tmpXls) <> "" Then
Kill tmpXls
End If
oBK.saveas filename:=tmpXls
oBK.Close SaveChanges:=False
oXL.Quit
Set oXL = Nothing
'CurrentDb.Execute ("delete * from 得意先リスト")
'↑既存レコード削除ですので必要に応じて!!
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
"得意先リスト", tmpXls, hasFieldNames:=True
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
"得意先リスト参考までに", tmpXls, hasFieldNames:=True
MsgBox "終了"
End Sub
参考になるかと思われるところ(私も以前どっぷりとハマリましたorz)
http://hanatyan.sakura.ne.jp/vbhlp/ExcelErr.htm
http://homepage1.nifty.com/rucio/main/technique/ …
nicotinism様、
基本的な起動・終了処理のサイトのご紹介ありがとうございます。
作成して頂いたVBAにコメントを追加して使わせて頂きました。
Set oSH = oBK.Sheets("リスト形式")
tmpXls = CurrentProject.Path & "\得意先リストtmp.xls"
リスト形式を開き、行・列の削除処理
得意先リストtmp.xlsに名前を変えて保存
得意先リストtmp.xlsをTransferSpreadsheetメソッドを使いインポートするのですね。
完成しました。ありがとうございました。
No.1
- 回答日時:
『エクセルのシート全体』を取りこむ、機能であって、融通は利かないでしょう。
『CSVファイル』は1レコード目、2レコード目や、各項目の定義はあるから対応可能。
案1)
このままシート全体を取りこんで、
クエリ実行で、テーブルの先頭4レコードを削除する、フィールドを削除する。
案2)
シートをCSV形式にしておいて、VBAでレコード、項目を判断して取り込む。
案3)
エクセル側でエクスポート用の別シートを編集する
layy 様
アドバイスをありがとうございます。
クエリ実行で、テーブルの先頭4レコードを削除する、フィールドを削除する。
CSV形式にする。
という方法もありのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Excel(エクセル) エクセルデータからの必要項目抽出方法を教えてください 6 2022/08/12 15:55
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(職業・資格) データ分析実務スキル検定(Citizen級)学習方法 1 2022/12/18 18:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数百万件レコードのdelete
-
Accessにインポートしたら並び...
-
Access VBA Me.Requery レコー...
-
Accessの重複クエリで最小以外...
-
3つ以上のテーブルをUNIONする...
-
ACCESSデーターベースの差分バ...
-
Accessで重複したデータを一件...
-
Access 削除クエリが重い
-
DB INSERT 時の排他制御について
-
アクセスが重い!!
-
Access カレントレコードがあり...
-
テーブルのレコード削除ができ...
-
Access 1レコードずつcsvで出力...
-
MSAceess テーブル結合でメモリ...
-
データの二重表示の原因
-
ACCESSのBookmarkプロパティの...
-
ACCESSファイルを開こうとする...
-
Accessでの排他制御
-
SQLデータ修正時に『このレコー...
-
2つの項目が重複するレコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessにインポートしたら並び...
-
データの二重表示の原因
-
数百万件レコードのdelete
-
2つの項目が重複するレコード...
-
3つ以上のテーブルをUNIONする...
-
Access VBA Me.Requery レコー...
-
Accessでの排他制御
-
Access 1レコードずつcsvで出力...
-
非連結サブフォームのレコード...
-
Access 削除クエリが重い
-
(ACCESS)並び替えをしないで...
-
Access カレントレコードがあり...
-
ACCESSのBookmarkプロパティの...
-
Accessでの禁止文字チェック
-
SQLServerで同一条件レコードの...
-
Accessで重複したデータを一件...
-
ManagementStudioからのデータ削除
-
Accessの重複クエリで最小以外...
-
フォームからのレコード削除に...
-
ACCESSファイルを開こうとする...
おすすめ情報