はじめに
未だにCOMコンポーネントを使いExcelを操作しているみなさんこんにちは。
業務上仕方ないとはいえ、使いにくくてストレスが溜まりますよね。
サクッとシート内の検索をしたいだけなのに、ググったら公式はFindを使えという始末。
なんだこれ、使いにくい。
パフォーマンスも悪いらしいし。
そんな方への新提案です。
LINQで検索できるようにすればいいじゃない
いろいろと調べているうちに、どこかのStackOverflowのページ(もうどこだかわからなくなった)でRangeをIEnumerableにキャストしているのを発見しました。
IEnumerableになるということはLINQが使えるということ。
もうこれで煩わしい、Find、FindNextとはおさらばできます。
具体例
上記のFindのページの例を借りると以下のようになります。
Dim Fruits As IEnumerable(Of Excel.Range) = Me.Application.Range("A1", "B2").Cells.Cast(Of Excel.Range)
IEnumerable<Excel.Range> Fruits = Application.get_Range("A1", "B3").Cells.Cast<Excel.Range>();
IEnumerableにしてしまえば、後はもうLINQでWhereするなりAnyするなり、Listにするなり好きにしちゃいましょう。
Dim apples = Fruits.Where(Function(x) x.Value.ToString() = "apples")
var apples = Fruits.Where(x => x.Value.ToString() == "apples");
楽チン!!!
おわりに
最近はいろいろ便利なExcel操作パッケージがある中で、そもそもCOMコンポーネントでExcel操作なんてもうやめようぜ、という話なんですが、
なかなか検索しても情報が少なくなってきているので、新たな発案(知っている人は知っているんだろうけど)として情報を残しておきます。