access VBA もしくはその他の手法について教えてください。

Microsoft Access | Visual Basic42閲覧xmlns="http://www.w3.org/2000/svg">250

ベストアンサー

0

ご連絡ありがとうございます。 下記の部分でエラーが発生してしまうのですが、どのようにすればよいでしょうか? >>Dim db As Database プロジェクトではなくユーザー定義型を指定してください。 となります。 お手数をおかけいたしますが、ご教授お願いいたします。

ThanksImg質問者からのお礼コメント

ご丁寧にご教授いただき、誠にありがとうございました。 問題なく実行することができました。 とても助かりました。

お礼日時:3/2 19:42

その他の回答(2件)

0

正統的にaccess VBAでの回答が既にありますが、 こちらはその他の手法(Excel VBA)を使うやり方を紹介します。 メリットは ・レコードセットをセルへ一発で取り込む機能がある ・CSV出力する機能がある....カンマを含むデータにも対処してくれる ので、処理構造が単純になる事です。 準備 ・ワークシートが二つあるブック(EXCELマクロ有効ブック)を作る ...二つのWSの書式設定はデフォルトのままとする(名前は何でもいい) ・Microsoft ActiveX Data Objects 6.1 Library を参照設定する ・Microsoft ADO Ext 6.0 for DDL and Security を参照設定する ・標準モジュールに下記をコピペして CSV出力 マクロ実行 注 Private Const DBPath = "D:\_Temp\TestDB.accdb" ' AccessDBファイルパス はそちらの条件に合わせて修正して下さい ---- 標準モジュール ------------ Option Explicit Private Const ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" ' 接続文字列 Private Const DBPath = "D:\_Temp\TestDB.accdb" ' AccessDBファイルパス Private Const UnitRwCnt As Long = 25000 ' CSV最大行数 Private Const CSVName = "テスト" ' CSVファイル名 Sub CSV出力() Const SQL = "Select カラム1,カラム2,カラム3 from テストテーブル" Dim v As Variant Application.DisplayAlerts = False Application.ScreenUpdating = False '* テーブルデータの読み込み Dim adoCon As New ADODB.Connection Dim adoRs As New ADODB.Recordset adoCon.Open ConStr & DBPath ' AccessDBに接続 adoRs.Open SQL, adoCon, adOpenStatic ' エーブル読み込み ShtChg 2 Range("A1").CopyFromRecordset adoRs '* 25000レコードずつ順にCSV出力 Dim Lastrw As Long Dim i As Long Dim ii As Long Dim No As Long Dim Path As String With Sheets(2) Lastrw = Cells(Rows.Count, 1).End(xlUp).Row No = 1 For i = 1 To Lastrw Step UnitRwCnt ii = i + UnitRwCnt - 1 If ii > Lastrw Then ii = Lastrw Sheets(2).Select v = .Range(.Cells(i, 1), .Cells(ii, 3)) ' iから25000行分をvに入れる ShtChg 1 Range(Cells(1, 1), Cells(UBound(v, 1), 3)) = v 'Sheet(1)の先頭行へvを入れる Path = ThisWorkbook.Path & "\" & CSVName & Format(No, "000") & ".csv" ' CSVファイルパスを作成 ActiveWorkbook.SaveAs Filename:=Path, FileFormat:=xlCSV, CreateBackup:=False 'CSV出力する No = No + 1 Next i End With MsgBox "出力End" Exit_CSV出力: Application.ScreenUpdating = True Application.DisplayAlerts = True Exit Sub Err_CSV出力: MsgBox Err.Description Resume Exit_CSV出力 Exit Sub End Sub Private Function ShtChg(No As Long) As Boolean Sheets(No).Select Cells.Select Selection.ClearContents End Function ------------------------------------------

0

既にカンマ区切りなら、インポートしたら良いと思います。 固定長でも、データが行単位になってるなら、Excelで関数を使って、3列データにして、ひとまずデータ作れば良いと思います。 それをインポートして、テーブルにオートナンバーの列を後から追加と言うてもあると思います。

ご連絡ありがとうございます。 >>既にカンマ区切りなら、インポートしたら良いと思います。 既にカンマ区切りではありません。 インポート時にカンマ区切りで出力します。 >>Excelで関数を使って、3列データにして、ひとまずデータ作れば良いと思います。 3列データにするには、テーブルをクエリで抽出すれば実行可能です。 >>それをインポートして、テーブルにオートナンバーの列を後から追加と言うてもあると思います。 上記のの箇所を、accessからインポートする際に、実行できるaccessVBAがあればご教授お願いしたいです。