48

列Aには、次のようなデータがあります(つまり、頻繁な空白セル)。

HEADING  <-- this is A1
kfdsl
fdjgnm
fdkj

gdfkj
4353

fdjk  <-- this is A9

データがある最後のセルのセル参照を取得できるようにしたいと思います。したがって、上記の例では、次のように戻ります。A9

私はこれを試しましたが、最初の空白のセルで停止します(つまり、戻りA4ます)

numofrows = destsheet.Range("A2").End(xlDown).Row - 1
4

10 に答える 10

49

私はこの方法が好きです:

ActiveSheet.UsedRange.Rows.Count

列数でも同じことができます。私にとっては、常に仕事です。ただし、別の列にデータがある場合、コードはシート内のすべてのセル範囲を探しているため、上記のコードもそれらを考慮します。

于 2011-06-15T10:33:09.263 に答える
41

最も安全なオプションは

Lastrow =  Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Lastcol =  Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column

UsedRangeまたはを使用しないでSpecialCells(xlLastCell)くださいEnd(xlUp)。以前にいくつかの行を削除した場合、これらの方法はすべて間違った結果をもたらす可能性があります。Excel は、これらの非表示のセルを引き続きカウントします。

これらのメソッドは、セルを削除し、ワークブックを保存して閉じてから再度開くと、再び機能します。

于 2013-01-18T00:28:45.340 に答える
26

これは、Excel のバージョン (2003、2007、2010) に関係なく機能します。前者は 1 シートに 65536 行あり、後者の 2 つは 100 万行程度です。Sheet1.Rows.Countバージョンに応じてこの番号を返します。

numofrows = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp).Row

または同等だが短い

numofrows = Sheet1.Cells(Sheet1.Rows.Count,1).End(xlUp)

これは、列 A の一番下から空でない最初のセルを検索し、その行番号を取得します。

これは、他の列のさらに下にあるデータがある場合にも機能します。したがって、たとえば、例のデータを取得し、FY4763 セルに何かを書き込んだ場合でも、上記は正しく 9 を返します (4763 ではありません。このUsedRangeプロパティを含むメソッドは間違って返します)。

本当に、セル参照が必要な場合は、次を使用する必要があることに注意してください。最初に行番号を取得してからセル参照を作成する必要はありません。

Set rngLastCell = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp)

このメソッドは、特定のエッジ ケースで失敗することに注意してください。

  • 最後の行にはデータが含まれています
  • 最後の行が非表示または除外されています

したがって、これらの目的で行 1,048,576 を使用する予定がある場合は注意してください。

于 2011-06-10T09:24:16.667 に答える
19

すべての可能性を長いテスト シートと比較しました。

0,140625 秒

lastrow = calcws.Cells.Find("*", [A1], , , xlByColumns, xlPrevious).row

0 秒

iLastRow = calcws.Cells(rows.count, "a").End(xlUp).row

numofrows = calcws.Cells.SpecialCells(xlLastCell).row

0,0078125 秒

lastrow = calcws.UsedRange.rows.count
Do While 1
    If calcws.Cells(lastrow, 1).Value = "" Then
        lastrow = lastrow - 1
    Else
        Exit Do
    End If
Loop

お気に入りは明らかだと思います...

于 2013-02-24T13:43:18.317 に答える
6

Dim RowNumber As Integer
RowNumber = ActiveSheet.Range("A65536").End(xlUp).Row

あなたの場合、それは #9 を返すはずです

于 2012-11-01T17:51:19.610 に答える
5

別のサイトでこのアプローチを見つけました。新しい大きなサイズの Excel で動作し、行と列の最大数をハードコードする必要はありません。

iLastRow = Cells(Rows.Count, "a").End(xlUp).Row
iLastCol = Cells(i, Columns.Count).End(xlToLeft).Column

オーストラリア、メルボーンのマドレーカーに感謝

于 2013-01-04T19:49:45.383 に答える
3

これらは両方とも同様に機能し、Excel が最後にデータを参照した時間を定義できるようにします。

numofrows = destsheet.UsedRange.SpecialCells(xlLastCell).row

numofrows = destsheet.Cells.SpecialCells(xlLastCell).row
于 2011-06-10T05:22:41.367 に答える
2
  n = ThisWorkbook.Worksheets(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
于 2016-08-15T17:46:34.567 に答える
1

より明確にするために、明確な例を追加して実行したいと思います

            openFileDialog1.FileName = "Select File"; 
            openFileDialog1.DefaultExt = ".xls"; 
            openFileDialog1.Filter = "Excel documents (.xls)|*.xls"; 


            DialogResult result = openFileDialog1.ShowDialog();


            if (result==DialogResult.OK)
            {

                string filename = openFileDialog1.FileName;


                Excel.Application xlApp;
                Excel.Workbook xlWorkBook;
                Excel.Worksheet xlWorkSheet;
                object misValue = System.Reflection.Missing.Value;

                xlApp = new Excel.Application();
                xlApp.Visible = false;
                xlApp.DisplayAlerts = false;



                xlWorkBook = xlApp.Workbooks.Open(filename, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

                var numRows = xlWorkSheet.Range["A1"].Offset[xlWorkSheet.Rows.Count - 1, 0].End[Excel.XlDirection.xlUp].Row;

                MessageBox.Show("Number of max row is : "+ numRows.ToString());

                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();

            }
于 2014-10-20T08:58:03.093 に答える