異なるソースからのデータセットを結合したり、他のワークシートからデータをコピーしたりする際に、データが一致しない場合、重複した行が発生する可能性があります。これらの重複した行は、データの分析や計算に影響を与え、誤った結果を生み出す可能性があります。このような場合、データの正確性を確保するために、重複した行を削除することができます。この記事では、Spire.XLS for .NET を使用して Excel の重複した行を削除する方法について説明します。
Spire.XLS for .NET をインストールします
まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.XLS
Excel で重複する行を削除する
重複した行を手動で削除することは、非常に反復的で時間のかかる作業です。Spire.XLS for .NET を使用すると、すべての重複した行を一度に識別して削除できます。詳細な手順は次のとおりです。
- Workbook インスタンスを作成します。
- Workbook.LoadFromFile() メソッドを使用して Excel ドキュメントを読み込みます。
- Workbook.Worksheets[sheetIndex] プロパティを使用して、指定されたワークシートをインデックスで取得します。
- Worksheet.Range プロパティを使用して、操作したいセルの範囲を指定します。
- 指定したセル範囲内に重複する内容を含む行を取得します。
- すべての重複した行をループし、Worksheet.DeleteRow() メソッドを使用してそれらを削除します。
- Workbook.SaveToFile() メソッドを使用して結果文書を保存します。
- C#
- VB.NET
using Spire.Xls;
using System.Linq;
namespace RemoveDuplicateRows
{
class Program
{
static void Main(string[] args)
{
//Workbookインスタンスを作成する
Workbook workbook = new Workbook();
//Excelドキュメントを読み込む
workbook.LoadFromFile("sample.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");
}
}
}
Imports Spire.XLS
Imports System.Linq
Namespace RemoveDuplicateRows
Class Program
Private Shared Sub Main(ByVal args() As String)
'Workbookインスタンスを作成する
Dim workbook As Workbook = New Workbook
'Excelドキュメントを読み込む
workbook.LoadFromFile("sample.xlsx")
'最初のシートを取得する
Dim sheet As Worksheet = workbook.Worksheets(0)
'操作したいセルの範囲を指定する
Dim range = sheet.Range(("A1:A" + sheet.LastRow))
'重複した行の番号を取得する
Dim duplicatedRows = range.Rows.GroupBy(Function(x) x.Columns(0).DisplayedText).Where(Function(x) x.Count() > 1).SelectMany(Function(x) x.Skip(1)).[Select](Function(x) x.Columns(0).Row).ToList()
'重複した行を削除する
Dim i As Integer = 0
Do While (i < duplicatedRows.Count)
sheet.DeleteRow((duplicatedRows(i) - i))
i = (i + 1)
Loop
'結果文書を保存する
workbook.SaveToFile("RemoveDuplicateRows.xlsx")
End Sub
End Class
End Namespace
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。