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

     

リストへもどる

投稿記事の一括表示

タイトル1レコードずつCSVエクスポート
記事No172162
投稿日: 2018/03/13(Tue) 11:23
投稿者LED
解決済: ON
OS:WIN10
Access Version:2016

1レコードずつcsv形式でエクスポート出来る仕組みについて、ご教授頂けましたら幸いです。
宜しくお願い致します。

現在、下記のようにコードを記述し、1レコードずつcsv形式でエクスポートさせるようにしています。


Dim wSQL As String 'SQL文等のワーク
Dim I_CNT As Integer 'I/P COUNT
Dim O_FNM As String 'O/P FILE NAME

'メッセージを表示
wSQL = "CSVファイル変換" '※テーブル名
wSQL = wSQL & vbCrLf & vbCrLf & "csvファイルを出力しますか?"

If MsgBox(wSQL, vbYesNo + vbQuestion) = vbNo Then
Exit Sub 'いいえ-->終了
End If

'CSV定義(保存先・ファイル名の設定)
wSQL = Application.CurrentProject.Path & "\aaa\"

On Error Resume Next '念の為エラートラップ(削除時)

If Dir(wSQL, vbDirectory) <> "" Then
Call Kill(wSQL & "*.csv") '前回分は全て削除-->ごみ箱へ
Else
Call MkDir(wSQL) 'フォルダ作成
End If

O_FNM = wSQL & "FILE_???.csv" 'CSV出力先、???=あとで置換 ※ファイル名

On Error GoTo sCSV_OP_ERR '念の為エラートラップ

'接続
Set wCNN = CurrentDb

'テーブルを参照
wSQL = "SELECT [商品コード], [製品番号],[商品名],"
wSQL = wSQL & " FROM [tbl_Data3]"

Set wREC = wCNN.OpenRecordset(wSQL, dbOpenForwardOnly)

I_CNT = 0

Do Until wREC.EOF
I_CNT = I_CNT + 1

'FILE NAME
wSQL = Replace(O_FNM, "???", wREC(0))

'CSV O/P
Open wSQL For Output As #1
Write #1, wREC(0), wREC(1), wREC(2), wREC(3)
Close #1

wREC.MoveNext '次レコードへ
Loop
'終了
wREC.Close: Set wREC = Nothing
wCNN.Close: Set wCNN = Nothing

Call MsgBox(Format(I_CNT, "#,##0") & "件作成しました")

Exit Sub

sCSV_OP_ERR:

Call MsgBox("(エラー発生)sCSV_OP" & vbCrLf & vbCrLf & wSQL, vbExclamation)
Call MsgBox(Err.Number & " " & Err.Description)

この時、テーブル[tbl_Data3]の中に同一商品コードが2つあるにもかかわらず、1つの
コードしか作成されません。2つデータをcsv出力させるには、どのようにすれば宜しい
でしょうか。

宜しくお願い致します。

タイトルRe: 1レコードずつCSVエクスポート
記事No172164
投稿日: 2018/03/13(Tue) 12:56
投稿者ナバ
解決済: ON
こんにちは。

> この時、テーブル[tbl_Data3]の中に同一商品コードが2つあるにもかかわらず、1つの
> コードしか作成されません。2つデータをcsv出力させるには、どのようにすれば宜しい
> でしょうか。

下記で商品コードをファイル名に使っていますから、同じ商品コードがあれば上書きされますね。
> wSQL = Replace(O_FNM, "???", wREC(0))

商品コード+製造番号でユニークにするのか、同一商品コードがあったら枝番を振るのか、
出てほしい状態に合わせて修正しましょう。

タイトルRe^2: 1レコードずつCSVエクスポート
記事No172165
投稿日: 2018/03/13(Tue) 13:19
投稿者LED
解決済: ON
ナバさま

ご教授頂きまして、ありがとうございます。

> 下記で商品コードをファイル名に使っていますから、同じ商品コードがあれば上書きされますね。
> wSQL = Replace(O_FNM, "???", wREC(0))

 → そうですよね。色々見ていたら、あ〜これじゃあ上書きされちゃうって思い出しました。
 
> 商品コード+製造番号でユニークにするのか、同一商品コードがあったら枝番を振るのか、
> 出てほしい状態に合わせて修正しましょう。

 → これ、商品コードに_1のような枝番を振る方法で考えたいのですが、どのように組めば
   宜しいでしょうか?

すみませんが、宜しくお願い致します。

タイトルRe^3: 1レコードずつCSVエクスポート
記事No172166
投稿日: 2018/03/13(Tue) 15:57
投稿者ナバ
解決済: ON
枝番を振るとすると、おおよそ以下の流れです。

1.レコードセットが商品コードの順に並ぶように、SQL文にOrder By句を追加
2.数字カウント用変数と商品コード格納用変数を用意
3.レコードセットの商品コードと商品コード格納用変数を比較し、
 同じだったら数字カウント用変数をプラス1、違ったら1をセットし、
 ファイル名に組み込む
4.商品コード格納用変数にレコードセットの商品コードを格納する

タイトルRe^4: 1レコードずつCSVエクスポート
記事No172167
投稿日: 2018/03/13(Tue) 16:28
投稿者LED
解決済: ON
> 枝番を振るとすると、おおよそ以下の流れです。
>
> 1.レコードセットが商品コードの順に並ぶように、SQL文にOrder By句を追加
> 2.数字カウント用変数と商品コード格納用変数を用意
> 3.レコードセットの商品コードと商品コード格納用変数を比較し、
>  同じだったら数字カウント用変数をプラス1、違ったら1をセットし、
>  ファイル名に組み込む
> 4.商品コード格納用変数にレコードセットの商品コードを格納する

ナバ様

ありがとうございます。

大変申し訳ございませんが、どこにどのような式を書けばよいのか
が全くわからないものでして・・・式を記述して頂けると非常に助かります。

わがまま言いまして申し訳ございませんが、宜しくお願い致します。

タイトルRe^5: 1レコードずつCSVエクスポート
記事No172174
投稿日: 2018/03/14(Wed) 10:09
投稿者ナバ
解決済: ON
こんな感じです

-- 略 --

'テーブルを参照
'1.レコードセットが商品コードの順に並ぶように、SQL文にOrder By句を追加
wSQL = "SELECT [商品コード], [製品番号],[商品名]," 
wSQL = wSQL & " FROM [tbl_Data3] Order By [商品コード]"

Set wREC = wCNN.OpenRecordset(wSQL, dbOpenForwardOnly)

'2.数字カウント用変数と商品コード格納用変数を用意
Dim Edaban AS Integer
Dim wkCd as String


I_CNT = 0

Do Until wREC.EOF
	
	I_CNT = I_CNT + 1

	'3.レコードセットの商品コードと商品コード格納用変数を比較し、
	' 同じだったら数字カウント用変数をプラス1、違ったら1をセットし、
	If wkCd = wREC(0) Then
		Edaban = Edaban + 1
	Else
		Edaban = 1
	End If
	
	'FILE NAME ファイル名に枝番を組み込む
	wSQL = Replace(O_FNM, "???", wREC(0) & "_" & Edaban) 

	'CSV O/P
	Open wSQL For Output As #1
	Write #1, wREC(0), wREC(1), wREC(2), wREC(3)
	Close #1
	'4.商品コード格納用変数にレコードセットの商品コードを格納する
	wkCd = wREC(0)
	
	wREC.MoveNext '次レコードへ
Loop

-- 略 --

タイトルRe^6: 1レコードずつCSVエクスポート
記事No172175
投稿日: 2018/03/20(Tue) 13:05
投稿者LED
解決済: ON
ナバ様

ご連絡遅くなりまして、大変失礼しました。
体調を崩してしまい、ここ数日PCを開けませんでした。

いろいろと教えて頂きまして、ありがとうございます。
内容を確認しながら、進めていければと思います。

本当にありがとうございました。

> こんな感じです
>
> -- 略 --
>
> 'テーブルを参照
> '1.レコードセットが商品コードの順に並ぶように、SQL文にOrder By句を追加
> wSQL = "SELECT [商品コード], [製品番号],[商品名],"
> wSQL = wSQL & " FROM [tbl_Data3] Order By [商品コード]"
>
> Set wREC = wCNN.OpenRecordset(wSQL, dbOpenForwardOnly)
>
> '2.数字カウント用変数と商品コード格納用変数を用意
> Dim Edaban AS Integer
> Dim wkCd as String
>
>
> I_CNT = 0
>
> Do Until wREC.EOF
>
> I_CNT = I_CNT + 1
>
> '3.レコードセットの商品コードと商品コード格納用変数を比較し、
> ' 同じだったら数字カウント用変数をプラス1、違ったら1をセットし、
> If wkCd = wREC(0) Then
> Edaban = Edaban + 1
> Else
> Edaban = 1
> End If
>
> 'FILE NAME ファイル名に枝番を組み込む
> wSQL = Replace(O_FNM, "???", wREC(0) & "_" & Edaban)
>
> 'CSV O/P
> Open wSQL For Output As #1
> Write #1, wREC(0), wREC(1), wREC(2), wREC(3)
> Close #1
> '4.商品コード格納用変数にレコードセットの商品コードを格納する
> wkCd = wREC(0)
>
> wREC.MoveNext '次レコードへ
> Loop
>
> -- 略 --

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

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