4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ワークシートの範囲内のテキストをLINQで検索する

Posted at

はじめに

未だにCOMコンポーネントを使いExcelを操作しているみなさんこんにちは。
業務上仕方ないとはいえ、使いにくくてストレスが溜まりますよね。
サクッとシート内の検索をしたいだけなのに、ググったら公式はFindを使えという始末。

なんだこれ、使いにくい。
パフォーマンスも悪いらしいし。

そんな方への新提案です。

LINQで検索できるようにすればいいじゃない

いろいろと調べているうちに、どこかのStackOverflowのページ(もうどこだかわからなくなった)でRangeをIEnumerableにキャストしているのを発見しました。

IEnumerableになるということはLINQが使えるということ。
もうこれで煩わしい、Find、FindNextとはおさらばできます。

具体例

上記のFindのページの例を借りると以下のようになります。

VB
Dim Fruits As IEnumerable(Of Excel.Range) = Me.Application.Range("A1", "B2").Cells.Cast(Of Excel.Range)
C#
IEnumerable<Excel.Range> Fruits = Application.get_Range("A1", "B3").Cells.Cast<Excel.Range>();

IEnumerableにしてしまえば、後はもうLINQでWhereするなりAnyするなり、Listにするなり好きにしちゃいましょう。

VB
Dim apples = Fruits.Where(Function(x) x.Value.ToString() = "apples")
C#
var apples = Fruits.Where(x => x.Value.ToString() == "apples");

楽チン!!!

おわりに

最近はいろいろ便利なExcel操作パッケージがある中で、そもそもCOMコンポーネントでExcel操作なんてもうやめようぜ、という話なんですが、
なかなか検索しても情報が少なくなってきているので、新たな発案(知っている人は知っているんだろうけど)として情報を残しておきます。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?