#検討内容
アクセスを使って、下記のようなデータ読み出しをしています。
特急の依頼なので、至急に方向性を決める必要があります。
#####1)入力データ仕様
- データはNo.CSVで保存されている。
- データのmin,max列に、***.**m (単位はm) が含まれている
(例)INPUT
csv
1file name = "1.CSV" 2 3IMG000001 R# TP1 TP2 Min Max Result Actual 4IMG000001 R1 180 181 0.234 0.486 Pass 0.34366 5IMG000001 R2 167 169 0.2657 0.5521 Pass 0.39063 6IMG000001 R3 150 152 21.72m 71.22m Pass 0.03865 7IMG000001 R4 150 151 0.00m 24.01m Pass 0.00777 8IMG000001 R5 158 159 8.46m 49.10m Pass 0.022823 9IMG000001 R6 149 148 0.4855 1.02 Pass 0.6858 10IMG000001 R7 147 146 0.4678 0.9836 Pass 0.6544 11 12中略 R1-R64 (ここは可変) 13 14 15IMG000001 R62 95 89 0.733 1.318 Pass 0.8844 16IMG000001 R63 177 176 0.00m 19.99m Pass 0.00501 17IMG000001 R64 157 156 1.578 2.795 Pass 1.9316
#####2)要求内容
- IMG000001列は不要なので除去する
- ファイル名のNoを示すフィールドの列を追加
- MSGBOXからのINPUTで、試験条件フィールドを1列追加(string)
#####出力データ仕様
(例)OUTPUT.csv
file name = "1.CSV"
file name = "2.CSV"
〃
以下、300.csvぐらいまで続く
|No|R#|TP1|TP2|Min|Max|Result|Actual|
|:--|:--:|--:|
|1|R1|180|181|0.234|0.486|Pass|0.34366|
|1|R2|167|169|0.2657|0.5521|Pass|0.39063|
|1|R3|150|152|21.72m|71.22m|Pass|0.03865|
|中略|R4|〃|〃|〃|〃|〃|〃|〃|
|2|R1|180|181|0.234|0.486|Pass|0.34366|
|2|R2|167|169|0.2657|0.5521|Pass|0.39063|
|2|R3|150|152|21.72m|71.22m|Pass|0.03865|
|中略|R4|〃|〃|〃|〃|〃|〃|〃|
#####3)検討内容
現在はアクセスを使い、CSVデータの読み取りをVBAでマクロを書いています。
- ファイルダイアログでフォルダを指定
- フォルダの中の、CSVをDocmd.transfertextで読込
- 読み込んだファイル名を入れる、テーブルFileNameをSQLで作成し、そこにINSERT
- アクセス側でテーブル作成クエリを実施して、新テーブルを作成
VBA
1Function マクロ1() 2On Error GoTo マクロ1_Err 3Dim FD_PATH As Variant 4Dim fso As Object ' Scripting.FileSystemObject 5Dim csvfile As Variant 6Dim sName As String 7Const DefaultData As String = "DefaultData" 8 9FD_PATH = Get_Folder() 10DoCmd.SetWarnings False 11 12 Set fso = CreateObject("Scripting.FileSystemObject") 13 MsgBox fso.GetFolder(FD_PATH).Files.Count & "のファイルを取り込みますか?" 14 15 For Each csvfile In fso.GetFolder(FD_PATH).Files 16 17 On Error Resume Next 18 If csvfile Like "*.csv" Then 19 DoCmd.TransferText TransferType:=acImportDelim, _ 20 SpecificationName:="", _ 21 TableName:=DefaultData, _ 22 FileName:=FD_PATH & "\" & _ 23 csvfile.Name, _ 24 HasFieldNames:=True 25 26 sName = Replace(csvfile.Name, ".csv", "") 27 28 DoCmd.RunSQL "CREATE TABLE FileName(FILE CHAR(10));" 29 DoCmd.RunSQL "INSERT INTO FileName(FILE) VALUES('" & sName & "');" 30 31 End If 32 On Error GoTo 0 33 34 35 Debug.Print 36 37 Next 38 39 40 41マクロ1_Exit: 42 Exit Function 43 44マクロ1_Err: 45 MsgBox Error$ 46 Resume マクロ1_Exit 47 48End Function
###不具合
1.読込エラー
min,maxのデータに、*****mという文字列がはいっており、CSV読込をするとエラー(null)になる
csv
1IMG000001 R# TP1 TP2 Min Max Result Actual 2IMG000001 R1 180 181 0.234 0.486 Pass 0.34366 3 4 5 floatで読み込みできない行がある 6IMG000001 R5 158 159 ** 8.46m 49.10m** Pass 0.022823
2.データ追加のためのルーピング
1ファイルを読み込んで、テーブルを作成して1ファイルのレコードを入れるところまでは出来たのですが、
その後のループの仕方で悩んでいます。
- 都度、名前を変えて新テーブルを作っていくのがいいのか?
→ この場合は、最後に1テーブルに合体させる必要あり
- 同じテーブルに追加していくのか?
→ どんなSQLをかけばいいのか不明
sql
1SELECT FileName.FILE, 2DefaultData.[R# ], 3DefaultData.[TP1 ], 4DefaultData.[TP2 ], 5DefaultData.Result, 6DefaultData.Actual INTO NewDB 7FROM DefaultData, FileName;
#質問内容
- 不具合1の改善方法
- 不具合2の具体的方法
回答3件
あなたの回答
tips
プレビュー