いつも大変お世話になっております。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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSで改行コードを削除する方法
-
ACCESS 検索置換 にデ...
-
ACCESSのテーブルのデータで、...
-
SQL文で パラメータが少なすぎ...
-
日付型のフィールドに空白を入...
-
差込印刷での全角表示について...
-
クエリ上でフィールド名が2つ...
-
Excleピボットでデータのない部...
-
Accessのテーブルのフィールド...
-
アクセスのエラー「クエリには...
-
最新日のデータのみ抽出するク...
-
Access テーブルを分割してエク...
-
EXCELの外部データ取得ができない
-
ACCESS 「パラメータの入力」...
-
ACCESS クエリの抽出条件に他の...
-
デザインビューにてテーブルが...
-
テキストボックスにクエリ結果...
-
エクセルにおける「フィールド...
-
エクセルデータをワードで差し...
-
指定日付を起点にして最新日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのテーブルのデータで、...
-
EXCEL→ACCESSインポートでセル...
-
エクセルのデータをアクセスに...
-
ACCESSで改行コードを削除する方法
-
Accessチェックボックス 一度で...
-
アクセスのオートナンバーが飛...
-
ACCESS フォームに入力できる文...
-
郵便番号の-(ハイフン)等をま...
-
ACCESSで行数を増やすには?
-
Access2003でフィールドのデー...
-
【Win】ファイルメーカー⇔エ...
-
Access2000 テキストデータの...
-
【ACCESS】文字列を抜き出したい
-
excel→accessへのインポートが...
-
アクセス(データシートビュー)...
-
ACCESS 検索置換 にデ...
-
アクセス2000で固定長フィール...
-
エクセルのデータをアクセスへ...
-
ACCESSのカスタマーバーコード...
-
差込印刷での全角表示について...
おすすめ情報