tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
VB2010 から Excel の並べ替えを実行する(VB.NET) ( No.25 )  [親スレッドへ]
日時: 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



 [スレッド一覧へ] [親スレッドへ]