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 件のコメント:
コメントを投稿