ページ

2014年4月7日月曜日

VB.NETからExcel2007のソート機能を使う

VB.NETからExcel2007のソート機能を使う


ソートキーが文字列の場合、順番を指定してソートしてあげないと、希望通りのソートができないですよね。
VB.NETから簡単にエクセルのソート順を文字列していして実行する方法を見つけたので書いておきます。
VBレスキュー(花ちゃん)のサンプル投稿用掲示板
を参考にしてみたものの、いまひとつピンとこない。

半日悩んだ結果、こんなに簡単なコードで、出来る事がわかりました。
「CustomOrder」を使います。


以下にサンプルコードを書いておきます。
既にエクセルオブジェクトが読み込まれていて、アクティブシートが選択されている状態であることを前提にしています。
「strソート文字列」はソートする文字列群がすでに代入された、StringのArrayListとします。

「CustomOrder」はシート毎に設定すると考えられます。
シートを選択してSort.SortFieldsに設定してあげたらできました。


サンプルコード(VS2010 VB.NET /Excel2007)


Imports Microsoft.Office.Interop.Excel

Public xlAppRepo As Microsoft.Office.Interop.Excel.Application ' Excelオブジェクト

Public Sub xLlSort()
        Dim strソートリスト As New ArrayList'代入は省略。各自Addしてください。

        Dim xlRange As Range = xlAppRepo.Range("A2:Z30")'範囲
        Dim xlRange1 As Range = xlAppRepo.Range("A2")'ソートキー列
        With xlAppRepo.ActiveSheet.Sort
            With .SortFields
                .Clear()
                .Add(Key:=xlRange1, _
                    CustomOrder:=String.Join(",", CType(strソートリスト.ToArray(GetType(String)), String())) _
                    )
            End With
            .SetRange(xlRange)
            .Apply()
        End With
End Sub

0 件のコメント:

コメントを投稿