*

[C#, Excel]最終行を取得する

公開日: : 最終更新日:2014/12/30 C#, Excel

Excelを触っているのでC#でExcelネタが続きます。

Excelの行数が知りたい

Excelを使っているとデータを読み取るために、最終行の情報が知りたくなります。
一行ずつデータを見ていって、空のデータか判定する、という動きは処理が遅すぎます。(特にCOMで触っていると)
最終行か判定していってもいいですが、コーディングが面倒というか、なんかいい方法がありそうな気がしました。
というわけで最終行を得る方法を色々調べてみました。

ちなみに今回の前提は最終行がデータがあろうとなかろうとOKです。
要するに使われてる最後のセルが知りたい。

なお、結論だけ見たい方はこのリンクで下部へどうぞ -> SpecialCells

Rows.Countプロパティ

Rows.Countで最終行が取得できるよ、との情報をもとにやってみます。
というわけで以下のソースを実行。

using Excel = Microsoft.Office.Interop.Excel;
Excel.Application app = Globals.ThisAddIn.Application;
Excel.Workbook book = app.ActiveWorkbook;
Excel.Worksheet sheet = book.ActiveSheet;

MessageBox.Show(sheet.Rows.Count.ToString());

結果

wannabenote
そうじゃないんだ。
これは、本当に最終行を出しているようです。
私が知りたいのはデータのある最終行
次です。次。

Cells(Rows.Count, 1).End(xlUp).Rowみたいなこと

ソースを書かなくても大体検討が付きます。
きっと面倒
C#にはCells()なんてないので、Cells[]となります。
Cells[]の段階でインテリセンスが働かないので.End()がない。
そうなると配列で受け取って、下から判定していくことに?
めんどいので却下。

SpecialCells

適当に検索結果をちらほら見てたんですが、大体がVBA
まぁC#で触ろうって人は少ないですよね。
そもそもインターフェースをExcelにしてシステムを作るってのが阿呆らしい。
出来ることが多すぎるので開発の半分が入力エラーチェックになります。
だったらもうUIを作ればいいと思います。
そしてデータ保管用にボタン一つでExcelに出力。そっちの方が楽に決まってます。(あくまで開発側の観点です)

で、仕方なく適当にインテリセンスで触ってた(MicrosoftのAPIは見づらいからインテリセンスでそれっぽいのを探してます)んですが、なにやら面白そうなものを発見。
wannabenote
そしてSpectialCellsで調べてみるとなかなか良さげ。
使ってみましょう。

SpectialCells

ソース

using Excel = Microsoft.Office.Interop.Excel;
Excel.Application app = Globals.ThisAddIn.Application;
Excel.Workbook book = app.ActiveWorkbook;
Excel.Worksheet sheet = book.ActiveSheet;

int lastRows = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row;

MessageBox.Show(lastRows.ToString());

解説

SpecialCells(Excel.XlCellType.xlCellTypeLastCell)

SpecialCellsの使い方は引数に取得したいセルタイプを引き渡します。
今回は取得したいのは最後のセルなので、XlCellType.xlCellTypeLastCellを渡します。

実行結果

wannabenote
間に空白があっても最終セルの行を取得しています。

wannabenote
データがEmptyでも罫線を引くなどをすると、そのセルを最終セルと認識しています。

ぜひともお試しくださいませ。

ad

関連記事

wannabenote

[Excel,C#]C#でExcelにデータを一括出力する

大体いつも忘れるこのやり方。 Excelにデータを出力する 方法論 単純な方法ではデータを一行

記事を読む

Registry レジストリ C# .NET

[.NET, C#]レジストリの値が取得できない原因

正しいPathを指定しているのに 図のような 'HKEY_CURRENT_MACHINE\SO

記事を読む

unity toggle button label

[Unity]コードリファレンス テキストを表示する。

テキストを表示します。 OnGUI() Unityでテキストを表示する場合は、OnGUI()

記事を読む

logo

[C#]AS400をDBに見立ててPCのPGMからODBC接続する

◆前提条件◆ PCにClient Accessがインストールされている。 PCに.NET Fra

記事を読む

Unity_

[Unity]Unity2Dでパズドラのようにタイルを動かす

今回からスクリプトがかなり難しくなってくるかも。 前回の続き。 というわけで前回はドラッグで

記事を読む

NuGet visual studio

[C#]C#でPDFファイルを画像(System.Drawing.Image)にする

PDFを画像に PDFファイルを読み込んで、画像にする必要があったんです。 インターネットで調べ

記事を読む

Unity_

[Unity]Unity 2Dチュートリアル スプライトをクリック(タップ)して削除する

前回、スプライトを置くことが出来たのですが、動かせるようにしたいところです。 ドラッグして動

記事を読む

logo

[Unity]Unity2Dチュートリアル 同じ色のパズルを消去する ソース解説

◆全文 using UnityEngine; using System.Collecti

記事を読む

logo

[C#,Access]microsoft AccessにODBC接続する

「client AccessのODBC」というタイトルのために、AccessのODBC接続を知りたく

記事を読む

unity debug

[Unity]MonoDevelopのデバッグの仕方

コメントで頂いた質問を打破するためにデバッグの仕方でも書いてみます。 まずは、プロジェクトを開

記事を読む

ad

Comment

  1. Johnk322 より:

    Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point. You obviously know what youre talking about, why throw away your intelligence on just posting videos to your site when you could be giving us something enlightening to read? ceacgadffeab

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑