今回のテーマ
今回はC#でExcelをいじることが出来るClosedXML.Excelについての記事です。
前回の記事はこちらです。
こちらもCHECK
-
【C# sharp】ClosedXML.Excelで有能なInsertDataメソッドの使い方
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
今回の記事では、セルを検索する方法について解説します。
セルの検索方法として、Searchメソッドがありますので、このメソッドをどんどん使っていきます。
それでは、早速みていきましょう!!
Searchメソッドの使用方法
前回の記事で出力した下記のExcelファイルを使っていきましょう。
Searchメソッドを使用して、上記の「ゼニガメ」を検索してみます。下記のソースコードを実行してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using ClosedXML.Excel; using System; class Program { static void Main(string[] args) { const string path = @"D:\exceltest\excel.xlsx"; //パスは変えてください。 XLWorkbook book = new XLWorkbook(path); var searchcell = book.Worksheet(1).Search("ゼニガメ"); foreach(var cell in searchcell) { Console.WriteLine(cell.Address); } } } |
出力結果
B7
「ゼニガメ」のセル番号を出力することができましたね。
Searchメソッドの返り値もCellsメソッドのようにEnumerable型を実装しています。
なので、下記のようにLinqを使用することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using ClosedXML.Excel; using System; using System.Linq; class Program { static void Main(string[] args) { const string path = @"D:\exceltest\excel.xlsx"; //パスは変えてください。 XLWorkbook book = new XLWorkbook(path); var searchcell = book.Worksheet(1).Search("ゼニガメ"); var address = searchcell.Select(n => n.Address).FirstOrDefault(); Console.WriteLine(address); } } |
出力結果
B7
Searchメソッドは部分一致条件
Searchメソッドで複数セルを検索してみましょう。
Searchメソッドは部分一致条件で検索します。
なので、複数のセルを検索できる「フシギ」で検索してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using ClosedXML.Excel; using System; class Program { static void Main(string[] args) { const string path = @"D:\exceltest\excel.xlsx"; //パスは変えてください。 XLWorkbook book = new XLWorkbook(path); var searchcell = book.Worksheet(1).Search("フシギ"); foreach (var cell in searchcell) { Console.WriteLine("名前:"+ cell.Value + " " + "アドレス:" + cell.Address); } } } |
出力結果
名前:フシギダネ アドレス:B1
名前:フシギソウ アドレス:B2
名前:フシギバナ アドレス:B3
「フシギ」に該当するセルを全て検索出来ましたね。
完全一致で検索する方法
Serachメソッドは部分一致条件で検索するので、完全一致で検索する時は少し工夫が必要です。
下記のようなExcelを用意しました。「フシギ」のみ検索したいとします。
単純にSearchメソッドのみ使用すると、下記のように「フシギ」が該当するセル全てが検索されてしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using ClosedXML.Excel; using System; class Program { static void Main(string[] args) { const string path = @"D:\exceltest\excel.xlsx"; //パスは変えてください。 XLWorkbook book = new XLWorkbook(path); var searchcell = book.Worksheet(1).Search("フシギ"); foreach (var cell in searchcell) { Console.WriteLine("名前:"+ cell.Value + " " + "アドレス:" + cell.Address); } } } |
出力結果
名前:フシギダネ アドレス:B1
名前:フシギソウ アドレス:B2
名前:フシギバナ アドレス:B3
名前:フシギ アドレス:B10
なので、上記の検索を行った上でもう一度、完全一致しているセルを抽出しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using ClosedXML.Excel; using System; using System.Linq; class Program { static void Main(string[] args) { const string path = @"D:\exceltest\excel.xlsx"; //パスは変えてください。 XLWorkbook book = new XLWorkbook(path); var searchcell = book.Worksheet(1).Search("フシギ"); var searchcell2 = searchcell.Where(n => n.Value.Equals("フシギ")).Select(n => n).ToList(); foreach (var cell in searchcell2) { Console.WriteLine("名前:"+ cell.Value + " " + "アドレス:" + cell.Address); } } } |
出力結果
名前:フシギ アドレス:B10
Searchメソッドで検索した後にWhereメソッドを使用して抽出しました。
このような処理にすることで、値が完全一致しているセルのみ検索することが出来ます。
検索後の処理の例
Searchメソッドを使用しセルのアドレスを取得出来るので、色々な処理ができます。
下記の例では、検索に一致した行を削除する処理です。「ゼニガメ」に一致している行が削除できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using ClosedXML.Excel; using System; using System.Linq; class Program { static void Main(string[] args) { const string path = @"D:\exceltest\excel.xlsx"; //パスは変えてください。 XLWorkbook book = new XLWorkbook(path); var searchcell = book.Worksheet(1).Search("ゼニガメ").FirstOrDefault(); book.Worksheet(1).Row(searchcell.Address.RowNumber).Delete(); book.SaveAs(@"D:\exceltest\excel.xlsx"); } } |
出力結果
このように取得したアドレスを使用することで、色々な処理が出来ます。
まとめ
今回はExcelの検索方法の記事でした。
Searchメソッドを覚えることでExcelでやりたい処理が沢山出来ると思います。
かなり便利なメソッドなので、この機会に是非覚えてくださいね。
それでは、最後まで見て頂き、ありがとうございました!
ファイルについての記事はこちら