*

[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_

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

◆全文 using UnityEngine; using System.Collecti

記事を読む

addcomp

[Unity]コードリファレンス コンポーネントをアタッチする。

コンポーネントをプログラム実行時に追加します。 AddComponent() AddComp

記事を読む

logo

[C#, Generic]UnityのAddComponentとかなんとかComponentを実装してみる

UnityのAddComponentってありますよね。 みたいなやつ。 このジェネリクスの

記事を読む

logo

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

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

記事を読む

logo

[C#]BinaryFormatterでのDeserializeが遅い。遅すぎる。

概要 BinaryFormatterのサイズ的には大して変わらんとして、じゃあ速度的にはどうなのよ

記事を読む

Unity_

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

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

記事を読む

logo

[Unity]Unity 2Dチュートリアル スプライトを元の位置に戻す ソース解説

◆全文 using UnityEngine; using System.Collection

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 番外編 これパズドラじゃなくね?

前回の続き。 パズドラみたく直線で3つ以上連なっているときに消したいんです。 そして、何を勘

記事を読む

logo

[C#, Linq]foreach構文は書けるけど、Linqはよくわからなくて勉強する気がなくなった貴方に

Linq普及委員会エントリです。 いまさらすぎるわ! とか言わないで。 小難しい話はなしに、

記事を読む

unity moving

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

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

記事を読む

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 ↑