2023/05/28

Notes - Excel 連携:#10)フィルターの設定

これまで、ノーツデータをExcel シートに一覧出力する方法を記載してきました。今回は、フィルターを設定する方法です。以前記載した Notes - Excel 連携:#7 ウィンドウ枠の固定と組み合わせると使いやすいシートになりますね。


フィルターの設定

フィルターを設定するには、Range オブジェクトの AutoFilter メソッドを使用します。

Range.AutoFilter メソッド (Excel)

Microsoft Learn によると、多数の引数が定義されていますが、どれも省略可能となっています。すべて省略すると、Range の範囲でフィルターがセットされるようです。

私はずぼらなんで、以下のように記述し、1行目全体にセットしています。

   Call oXls.Rows("1:1").AutoFilter()

ちなみに、Rows は、行を表すプロパティです。#5 で列にアクセスするプロパティの Colmuns を紹介しましたが、その”行”版ですね。


ノーツデータをExcel シートに一覧出力

これまでの内容をまとめてコードにすると以下のようになります。

Sub Initialize
   Dim ns As New NotesSession
   Dim ndb As NotesDatabase
   Dim ndc As NotesDocumentCollection
   Dim nd As NotesDocument

   Dim oXls As Variant
   Dim oSheet As Variant

   Dim i As Integer

   '選択文書取得
   Set ndb = ns.CurrentDatabase
   Set ndc = ndb.UnprocessedDocuments

   'Excel の準備
   Set oXls = CreateObject("Excel.Application")
   Call oXls.Workbooks.Add
   Set oSheet = oXls.Workbooks(1).WorkSheets(1)

   '#5)列フォーマットを設定
   oSheet.Columns(1).NumberFormatLocal = "yyyy/m/d hh:mm"
   oSheet.Columns(2).NumberFormatLocal = "#,##0.0_ "
   oSheet.Columns(3).NumberFormatLocal = "@"

   'ヘッダ行の準備
   oSheet.Cells(1, 1).Value = "日付"
   oSheet.Cells(1, 2).Value = "数値"
   oSheet.Cells(1, 3).Value = "テキスト"
   '行フォーマットをテキストに指定
   oSheet.Rows(1).NumberFormatLocal = "@"

   '#4)ノーツ文書をワークシートに出力
   For i = 1 To ndc.Count
      Set nd = ndc.GetNthDocument(i)
      oSheet.Cells(i+1, 1).Value = nd.Fld_DT(0)
      oSheet.Cells(i+1, 2).Value = nd.Fld_Num(0)
      oSheet.Cells(i+1, 3).Value = nd.Fld_Text(0)
   Next

   '#7)ウィンドウ枠の固定
   oXls.ActiveWindow.SplitRow = 1
   oXls.ActiveWindow.FreezePanes = True

   '#10)フィルターの設定
   Call oXls.Rows("1:1").AutoFilter()

   oXls.Visible = True
End Sub


実行すると選択文書の内容を Excel に一覧出力し、1行目はスクロールが固定され、フィルター機能が有効となります。

実際に利用される際には、ヘッダ行やフォーマット、フィールド名は適宜変更し、調整ください。




前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿