質問はそれを要約すると思います。行と列に2つの整数、または範囲の2つの角に行と列に4つの整数がある場合、その範囲の範囲オブジェクトを取得するにはどうすればよいですか。
範囲が複数のセルの場合:
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,3]);
範囲が1つのセルの場合:
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.Cells[1, 1];
Microsoft Excel 14.0 Object Libraryで使用すると、指定された回答がエラーをスローします。オブジェクトにget_rangeの定義が含まれていません。代わりに使用
int countRows = xlWorkSheetData.UsedRange.Rows.Count;
int countColumns = xlWorkSheetData.UsedRange.Columns.Count;
object[,] data = xlWorkSheetData.Range[xlWorkSheetData.Cells[1, 1], xlWorkSheetData.Cells[countRows, countColumns]].Cells.Value2;
このような値を取得できます
string str = (string)(range.Cells[row, col] as Excel.Range).Value2 ;
使用範囲全体を選択
Excel.Range range = xlWorkSheet.UsedRange;
ソース:
http://csharp.net-informations.com/Excel/csharp-read-Excel.htm
燃える
「オブジェクトにget_rangeの定義が含まれていない」というエラーが表示される場合。
フォローしてみてください。
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.Range[sheet.Cells[1, 1], sheet.Cells[3,3]].Cells;
同じ問題に直面して、私が見つけた最も速い解決策は、ソートしたいセルの行を実際にスキャンし、非空白要素を持つ最後の行を決定し、そのグループで選択してソートすることでした。
Dim lastrow As Integer
lastrow = 0
For r = 3 To 120
If Cells(r, 2) = "" Then
Dim rng As Range
Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6))
rng.Select
rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal
r = 205
End If
Next r
Cells(Rows.Count, 1).End(xlUp).Row
のようにしたい場合は、それを行うことができます。
次のコードを使用するだけです:
using Excel = Microsoft.Office.Interop.Excel;
string xlBk = @"D:\Test.xlsx";
Excel.Application xlApp;
Excel.Workbook xlWb;
Excel.Worksheet xlWs;
Excel.Range rng;
int iLast;
xlApp = new Excel.Application();
xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1);
iLast = xlWs.Rows.Count;
rng = (Excel.Range)xlWs.Cells[iLast, 1];
iLast = rng.get_End(Excel.XlDirection.xlUp).Row;
私はうまくいくように見える良い短い方法を見つけました...
Dim x, y As Integer
x = 3: y = 5
ActiveSheet.Cells(y, x).Select
ActiveCell.Value = "Tada"
この例では、3列上および5行下を選択し、セルに「Tada」を配置しています。
UsedRangeは「バージン」セルで正常に機能しますが、セルが過去に入力されている場合、UsedRangeは古い値を提供します。
例えば:
「セルA1からA5が入力されたExcelシートを考えてくださいテキスト"。このシナリオでは、 sedRange は次のように実装する必要があります。
Long SheetRows;
SheetRows = ActiveSheet.UsedRange.Rows.Count;
SheetRows変数の監視では、この2行の実行後に値5を表示する必要があります。
Q1:しかし、A5の値が削除されるとどうなりますか?
A1:SheetRowsの値は5
Q2:なぜですか?
A2:MSDNはUsedRangeプロパティを次のように定義しているためです。
すべてを表すMicrosoft.Office.Interop.Excel.Rangeオブジェクトを取得します値を含むセルいつでも
したがって、質問は次のとおりです。この動作の回避策が存在しますか?
私は2つの選択肢があると思います:
Long SheetRows;
SheetRows = ActiveSheet.Range("A1").CurrentRegion.Rows.Count;