wshのプログラムで困っているため教えてください。
wshでcsv(カンマ区切り)のファイルのソートを行い、Escel形式で保存するプログラムを書いています。
調べてみたところ、wshではソート関数がないようで、
adodbのsort関数を使用して対処しようとしていますが、どうもうまくいきません。
(※adodbの必要はないのですが、ExcelVBAのsortのコードを書こうとするとエラーになってしまったので、adodbにしています。)
<仕様>
csvファイルのソートのキーになるのは、「判定区分」の値で昇順に行いたいです。
csvファイルの一行目は、カラム名としてソート対象にはなりません。
読み込んだcsvファイルをexcel形式に保存したいです。
■csvファイルの形式は、以下のような形です。
性別,年代,判定区分,生年月日,日付
女性,10,0,2010/01/10,2013/7/7 23:57
男性,50,2,2000/03/30,2013/7/7 13:7
女性,10,0,1990/01/20,2013/7/7 15:22
女性,20,1,2001/12/10,2013/7/7 8:10
*-----------------------------------
<ソース>
Set con = CreateObject("ADODB.Connection")
With con
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path & ";" _
& "Extended Properties='text;HDR=Yes;FMT=Delimited'"
.Open
End With
Set rec = CreateObject("ADODB.Recordset")
rec.Open "select * from " & csvfile & " order by 判定区分", con
*-----------------------------------
うまくいかないため
↓でも書いています。
*-----------------------------------
Const adDate = 7
Const adVarChar = 200
Dim ans
Set objADO = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set re = CreateObject("VBScript.RegExp")
rs.Fields.Append "性別", adVarChar, 255
rs.Fields.Append "年代", adVarChar, 255
rs.Fields.Append "判定区分", adVarChar, 255
rs.Fields.Append "生年月日", adDate
rs.Fields.Append "日付", adDate
rs.Open
ans = ""
rs.Sort ="判定区分 ASC"
rs.MoveFirst
Do While Not rs.EOF
ans = ans & rs.Fields(0).Value & vbCrLf
rs.MoveNext
Loop
MsgBox ans
エラーになってしまいます。
ソート処理だけですでににっちもさっちもいかないため、教えていただきたいです。
どうぞ宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんな感じの VBS でどうでしょ。
E:\TMP フォルダ中に test.csv があると仮定しています。
なお、下記はExcelの標準モジュール(Sub モジュール)でも可。
※日付フィールドの書式変更はそちらで行ってください。
Dim cn
Dim rs
Dim xl, bk
Dim i
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.JET.OLEDB.4.0"
.ConnectionString = _
"Data Source=E:\TMP;" _
& "Extended Properties='text;HDR=Yes;" _
& "FMT=Delimited'"
.Open
End With
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM test.csv order by 判定区分", cn', 0, 1, 1
Set xl = CreateObject("excel.application")
xl.Visible = True
Set bk = xl.Workbooks.Add
For i = 0 To rs.Fields.Count - 1
bk.Sheets(1).Cells(1, i + 1) = rs.Fields(i).Name
Next
bk.Sheets(1).Cells(2, 1).CopyFromRecordset rs
xl.UserControl = True
rs.Close:set rs = Nothing
cn.Close:set cn = Nothing
回答してくださってどうもありがとうございます。
本当にとても助かりました。
ADODBの使用ははじめてだったので早急にご回答いただいてとても助かりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
CSV形式での保存時に”文字列...
-
複数のcsvファイルをExcelに一...
-
バッチでCSVを処理する時、空の...
-
csvファイル 項目数取得
-
wshでcsvファイルのソートを行...
-
CSVファイル作成
-
マクロから出力されるcsvのダブ...
-
VBAでcsvファイルを読み込んで...
-
複数のCSVファイルのAccessテー...
-
【C#】パス名で無効な文字
-
エクセル形式のファイルの読み込み
-
csvファイルでの日付設定「yyyy...
-
csvファイルのデータの一部を取...
-
<csv>複数条件で検索・抽出し、...
-
EXCEL|csvで保存→開くcsvを閉じる
-
csvファイルのデータの間引きを...
-
VBS or BATでCSVファイルに入っ...
-
VBScriptでcsvファイルの編集は...
-
Excelでcsvのフィールドが減る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
csvファイル 項目数取得
-
バッチでCSVを処理する時、空の...
-
csvファイルでの日付設定「yyyy...
-
マクロから出力されるcsvのダブ...
-
CSV形式での保存時に”文字列...
-
データ解析ソフトRでのファイル...
-
VBAでcsvファイルを読み込んで...
-
複数のcsvファイルをExcelに一...
-
COBOLでCSVをインプットにして...
-
エクセルVBA 大容量CSVファイル...
-
【C#】パス名で無効な文字
-
CSVファイル作成
-
csvファイルのデータの一部を取...
-
CSVファイルの項目行を削除...
-
EXCEL|csvで保存→開くcsvを閉じる
-
複数のCSVファイルのAccessテー...
-
巨大なCSVの加工(指定列のみの...
-
COBOL85でのCSVファ...
-
csvファイルのデータの間引きを...
おすすめ情報