異なるソースからデータセットを統合したり、他のワークシートからデータをコピーしたりする際、データが適切に一致していない場合には重複行が発生することがあります。こうした重複行は、データ分析や計算結果に影響を与え、誤った結果につながる可能性があります。そのため、重複行の削除は非常によく行われる操作の一つです。この記事では、C#コードを使用してExcelの重複行を削除する方法を紹介します。
必要なライブラリの導入
はじめに、必要なDLLファイルを.NETプロジェクトに参照として追加します。DLLは公式サイトからダウンロードするか、NuGet経由でインストールできます。
PM> Install-Package Spire.XLS
C#およびVB.NETでExcelの重複行を削除する
重複行を手動で削除する作業は、非常に繰り返しが多く、時間もかかります。プログラムを利用すれば、重複行を一括で検出・削除でき、作業効率を大幅に向上させることができます。以下はその具体的な手順です。
- Workbook オブジェクトを作成します
- Workbook.LoadFromFile() メソッドを使用してExcelファイルを読み込みます
- Workbook.Worksheets[sheetIndex] プロパティを使用して、指定したワークシートを取得します
- Worksheet.Range プロパティを使用して、重複データを削除するセル範囲を指定します
- 指定範囲内で重複内容を含む行を取得します
- 重複している行をループ処理し、Worksheet.DeleteRow() メソッドで削除します
- Workbook.SaveToFile() メソッドを使用して結果ファイルを保存します
サンプルコードは以下の通りです:
using Spire.Xls;
using System.Linq;
namespace RemoveDuplicateRows
{
class Program
{
static void Main(string[] args)
{
// Workbook オブジェクトを作成
Workbook workbook = new Workbook();
// サンプルExcelファイルを読み込む
workbook.LoadFromFile("Test.xlsx");
// 最初のワークシートを取得
Worksheet sheet = workbook.Worksheets[0];
// 重複データを削除するセル範囲を指定
var range = sheet.Range["A1:A" + sheet.LastRow];
// 重複している行番号を取得
var duplicatedRows = range.Rows
.GroupBy(x => x.Columns[0].DisplayedText)
.Where(x => x.Count() > 1)
.SelectMany(x => x.Skip(1))
.Select(x => x.Columns[0].Row)
.ToList();
// 重複行を削除
for (int i = 0; i < duplicatedRows.Count; i++)
{
sheet.DeleteRow(duplicatedRows[i] - i);
}
// 結果ファイルを保存
workbook.SaveToFile("RemoveDuplicateRows.xlsx");
}
}
}
まとめ
Excelで重複行が存在すると、データ分析や計算結果の正確性に影響を与える可能性があります。この記事では、C#およびVB.NETを使用して、Excel内の重複行を効率的に検出・削除する方法を紹介しました。プログラムによる自動処理を活用することで、手作業による時間と労力を削減し、大量データの整理もより簡単に行えるようになります。