CSVファイルをACCESSで編集してEXCELに貼り付ける方法

このQ&Aのポイント
  • ACCESSのFORMにボタンを作成し、VBAを使用してCSVファイルを読み込み、編集した後、指定したEXCELシートに貼り付ける方法について困っています。
  • 現在、データを一気に読み込んで、2次元の配列に格納し、編集後にEXCELのセルに値を入れていますが、EXCELを更新することができません。
  • ACCESSとEXCELを連携する際、ACCESSからEXCELシートを更新するコマンドについて具体的な使い方を教えていただけると助かります。
回答を見る
  • ベストアンサー

CSVファイルをACCESSで読み込んで、編集してEXCELに貼り付けたいのですが

みなさま、こんにちは。 ACCESSのFORMにボタンを作って、イベントのビルドでCSVファイルを読み込んで、編集して指定したEXCELシートに貼り付けようとVBAを組んでいるのですが、困ってしまいました。 データを一気に読み込んだあと、2次元の配列にして aRecord(r, a)にレコードと項目ごとに値をセットしています。 データを編集後、 ES(b).Cells(posR, posC) = aRecord(r, a) でエクセルのセルに値を入れているのですが、この方法だとEXCELを更新することが できなくて困っています。 ACCESS/EXCEL連携で、ACCESSからEXCELシートを更新できるコマンドがあると聞いたことがあるのですが、具体的にどのようなコマンドを どのように使えばよいのか、ご存知ないでしょうか? もしおわかりになる方がいらっしゃいましたら、是非ご教授下さいますよう よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • marsah
  • ベストアンサー率42% (3/7)
回答No.3

これは私が実際に、AccessからExcelを起動して書き込みに成功しているものです。 いろいろと問題があるプロシージャかもしれませんが、とりあえず出来ました。(汗笑) Excel起動の際、既に起動済であっても新しくインスタンスを生成してしまっています。(2重起動) 行頭のタブが無理やり消されて見難いですが、参考になればよいのですが・・・ '* '*Form_売上入力票 '* Private Sub コマンド19_Click() Dim cnn As New ADODB.Connection Dim rstCustomer As New ADODB.Recordset Dim rstDetails As New ADODB.Recordset Dim strDetailsSQL As String Dim strCustomerSQL As String Dim strAbsPath As String Dim intRsCount As Integer Dim intPageCount As Integer Dim i As Integer Dim j As Integer If OpenExcel() Is Nothing Then MsgBox "OpenExcel failed." Exit Sub Else gxLApp.Visible = True End If strAbsPath = Trim(Me.Application.CurrentProject.Path) & "\denpyo.xls" If OpenExcelFile(strAbsPath) Then ' Else MsgBox "OpenExcelFile failed." Call CloseExcel Set cnn = Nothing Set rstCustomer = Nothing Set rstDetails = Nothing Exit Sub End If strCustomerSQL = "SELECT ...(中略);" strDetailsSQL = "SELECT ...(中略);" Set cnn = CurrentProject.Connection rstCustomer.CursorLocation = adUseClient rstCustomer.Open strCustomerSQL, cnn, adOpenStatic, adLockReadOnly, adCmdText rstDetails.CursorLocation = adUseClient rstDetails.Open strDetailsSQL, cnn, adOpenStatic, adLockReadOnly, adCmdText intRsCount = CInt(rstDetails.RecordCount) intPageCount = Int(intRsCount / 5) + 1 Debug.Print "intRsCount = " & intRsCount Call CopyPages(intPage:=intPageCount) rstDetails.MoveFirst For i = 1 To intPageCount Call InsertCustomer(intPage:=i, intTotalPage:=intPageCount, rsData:=rstCustomer) For j = 1 To 5 If rstDetails.EOF Then Exit For Call InsertDetails(intPage:=i, intRow:=j, rsData:=rstDetails) rstDetails.MoveNext Next Next MsgBox "O.K.?" Call CloseExcel Set cnn = Nothing Set rstDetails = Nothing Set rstCustomer = Nothing End Sub '* '*BasExcelAutomation '* Public gxLApp As Object Public gfExcelWasRunning As Boolean Public Function OpenExcel() As Object ' ' Excelを起動する(インスタンスを生成) ' Set gxLApp = CreateObject("Excel.Application") If gxLApp Is Nothing Then MsgBox "MS Excel 9.0 is not installed on your computer" Set OpenExcel = Nothing Exit Function End If Set OpenExcel = gxLApp End Function Public Function CloseExcel() ' ' Excelを終了させる ' ' On Error Resume Next If Not gxLApp Is Nothing Then With gxLApp .ActiveWorkbook.Close False .Quit End With Set gxLApp = Nothing End If End Function Public Function OpenExcelFile(strFileName As String) As Boolean On Error Resume Next gxLApp.Workbooks.Open Filename:=strFileName OpenExcelFile = (Err.Number = 0) If Not OpenExcelFile Then MsgBox strFileName & "を開けませんでした。" & _ vbCrLf & "Err = " & Err.Number & _ vbCrLf & "FileName = " & strFileName End If End Function

その他の回答 (2)

  • marsah
  • ベストアンサー率42% (3/7)
回答No.2

“EXCELは値が書き込まれないまま、処理が終了する”とのことですが、普通は“値が入った状態でEXCELを画面に表示して処理が終了”されるはずなのですが・・・ その点が問題なのではないでしょうか? 代入しようとしているデータが特殊なものやNullになってはいないでしょうか?

happa-happa
質問者

お礼

marsahさん、ご回答をありがとうございます。 EXCELのマクロで動かした場合はちゃんといくのですが、ACCESSから起動すると EXCELのワークシートが一瞬だけ画面に現れて、すぐに消えてACEESSの画面に 戻ってしまうんですよ・・・ うーむ。一体どうすればよいのやら・・・。

回答No.1

はじめまして。質問中の「更新」と言う意味がいまいち良くわかりませんでした。 「更新」とは、 (1)画面の更新をさせたい? (2)セルにいれたあとのExcelシートを保存したい。 (3)その他の意味。 この点について、もうすこし、噛み砕いて説明頂ければ、回答できると思い、 投稿させて頂きました。

happa-happa
質問者

補足

dayan_dayanさん、レスをいただいてありがとうございます。 わかりにくい質問ですみませんでした。 ACCESSでEXCELのシートに値を書き込みたいのですが、 現在書いているコード cells(a,b)=ほにょほにょ の書き方ではEXCELは値が書き込まれないまま、処理が終了してしまいます。 せめて値が入った状態でEXCELを画面に表示して処理が終了すば、その後 EXCEL側でシートを保存すればよいのですが。。。

関連するQ&A

  • AccessからExcelを編集

    Access2003からExcelを編集したいのですが、 いろいろとWebで見ているのですが、よくわかりません。 例えば、 AccessからTEST.xlsのシート「データ」のA10のセルに「てすと」と入れるとします。 最後に上書きします。 申し訳ありませんが、わかる方、教えて下さい。

  • エクセルのリンク編集について

    エクセルで更新できないリンクエラーがあります。 エクセルにシート1~シート10までデータがあり、別のフォルダーからデータをリンクするようにしているのですがいつも下記のエラーが出ます。 何か良い解消方法はありませんか。 エラー内容 ブック内の一部のリンクはすぐに更新できません。 値を更新せずにそのままにするか、間違っていると思われるリンクを編集してください。 続行とリンク編集のボタンが表示されます。 リンクの編集を押すとエラー:ソースが見つかりませんと表示されます。

  • EXCELとACCESSとの連携

    VABの初心者です。 EXCELとACCESSの連携を考えています。 次のようなEXCELデータがあり、名前は 人によって違う値が入っていて それぞれ個人が別ファイルをみています。 この名前のところを参照して、 ACCESSのテーブルで名前が同じ値であれば、 状態をところの更新かけたいのですがどうしたらいいでしょうか? よろしくお願いします。 EXCELデータ    B    C     名前  状態 1   佐藤   仕事中 ACCESSテーブル(テーブル名:T_jyotai) T_item   ID   名前   状態   S   佐藤   休み   K   小西 出張中   N   西村   仕事中

  • ExcelデータをAccessにインポート?

    既存のExcelデータ(名刺データ)があり、Accessで使用したいのでAccessでインポートしようと思います。 Accessデータ一本にすれば問題ないのですが、Excelデータもそのまま使用し続けたい場合、 ●Excelデータが更新されたら→同じように、Accessデータも更新される というふうにすることは、可能なのでしょうか? (もしかしたらインポートではなくリンクを使うのかもしれませんが、、、リンクは全く使ったことがないので、ちょっとわかりません。ごめんなさい) どなたかご存知でしたら教えていただきたく思います。 宜しくお願いします。

  • ExcelやAccessで統計したいです

    私はExcel初心者で、VBAは使用したことがありません。またAccessはまったく使用したことがありません。 以下のことがExcelやAccessでは可能なのかおわかりの方、お返事いただけたらと思います。 現在、Excelで競艇の予想と結果の過去のデータを集計したり統計をとったりして検証しています。 データは手作業で入力しているのですが、競艇は1日に1場で12Rあり、全国で20場近く開催されているので年間のデータは膨大でとても手作業では対応しきれません。 データは「予想」と「結果」があります。1日分の「予想ファイル(CSV)」と「結果ファイル(TEXT)」があり、これが1年分あるのでファイル数は数千あります。 これらの膨大なファイルをExcelやAccessに取り込むというのは自動でできるのでしょうか? 私は現在はTEXTやCSVをコピー&ペーストなどで手作業で入力しているので非常にたいへんなのです。 Accessは使用したことがなく、このようなことが可能なのかもわかりません。 毎日増えていく予想・結果データをExcelかAccessに取り込んで集計データが更新されるようにしたいと思いますが、このようなことはExcelやAccessで可能でしょうか? Windows2000とExcel2000:Access2000を持っています。

  • EXCEL 名前付け

    Excel超初心者です。 Excelで、名前をつけたセルの値が取り方が分かりません。 シート名.Cells(11,1) →値が取れます シート名.Cells(\"DATA\") →型が一致しません とエラーになってしまいます。 名前を付けたセルから値を取る方法を教えて頂けないでしょうか? よろしくお願いします。

  • Excel → Access データをインポート

    OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。

  • ExcelでAccessの時間データがおかしい

    今回コンピュータが新しくなり、Excel・Access共に新しくなり、 以前使用していたExcel2003・Access2003からExcel2013および Access2013の32bit版になりました。 Accessのデータベースは前から使用している2000仕様です。 使用しているデータは出退勤のデータで、ExcelでODBCを利用して Accessのデータを読んでいます。 問題は、出勤日や出勤時間などは、日付と時間の混合で入っていて問題なく Excelに読み込まれますが、勤務時間は「1900/1/0 0:00」と出力され 時間のみの表示形式にしても「0:00」と表示されます。 Accessのフィールドデータ型は共に「日付/時刻型」になっていますが 前者は日付と混合で、後者は日付無しの時間のみです。 クエリーの編集でデータが表示されたものは、問題なく勤務時間が 時間で表示されています。 どうしてExcelに読み込むと時間が無くなってしまうのでしょうか よろしくお願いします。

  • accessのデータをエクセルに表示できる?

    素人の質問になってしまいますが、accessのデータをエクセルに表示などできるものでしょうか。 #accessのデータが更新されたら更新されたデータがいつもエクセルで表示されるような仕組みで。

  • AccessVBAによるエクセルファイルの編集

    ○使用システム  WindowsXP  Access2007 Accessのレコードセットに関係する質問をさせていただきます。 エクセルシートのセル範囲を指定して、下記のようにレコードオブジェクトに取り出しました。   Set ExcelDB = OpenDatabase(OutPutFilePath, False, False, "Excel 8.0;")   SqlLang = "SELECT * FROM " & "[" & 【セル範囲】 & "] WHERE " & 【対象レコード指定】   Set ExcelRS =ExcelDB.OpenRecordset(SqlLang, dbOpenDynaset) その後、.Editでレコードの編集をかけようとしますが「このフィールドはリンクされたExcelワークシートにあるため、編集できません」とのメッセージが出力されました。リンクされたエクセルは編集できないのでしょうか? もし、同様の事象をご存知の方に助言をいただければ幸いです。

専門家に質問してみよう