Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルCSVファイルをテーブルに取り込む
記事No16698
投稿日: 2011/05/17(Tue) 16:36
投稿者くま
OS:Windows XP
Access Version:2000

CSVファイルを accessのテーブルに取り込みた為、VBAで
どう記述すればよいのでしょうか?


CSVファイルはカンマ区切りでありません。(名前:住所データ.CSV)
ID 名前 生年月日 住所のような並びです。

記述方法をご教授下さい。

タイトルRe: CSVファイルをテーブルに取り込む
記事No16699
投稿日: 2011/05/17(Tue) 16:59
投稿者MAR
> CSVファイルはカンマ区切りでありません。(名前:住所データ.CSV)
> ID 名前 生年月日 住所のような並びです。
それは既にCSVファイルではありませんので拡張子にCSVをつけては間違いです
txtにしてテキストファイルとして取り込みましょう

タイトルRe^2: CSVファイルをテーブルに取り込む
記事No16700
投稿日: 2011/05/17(Tue) 17:06
投稿者くま
> > CSVファイルはカンマ区切りでありません。(名前:住所データ.CSV)
> > ID 名前 生年月日 住所のような並びです。
> それは既にCSVファイルではありませんので拡張子にCSVをつけては間違いです
> txtにしてテキストファイルとして取り込みましょう

すみませんが、あるシステムからCSVファイルに書き出し機能があり、このような内容に変換されて
おりました。それでもCSVファイルではないのでしょうか?

また、TXTファイルに一度変換しないと、ACCESS上では取り込めないのでしょうか?

タイトルRe^2: CSVファイルをテーブルに取り込む
記事No16701
投稿日: 2011/05/17(Tue) 17:39
投稿者くま
> > CSVファイルはカンマ区切りでありません。(名前:住所データ.CSV)
> > ID 名前 生年月日 住所のような並びです。
> それは既にCSVファイルではありませんので拡張子にCSVをつけては間違いです
> txtにしてテキストファイルとして取り込みましょう

また、そのファイルの1行目にタイトル名があり、

ID  名前     生年月日  住所
1 佐藤 丸男   S14.10.12 ●●県●●市
2 田中 卓夫  S59.2.1 ●▼県★●市

のような並びです。

タイトルRe^3: CSVファイルをテーブルに取り込む
記事No16702
投稿日: 2011/05/17(Tue) 19:09
投稿者ポタミア
> また、そのファイルの1行目にタイトル名があり、
一行目を読み込みと飛ばすことはVBAで出来ます
問題はID 名前 生年月日 住所などの間にスペースがあるかどうかです
まったく無ければCSVファイルではなく固定長ファイルになります
フィールド間の間はどうですか?

> ID  名前     生年月日  住所
> 1 佐藤 丸男   S14.10.12 ●●県●●市
> 2 田中 卓夫  S59.2.1 ●▼県★●市
>
> のような並びです。

タイトルRe^4: CSVファイルをテーブルに取り込む
記事No16704
投稿日: 2011/05/18(Wed) 09:17
投稿者くま
> > また、そのファイルの1行目にタイトル名があり、
> 一行目を読み込みと飛ばすことはVBAで出来ます
> 問題はID 名前 生年月日 住所などの間にスペースがあるかどうかです
> まったく無ければCSVファイルではなく固定長ファイルになります
> フィールド間の間はどうですか?
>
> > ID  名前     生年月日  住所
> > 1 佐藤 丸男   S14.10.12 ●●県●●市
> > 2 田中 卓夫  S59.2.1 ●▼県★●市
> >
> > のような並びです。

フィールド間としては、1データごと1セルに置かれているので、EXCEL形式と同じに見えます。
CSVの本来なら、1セル内に複数のデータが区切られていると思いますが。
おそらくそのシステムでは、EXCELに変換しやすいように、各セルにデータが配置するよう
変換しているものと考えられます。

タイトルRe^5: CSVファイルをテーブルに取り込む
記事No16705
投稿日: 2011/05/18(Wed) 10:07
投稿者Hank
csvファイル じゃなくて tsv ファイルじゃないですか?
※ファイル拡張子がcsvであっても内容がカンマ区切りでなければcsvファイルとは言いません。

タブ区切り 【TSV】
http://e-words.jp/w/E382BFE38396E58CBAE58887E3828A.html

tsvファイルもcsv同様、TransferText メソッドで取り込み出来ます。
ただし区切り記号をタブに設定したインポート定義が必要です。

タイトルRe^6: CSVファイルをテーブルに取り込む
記事No16706
投稿日: 2011/05/18(Wed) 10:58
投稿者くま
> csvファイル じゃなくて tsv ファイルじゃないですか?
> ※ファイル拡張子がcsvであっても内容がカンマ区切りでなければcsvファイルとは言いません。
>
> タブ区切り 【TSV】
> http://e-words.jp/w/E382BFE38396E58CBAE58887E3828A.html
>
> tsvファイルもcsv同様、TransferText メソッドで取り込み出来ます。
> ただし区切り記号をタブに設定したインポート定義が必要です。

指摘された内容ですので、それに当るのかと思います。

区切り記号をタブに設定したインポート定義とは、どのようにするとTransferTextを
実施できるのでしょうか?
事例をあげていただければと思います。

タイトルCSVファイルをVBAで取り込む
記事No16707
投稿日: 2011/05/18(Wed) 18:10
投稿者ポタミア
> > > また、そのファイルの1行目にタイトル名があり、
>フィールド間としては、1データごと1セルに置かれているので、EXCEL形式と同じに見えます。
>CSVの本来なら、1セル内に複数のデータが区切られていると思いますが。
>おそらくそのシステムでは、EXCELに変換しやすいように、各セルにデータが配置するよう
>変換しているものと考えられます
CSVの拡張子でもファイルのアイコンがエクセルなら上記のようにセルにカンマで区切った単位で
入りますので
ファイルを右クリックしてプログラムから開くでメモ帳を選択して開いてみてください
カンマ区切りになって入れば以下のプロシージャが使えます。

おそらくカンマ区切りになっているはずです。
あるデータベースでエクスポートした時、同じ様にcsvの拡張子でありながらエクセルでひらけました。
さらにカンマ区切りではなくカンマ区切りの単位で一つ一つセルに代入されてました。 
メモ帳で開くとその正体が分かります。

/////////////////////////////////////////////////////////////////////////////////////
以下のCSVファイルを作成します メモ帳にコピーして名前を付けて保存の時拡張子を.csvで保存します
CSVデータ
ID,名前,生年月日,住所
1,佐藤 丸男,S14.10.12,●●県●●市
2,田中 卓夫,S59.2.1,●▼県★●市

アクセスにて以下のテーブルを作成します
テーブル名 T1
フィールド名  データ型  詳細
id1       数値型 長整数型
name1     テキスト型
brth1     テキスト型
Address11 テキスト型

非連結式のフォームにコマンドボタンを配置します名前は"コマンド0"です
で、クリック時のイベントに以下をコピーします Private Sub コマンド0_Click()とEnd Subは削除してくださいね、
エラーになります
'////////////////////////////////////////////////////////////////////////////////////////////
Private Sub コマンド0_Click()
'エクセルに出力されたCSVファイルをプログラムから開くでメモ帳で開くとCSV形式であれば以下のプロシージャが使えます
'2007のバージョンしかないので2000のバージョンで使えるかわかりませんがCSVの取込みはこんな感じです
'取込み中のエラーで元に戻すトランザクションはお考えください
'参照可能なADOにチェックを入れる
'microsft ActiveX Data Objects 2.8 Library にチェツクをいれました
'[ファイルを開く]ダイアログボックス 参照設定で microsoft office 12.0 Object Libraryにチェックを入れる
' 入れないとダイアログボックスを開くときエラーになる

Dim dLgOpen           As FileDialog
Dim retDialog         As Long       'ダイアログボックスのもどり値  0=キャンセルボタン : -1=開くのボタン
Dim PathName          As String     '読み込んだファイルの名前を格納
Dim fno               As Long       '現在利用可能なファイル名を取得する変数                                                                                                                                '|
Dim indata            As String     '読み込んだファイルデータを格納
Dim i                 As Integer    'ファイル1行1行読み込んだ時に回数をカウントしておく
Dim varData           As Variant    'カンマで区切ったデータの格納変数
  
' ADOの設定
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
'テーブル"T1"を開く
rs.Open "T1", cn, adOpenKeyset, adLockOptimistic
  
'[ファイルを開く] ダイアログボックスを作成
Set dLgOpen = Application.FileDialog(msoFileDialogOpen)
'[ファイルを開く] ダイアログボックスの初期値をセット                                                                                                                                       '|
dLgOpen.AllowMultiSelect = False
dLgOpen.Filters.Clear
dLgOpen.Filters.Add "テキストファイル", "*.csv"
dLgOpen.InitialFileName = CurrentProject.Path
'ダイアログボックスを表示
retDialog = dLgOpen.Show
      
'キャンセルを選択したときは処理を抜ける
If retDialog = 0 Then
   Exit Sub
Else  '開くのボタンを押したときの処理
                                                                                       
        PathName = dLgOpen.SelectedItems(1) '選択したファイル名を取得
        fno = FreeFile() '現在利用可能なファイル番号を取得
        Open "" & PathName & "" For Input As #fno 'テキストファイルを開く
        MsgBox (PathName)
        'ファイルの読み込み前に初期化
        indata = ""
        'カウンタ―変数を初期化  1行目はフィールド名なので読み込まない
        i = 0
        '最初の読み込み時にCSVデータを読み込を飛ばす為"1"を代入する
        i = 1

     'ファイル全体を読み込む
     Do While EOF(fno) = False
         'ファイルから1行分読み込む
         Line Input #fno, indata
         
            '1行目は何もしない
            If i = 1 Then
         
            '2行目からなら取込み
            Else
		'カンマで区切って配列に代入する
                varData = Split(indata, ",", , vbTextCompare)
                'テーブルに追加処理を行う
                With rs
                .AddNew
                    !id1 = CLng(varData(0)) 'テキストデータを長整数型に変換する 変換関数を参照してね
                    !name1 = varData(1)
                    !brth1 = varData(2)
                    !Address11 = varData(3)
                '追記処理
                .Update
                End With
            End If
     
         '次の取込みの備えてカウンター変数に1を加えておく
         i = i + 1
     
     Loop
             MsgBox ("取込み終了")
End If

End Sub

タイトルRe: CSVファイルをテーブルに取り込む
記事No16703
投稿日: 2011/05/17(Tue) 21:31
投稿者ポタミア
csvファイルの取り込み例
'コマンドボタンをクリックのイベントに記述
'インポートするファイルの変数の宣言
private sub ボタン_click()
Dim a as string 
'インポートするアドレスを記述
a="C:\アドレス名\aaa.csv" '←参照するファイル名をコピーして貼り付けもOKです

'csvファイルのインポート
Docmd.TransferText acImportDelim, ,インポート先のテーブル名,インポートするファイル名(ココでは変数の"a" , 先頭行をフィールド名にするかの選択(VBAのヘルプのTransferTextを参照してね) 

End sub 

CSVのインポートはTransferTextメソッドを参照してね

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る