いつも大変お世話になっております。m(_ _)m
質問させてください。
エクセルに存在するデータベースのデータを、アクセスにインポートしたいのですが、アクセス側の「取り込み」みたいなボタンを押せば、ある程度自動的にするような仕組みを作りたいです。
「ある程度」というのは、「ボタン1つですべて実行されるように」というところまで自動化されなくても大丈夫です。
参照先、インポート先のテーブル名などのマウス操作は入っても大丈夫です。
そのようなことができますでしょうか?
できるだけ具体的に教えていただけると助かります。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんにちは。
VBAで、DoCmdオブジェクトのTransferSpreadsheetメソッドでよいのではありませんか?
DoCmd.TransferSpreadsheet acImport,
[シートのタイプ],
[テープル名],
[ファイル名],
[Excel側のフィールドを使うかどうか],
[Excelの範囲]
実際のコード
DoCmd.TransferSpreadsheet acImport, , "TestTable", "D:\Test.xls", True, "Sheet1!A1:D20"
"Sheet1!A1:D20"
これはなくてもよいです。
回答ありがとうございます。
こちらの質問の仕方に不足がありました。
たとえば、エクセルのデータは毎日少しずつ増えていきます。
その「増えた分だけ」インポートする。もしくは、毎回エクセルにあるデータすべて(上書き)するなりを簡素化したいと思います。
頻度はほぼ毎日です。
それを自動化したいのですが、良い方法はないでしょうか?
No.4
- 回答日時:
こんばんは。
#2 のWendy#02 です。確かに、DoCmd.TransferSpreadsheet acImport では、Append は、無理かもしれませんね。Excel側で、差分を別シートに出して、TransferSpreadsheet acImportなら、出来ますが、Access 側が中心になると、差分は、取り出すことは出来ても、フィールド情報がないので、Append できません。そうすると、私の知っているのは、Adoぐらいしか技術がありませんので、以下のようなものを作ってみました。
Const は、それぞれ入力してください。また、テーブル名・フィールド名は、それぞれ入れてください。本来は、テーブルのレコード数を別に数えるつもりだったのですが、いっしょにしてしまいました。
なお、今回は、テーブルは、一旦閉じないと更新が分りません。
'-----------------------------------------
Option Compare Database
Dim myArVal As Variant
Dim RightCol As Integer
Const Fname As String = "Test.xls" 'Excelブック名
Const ShName As String = "Sheet1" 'シート名
Const RightColA1 As String = "D" '右端の列名
Sub Excel_Apend_ImportSample1()
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mySQL As String
Dim cnt As Long
Dim dbRow As Long
Dim i As Long
Set cn = CurrentProject.Connection
mySQL = "SELECT Count(TestTable.フィールド1) as cnt from TestTable"
rs.Open mySQL, cn, adOpenStatic
dbRow = rs!cnt
rs.Close
Call ExcelOpen(dbRow)
On Error GoTo RsClose
rs.Open "TestTable", cn, adOpenStatic, adLockOptimistic
With rs
For i = LBound(myArVal, 1) + 1 To UBound(myArVal, 1)
.AddNew
!フィールド1 = myArVal(i, 1)
!フィールド2 = myArVal(i, 2)
!フィールド3 = myArVal(i, 3)
!フィールド4 = myArVal(i, 4)
.Update
Next i
End With
RsClose:
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
If Err.Number > 0 Then
MsgBox Err.Number & " " & Err.Description
Err.Clear
Else
Beep
End If
End Sub
Sub ExcelOpen(FirstRow)
Dim xlApp As Object
Dim xlshLastRow As Long
Dim xlshAdd As String
On Error GoTo Quit
'デフォルトの位置にない場合は、ドライブ\フォルダ をつける
Set xlApp = CreateObject("Excel.Application")
With xlApp.Workbooks.Open(Fname)
xlshLastRow = .Worksheets(ShName).Range("A65536").End(xlUp).Row
'dbのレコード数に+2(フィールド行分+1) ~ Excel の最後の行
xlshAdd = "A" & FirstRow + 1 & ":" & RightColA1 & xlshLastRow
myArVal = .Worksheets(ShName).Range(xlshAdd).Value
.Close
End With
Quit:
If Err() > 0 Then
MsgBox Err.Description
End If
xlApp.Quit
Set xlApp = Nothing
End Sub
回答ありがとうございます。
また、返事が遅くなってすみません。
何度もご丁寧な回答をしていただき、本当にありがとうございます。
上記に挑戦してみます。(私自身もVBAには自信がありませんがやってみます)
また分からないことがあったら補足させていただくと思いますので、まだ締め切りませんが・・・
よろしくお願いします。m(_ _)m
No.3
- 回答日時:
アクセスに「外部データの取り込み」「インポート」「エクセルファイル」
の「操作」があるのをご存知ですね。
にもかかわらず、「自動的」に拘るのですか。
であればVBAでの処理になると思いますが、質問の書き方からして不安を覚えますが、VBAの回答を、自分の場合に当てはめて、修正はできますか。
>毎日少しずつ増えていきます。その「増えた分だけ」インポートする。
(#1の補足)データを入力した日付はエクセルデータにありますか。その日単位にアクセスに送ってはどうでしょう。
エクセルで日単位にデータを別シートに分けるのはどうするか判りますか。
回答ありがとうございます。
また、お返事が遅くなりすみません。
アクセスに「外部データの取り込み」があるのはもちろん知っています。
操作する側の問題で、できたら(いや、確実に)「自動化」したい状況です。
お手数おかけしてすみません。
No.1
- 回答日時:
エクセルで作ったデータをCSVで吐き出して、
アクセスでインポートすると理解すればよろしいでしょうか?
アクセスのフォームにインポートボタンを作成してクリックイベントで
VBAが起動するように作ればよいと思います。
詳しくは下記のHPを参考にしてみてください。
http://www.accessclub.jp/bbs3/0067/superbeg25315 …
参考URL:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
回答ありがとうございます。
こちらの質問の仕方に不足がありました。
たとえば、エクセルのデータは毎日少しずつ増えていきます。
その「増えた分だけ」インポートする。もしくは、毎回エクセルにあるデータすべて(上書き)するなりを簡素化したいと思います。
頻度はほぼ毎日です。
それを自動化したいのですが、良い方法はないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- WordPress(ワードプレス) WordPress のブログを初期化したい。リスクは? 1 2023/01/01 05:47
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- その他(IT・Webサービス) EXCELVBAでシートを他のブックにコピーする命令を出すと毎回存在しないシート名の問合わせがある 1 2022/05/07 15:12
- Excel(エクセル) EXCELVBAでシートを他のブックにコピーする命令を出すと毎回存在しないシート名の問合わせがある 2 2022/05/07 17:16
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのテーブルのデータで、...
-
エクセルのデータをアクセスに...
-
EXCEL→ACCESSインポートでセル...
-
ACCESS フォームに入力できる文...
-
アクセスのオートナンバーが飛...
-
ファイルメーカーからメールソ...
-
差込印刷での全角表示について...
-
日付型のフィールドに空白を入...
-
アクセスのエラー「クエリには...
-
SQL文で パラメータが少なすぎ...
-
Accessの桁区切りについ...
-
ACCESS 「パラメータの入力」...
-
アクセスで追加した項目に全て...
-
エクセルデータをワードで差し...
-
テーブルでメモ型になっている...
-
2つのテーブルに共通するレコ...
-
ACCESSのクエリで抽出条件「ま...
-
Accessで、1つの項目に複数の...
-
クロス集計クエリの結果をテー...
-
Accessのテーブルのフィールド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのテーブルのデータで、...
-
エクセルのデータをアクセスに...
-
EXCEL→ACCESSインポートでセル...
-
Accessチェックボックス 一度で...
-
ACCESS フォームに入力できる文...
-
アクセスのオートナンバーが飛...
-
ACCESSで改行コードを削除する方法
-
郵便番号の-(ハイフン)等をま...
-
ACCESSで行数を増やすには?
-
Access2003でフィールドのデー...
-
アクセス2000で固定長フィール...
-
Access2000 テキストデータの...
-
ACCESSのカスタマーバーコード...
-
ACCESS 検索置換 にデ...
-
【ACCESS】文字列を抜き出したい
-
アクセス(データシートビュー)...
-
【Win】ファイルメーカー⇔エ...
-
エクセルの重複データについて...
-
エクセルのデータをアクセスへ...
-
差込印刷での全角表示について...
おすすめ情報