いつも大変お世話になっております。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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのデータをアクセスに...
-
アクセスのオートナンバーが飛...
-
ACCESSのテーブルのデータで、...
-
ACCESSで改行コードを削除する方法
-
ファイルメーカーからメールソ...
-
【ACCESS】文字列を抜き出したい
-
ACCESS フォームに入力できる文...
-
Access2003でフィールドのデー...
-
Accessチェックボックス 一度で...
-
EXCEL→ACCESSインポートでセル...
-
SQL文で パラメータが少なすぎ...
-
差込印刷での全角表示について...
-
アクセスで追加した項目に全て...
-
エクセルデータをワードで差し...
-
ACCESS 「パラメータの入力」...
-
日付型のフィールドに空白を入...
-
エクセルにおける「フィールド...
-
PCゲームから音声ファイルを抽...
-
最大値以外の抽出方法
-
最新日のデータのみ抽出するク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのテーブルのデータで、...
-
エクセルのデータをアクセスに...
-
EXCEL→ACCESSインポートでセル...
-
Accessチェックボックス 一度で...
-
ACCESSで改行コードを削除する方法
-
アクセスのオートナンバーが飛...
-
ACCESSのカスタマーバーコード...
-
郵便番号の-(ハイフン)等をま...
-
ACCESS フォームに入力できる文...
-
Access2003でフィールドのデー...
-
ACCESSで行数を増やすには?
-
アクセス2000で固定長フィール...
-
ACCESS 検索置換 にデ...
-
Access2000 テキストデータの...
-
ACCESS2003でテーブルに入力し...
-
ファイルメーカーからメールソ...
-
Accessのコピー&ペースト
-
excel→accessへのインポートが...
-
エクセルのデータをアクセスへ...
-
【ACCESS】文字列を抜き出したい
おすすめ情報