*

[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

関連記事

logo

[C#]パスワード暗号化プログラムの初歩

パスワード暗号化の初歩的方法。 子供だましみたいなプログラムですね。 これは入社四か月の頃にプロ

記事を読む

unity debug

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

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

記事を読む

unity

[Unity]コードリファレンス GameObjectの検索と削除

検索ですので、検索対象となるCubeでも適当に置いておきます。 GameObject.

記事を読む

Unity_

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

◆全文 public class GameSystem : MonoBehaviour {

記事を読む

logo

[C#]AS400のメンバーを指定してデータにアクセスする

◆前提条件◆ CliantAccessをインストールしている。 .NET Framework3.

記事を読む

Unity2_1

[Unity]Unity2Dチュートリアル スプライトを利用する

前回の続き。 早速、スプライトを設置して作っていきましょう。 ※スプライトとは スプライ

記事を読む

logo

[C#]拡張メソッドとリフレクションで列挙体に設定した文字列を表示

前に書いた、列挙体の文字列を返すための書き方。 文字列と列挙体を少しでも近い位置に書きたいときに。

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 直線で3つ同色のパズルを消去する

前回の続き。 パズドラじゃなくて、パズドラ+ぷよぷよの謎パズルを作ってしまったので、 今回は

記事を読む

Unity_

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

前回の続きです。 というわけで移動の仕方は完璧です。本当なら一瞬で移動ではなく、パズドラみたく

記事を読む

logo

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

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

記事を読む

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 ↑