- 日時: 2012/06/06 19:22
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,並べ替え,ソート,Sort, * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の並べ替え(ソート)を実行する '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button23_Click(sender As System.Object, e As System.EventArgs) Handles Button23.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '============================= 並べ替え(ソート) ==============================
'-------------------------------------------------------------------------- '何も記入していないと解らないので仮データを記入(R1ToA1 関数の使用例もかねて) Dim xlRange As Excel.Range = Nothing Dim nRnd As New System.Random() For c As Integer = 1 To 10 For r As Integer = 1 To 20 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) '1 〜 100 までのランダムなデータを作成 xlRange.Value = nRnd.Next(1, 100) ' CInt(100 * Rnd()) MRComObject(xlRange) Next r Next c '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) '---------------------------------------------------------
'Range オブジェクトの Sort メソッド を使っての並べ替え '-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://www.hanatyan.sakura.ne.jp/vbhlp/excel09.htm#xl_1 '-------------------------------------------------------------------------- Dim xlRange1 As Excel.Range xlRange1 = xlSheet.Range("B1") xlRange = xlSheet.Range("A1:J20") 'セル範囲 "A1:J20" を B 列をキー(列単位)に降順の並べ替え xlRange.Sort(Key1:=xlRange1, Order1:=Excel.XlSortOrder.xlDescending, _ Orientation:=Excel.XlSortOrientation.xlSortColumns) MRComObject(xlRange1) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) '--------------------------------------------------------------------------
' Excel 2007 〜 の Sort オブジェクト を使っての並べ替え ' --------------------- マクロの記録を取った場合 --------------------------- ' ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ' ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B20") _ ' , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal ' With ActiveWorkbook.Worksheets("Sheet1").Sort ' .SetRange Range("A1:J20") ' .Header = xlGuess ' .MatchCase = False ' .Orientation = xlTopToBottom ' .SortMethod = xlPinYin ' .Apply ' End With '-------------------------------------------------------------------------- xlRange1 = xlSheet.Range("B1") xlRange = xlSheet.Range("A1:J20") Dim xlSort As Excel.Sort Dim xlSortFields As Excel.SortFields xlSort = xlSheet.Sort
xlSortFields = xlSort.SortFields Dim xlSortFields1 As Excel.SortField = Nothing With xlSortFields .Clear() 'SortFields オブジェクトをすべてクリアします '新しい並べ替えの条件を作成 'Key:並べ替える基準のセル SortOn:並べ替えの基準(値・セルの色等) 'Order: 並べ替えの順序(昇順・降順) CustomOrder:ユーザー定義の並べ替えの順序 'DataOption:数値とテキストの並べ替えの選択
'B 列を基準に、値 を基準に、昇順で、テキストを数値データとして並べ替えます。 'SortFields.Add メソッド は、新しい並べ替えフィールドを作成し、SortFields オブジェクトを返すので '変数に受けて解放してやらないとプロセスが終了しません。(ただ、このような使い方が正しいのかは、疑問) xlSortFields1 = .Add(Key:=xlRange1, SortOn:=Excel.XlSortOn.xlSortOnValues, _ Order:=Excel.XlSortOrder.xlAscending, _ DataOption:=Excel.XlSortDataOption.xlSortTextAsNumbers) 'Sort オブジェクトの開始位置と終了位置を設定します xlSort.SetRange(xlRange) '最初の行にヘッダー情報が含まれるかどうかを指定します xlSort.Header = Excel.XlYesNoGuess.xlNo '範囲全体が並べ替えの対象になります。 '大文字と小文字を区別して検索するには、True に設定します xlSort.MatchCase = False '並べ替え方向を指定します xlSort.Orientation = Excel.XlSortOrientation.xlSortColumns '列単位で並べ替え '中国語の並べ替え方法を指定します xlSort.SortMethod = Excel.XlSortMethod.xlPinYin '中国語の発音表記の順で並べ替え 'コピーした並べ替え書式を適用します。 xlSort.Apply() End With MRComObject(xlRange) MRComObject(xlSortFields1) MRComObject(xlSortFields) MRComObject(xlSort) MRComObject(xlRange1) '確認のために、3秒間表示しておく System.Threading.Thread.Sleep(3000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|