※ ChatGPTを利用し、要約された質問です(原文:SQLサーバーから抽出したデータの並び替え)
SQLサーバーから抽出したデータの並び替え
このQ&Aのポイント
SQLサーバーから抽出したデータをVBAを使って降順に並び替える方法について説明します。
エクセルのマクロでデータを降順に並び替える処理を行う際に発生するエラーについて解決方法を探しています。
エクセルの新しいBookで同様の処理を行った場合にはエラーが発生せず、正常にデータを降順に並び替えられます。
SQLサーバーから抽出したデータの並び替え(降順)をVBAを使って行おうとしてます。
以下にマクロ詳細を示します。
---------------------------------------------------
Worksheets("Sheet1").Range("A4:HT20").ClearContents
Worksheets("Sheet2").Range("D4") = ""
Worksheets("Sheet2").Range("D5") = ""
Worksheets("Sheet2").Range("D6") = ""
Worksheets("Sheet2").Range("D8") = ""
Worksheets("Sheet2").Range("D10") = ""
Worksheets("Sheet2").Range("D12") = ""
Worksheets("Sheet2").Range("E16") = ""
Worksheets("Sheet2").Range("E18") = ""
'Table1に最新の規格値を表示させる
Dim CN As Connection 'Connectionオブジェクト
Dim rs As Recordset 'Recordsetオブジェクト
Dim SelCmd As String 'データを抽出するSQLステートメント
'DBに接続
Set CN = New Connection
CN.ConnectionString = "Driver={SQL Server};" & _
"server=○○○.○○.○○.○○; database=DB ; uid=ID; pwd=1234;"
CN.Open
'Lotの入力
Dim MLot As String
MLot = InputBox("Lotを入力 例 12AB")
Sheets("Sheet1").Range("B1") = MLot
SelCmd = "SELECT * FROM PD " _
& "WHERE Lot = '" & Sheets("Sheet1").Range("B1").Value & "'"
'データを取得
Set rs = New Recordset
rs.Open SelCmd, CN
'シートに貼り付け
Sheets("Sheet1").Range("A4").CopyFromRecordset rs
'後処理
rs.Close
Set rs = Nothing
CN.Close
Set CN = Nothing
☆☆☆
'データを降順に並び替え
Sheets("Sheet1").Select
→ Range("A3:HT20").Sort Key1:=Range("D4"), Order1:=xlDescending, header:=xlGuess
☆☆☆
--------------------------------------------------------
実行時エラー’1004’
RangeクラスのSortメソッドが失敗しました。とエラーメッセージが出て、
→の部分が黄色く表示されてデバックモードになってしまいます。
新しいエクセルBookで新規で開いて、データを貼り付け☆☆☆に挟まれた部分だけを、
マクロではしらせてみると、無事にデータを降順に並べ替えてくれました。
なぜか、目的とするエクセルファイル内のマクロに取り入れるとエラーが出るのかが
わかりません。
解決方法が分かる方いらっしゃいましたら、教えて下さい。
宜しくお願い致します。
お礼
& " ORDER BY 並び替えたい列名 DESC;" でいけました。 SQLの構文にこのような便利なものもあるのですね。 勉強になりました。 ありがとうございました。