範囲の取得
'4つの数字で範囲を取得 Dim range1 = ws.Range(4, 1, 4, 2) '処理速度の面ではおすすめ '文字列で範囲を取得 Dim range2 = ws.Range("A1:B1") '2つの文字列で範囲を取得 Dim range3 = ws.Range("A3", "B3") '2つの XLAddresses で範囲を取得 Dim range4 = ws.Range(ws.Cell(2, 1).Address, ws.Cell(2, 2).Address) 'ws.FirstCellUsed と ws.LastCellUsed Dim range = ws.Range(ws.FirstCellUsed.Address, ws.LastCellUsed.Address) '範囲の中の Row(1) を取得 Dim range5 = ws.Range("B4:C5").Row(1) '範囲の中の Column(2) を取得 Dim range6 = ws.Range("E1:F4").Column(2) '行全体を番号で取得 Dim range7 = ws.Row(7) Dim range8 = ws.Rows(1, 3) '行全体を文字列で取得 Dim range9 = ws.Rows("5:6") '処理速度が遅くなるので非推奨 Dim range10 = ws.Range("5:6") '処理速度が遅くなるので非推奨 '列全体を番号で取得 Dim range11 = ws.Columns(3) Dim range12 = ws.Columns(3, 4) '列全体を列名で取得 Dim range13 = ws.Column("C") '処理速度が遅くなるので非推奨 Dim range14 = ws.Columns("C:D") '処理速度が遅くなるので非推奨 Dim range15 = ws.Range("E:F") '処理速度が遅くなるので非推奨 '複数の範囲を取得して同時に処理 ws.Ranges("A1:B2,C3:D4,E5:F6").Style.Fill.BackgroundColor = XLColor.Red
注意
大きな範囲(行全体や列全体など)を取得して処理する場合、文字列で範囲を取得するよりも番号で取得したほうが処理時間が短くなります。
文字列で取得した範囲の処理に時間がかかる場合は、番号で範囲を取得してみてください。
範囲のコピー
別のシートに範囲をコピーする例。
anotherSheet.Cell(1,1).Value = range
範囲の削除・クリア
range.Delete
range.Clear
範囲の自動的な移動
下記のコードでは、行・列の挿入によって、取得しておいた範囲が自動的に移動する様子を示しています。
Dim workbook = new XLWorkbook Dim ws = workbook.Worksheets.Add("範囲の移動") '元の範囲を示すテキストアドレス Dim orgAddressStr As String = "B3:C3" '範囲を取得 Dim targetRange = ws.Range(orgAddressStr) '取得した範囲の前に行・列を挿入 ws.Row(1).InsertRowsAbove(2) ws.Column(1).InsertColumnsBefore(2) '取得した範囲が自動的に移動した場所の背景色を薄い青色に With targetRange .Column(1).SetValue("移動した範囲") .Style.Fill.SetBackgroundColor(XLColor.LightBlue) End With '取得した範囲が移動する前の場所の背景色を黄色に With ws.Range(orgAddressStr) .Column(1).SetValue("元の範囲") .Style.Fill.SetBackgroundColor(XLColor.Yellow) End With workbook.SaveAs("D:\test\ShiftingRanges.xlsx")
範囲(セル)の結合
Dim workbook = new XLWorkbook Dim ws = workbook.Worksheets.Add("セルの結合") '範囲の中の行の結合 ws.Cell("B2").Value = "B2:D3 の範囲の Row(1) を結合" With ws.Range("B2:D3") .Row(1).Merge _ .Style.Fill.BackgroundColor = XLColor.Yellow '罫線の設定 .Style.Border.SetOutsideBorder(XLBorderStyleValues.Thick) _ .Border.SetOutsideBorderColor(XLColor.Red) End With '範囲の中の列の結合 ws.Cell("F2").Value = "F2:G8 の範囲の Column(1) を結合" With ws.Range("F2:G8") .Column(1).Merge _ .Style.Alignment.SetWrapText _ .Alignment.SetVertical(XLAlignmentVerticalValues.Center) _ .Fill.SetBackgroundColor(XLColor.Yellow) '罫線の設定 .Style.Border.SetOutsideBorder(XLBorderStyleValues.Thick) _ .Border.SetOutsideBorderColor(XLColor.Red) End With '範囲の結合 ws.Cell("B4").Value = "B4:D6 を結合" With ws.Range("B4:D6") .Merge _ .Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center) _ .Alignment.SetVertical(XLAlignmentVerticalValues.Center) _ .Fill.SetBackgroundColor(XLColor.Yellow) '罫線の設定 .Style.Border.SetOutsideBorder(XLBorderStyleValues.Thick) _ .Border.SetOutsideBorderColor(XLColor.Red) End With '範囲の結合を解除 ws.Cell("B8").Value = "B8:D8 を結合 → 結合を解除" With ws.Range("B8:D8") .Merge _ .Unmerge '罫線の設定 .Style.Border.SetOutsideBorder(XLBorderStyleValues.Thick) _ .Border.SetOutsideBorderColor(XLColor.Red) End With workbook.SaveAs("D:\test\MergeCells.xlsx")
結合セルの検索
下記のコードでは、アドレス “B4” を含む最初の結合範囲の背景色を赤色にします。
Dim mergedRange = ws.MergedRanges.First(Function(r) r.Contains("B4")) mergedRange.Style.Fill.BackgroundColor = XLColor.Red
範囲(表)の回転
下図の最初の表をコピーして2番目の表を作り、2番目の表を回転します。
上図で B11 にあるテキスト「( *´艸`)」は、2番目の表を回転するときのオプションによって移動されるか上書きされるかが決まります。
Dim workbook = New XLWorkbook Dim ws = workbook.Worksheets.Add("表の回転") '表を作成(開始セルは B2) Dim originalTable = New List(Of String()) originalTable.Add(New String() {"顔文字"}) originalTable.Add(New String() {"平静", "スマイル", "狼狽", "哀しみ", "怒り"}) originalTable.Add(New String() {"(*´ω`*)", "(*^_^*)", "(;^ω^)", "( ;∀;)", "(# ゚Д゚)"}) ws.Cell("B2").Value = originalTable With ws.Range("B2:F4") '表タイトルの書式設定 .FirstRow.Merge.Style.Alignment _ .SetHorizontal(XLAlignmentHorizontalValues.Center) _ .Fill.SetBackgroundColor(XLColor.LightBlue) '表の罫線を設定 .Style.Border.SetOutsideBorder(XLBorderStyleValues.Thick).Border.SetInsideBorder(XLBorderStyleValues.Thin) '表をコピー(開始セルは B6) Dim copiedTable = .CopyTo(ws.Cell("B6")) 'コピーした表の下にテキストを入力 ws.Cell("B9").Value = "( *´艸`)" 'コピーした表の向きを変更 '向きを変える表の下に別のテキストがあったらそれを移動 copiedTable.Transpose(XLTransposeOptions.MoveCells) '向きを変える表の下に別のテキストがあったらそれを上書き 'copiedTable.Transpose(XLTransposeOptions.ReplaceCells) End With workbook.SaveAs("D:\test\Transpose Ranges.xlsx")