*

[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

関連記事

unity moving

[Unity]コードリファレンス Componentを取得する。削除する。

コンポーネントを取得して削除します。 GetComponent コンポーネントの追加と同じよ

記事を読む

wannabenote

[C#]ポートを使用しているプロセスを特定してAcivateするやつ

ポートからプロセスを特定してAcivateするやつ作りました。 https://github.

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 画面上のGameObjectを左下から取得する

前回、画面上のオブジェクトを一括で手に入れる方法はわかりました。 しかし、これではどのオブジェクト

記事を読む

logo

[Unity]GameObject.Findは遅い

遅いらしいです。 なので、マネージャークラスを作りましょう、というのが風潮らしいです。 マネージ

記事を読む

logo

[Unity]Unity 2Dチュートリアル スプライトをドラッグ(タップ)して移動する ソース解説

◆全文 using UnityEngine; using System.Collection

記事を読む

PDFClearBlankToText

[C#, iTextsharp]PDFClearBlankToText PDFのテキストを読み込んで空白削除する

使用は自己責任でお願いします。 ◆概要 前回のBlankClearのあとにPDFからコピペが

記事を読む

logo

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

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

記事を読む

logo

[Unity, C#]曲線を描こう エルミート曲線とベジエ曲線

演出を作る際に綺麗な曲線を描きたいですよね。 というわけでC#でエルミート曲線とベジエ曲線を計算す

記事を読む

logo

[C#]別のソリューションのクラスをSerializeしたい。参照設定とかいじらずに。

すごいニッチ。 こんなソリューションがあるとして、 こっちのソリューションで

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色で繋がったパズルを消去する

前回の続き。 前回で横に同じ色がある場合は消去できるようになりました。 テトリスとぷよぷよを足し

記事を読む

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

Johnk322 にコメントする コメントをキャンセル

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

次の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 ↑