Dim wb As New Workbook Dim st As New Worksheet Dim sortField As Range Dim rg As Range 'csvファイルを開く Set wb = Workbooks.Open("c:\abc.csv") 'シートをセット(csvファイルはsheet1しかない) Set st = wb.Sheets(1) For Each rg In st.Range("1:1") If rg = "容器番号" Then 'ソートする列を探す Set sortField = rg Exit For End If Next 'ソート(容器番号) st.UsedRange.Sort Key1:=sortField, Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin
大量のデータの時、65535行(excel2007以下),100万?を超えた時
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source='c:\';" & _ "Extended Properties='Text;HDR=YES'" 'c:\abc.csvというファイルをデータベーステーブルとして開く、「容器番号」という列を昇順でソート Set rs = cn.Execute("SELECT * FROM abc.csv ORDER BY clng(容器番号) ASC") Do Until rs.EOF 'データを書き出しなどの処理 '... rs.MoveNext Loop"HDR=YES"は最初の行はタイトルという意味。
ちなみに、下の順番にならないためには、
1
10
2
3
...
クエリーをこのようにclng関数を使う
SELECT * FROM abc.csv ORDER BY clng(容器番号) ASC
sqlではcastやconvertなど使いますが、Microsoft.Jet.OLEDB(Access)ではclngなどで文字列を数字に変換する
0 件のコメント:
コメントを投稿