@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Excel Sheet Max行、Max列

1
投稿者投稿内容
BB
ベテラン
会議室デビュー日: 2005/05/08
投稿数: 52
投稿日時: 2006-07-28 23:20
VB2005Express Editionにて開発をしております。

Excel Objectを扱うときの処理に関して教えていただきたいのですが、
Excelを開き、開いたSheetの "データのある範囲で" Max行、Max列
を取得したいと思っております。

そこで、
以下のソース内で
xls_cell.Columns.Count、xls_cell.Rows.Count
等を行ってみたのですが、

65535とか255とExcelの行、列の本当の最大値を取ってしまいます。
(もちろんなかのExcelデータはそんな目一杯セルを使用しておりません)

以下のサンプルソース内でのmsgboxでは正しくExcel内の値を取得しているため
その他の部分は問題ないと思います。

どこが悪いのでしょうか?

サンプルソースでは行の存在する範囲内でのループを行いたいのですが、
おこなえず100としております。。。


<Source>
' Excel.Application の新しいInstance & WorkBook & Sheetを生成する
Dim xls_app As New Excel.Application
Dim xls_books As Excel.Workbooks = xls_app.Workbooks
Dim xls_book As Excel.Workbook = xls_books.Open("***")
Dim xls_sheets As Excel.Sheets = xls_book.Worksheets
Dim xls_sheet As Excel.Worksheet = xls_sheets.Item(1)
Dim xls_cell As Excel.Range = xls_sheet.Cells


' 行ループ
For cnt_row As Integer = 1 To 100
msgbox xls_cell(cnt_row, 1).value
Next

' リソースの開放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xls_cell) : xls_cell = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(xls_sheet) : xls_sheet = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(xls_sheets) : xls_sheets = Nothing
xls_book.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xls_book) : xls_book = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(xls_books) : xls_books = Nothing
xls_app.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xls_app) : xls_app = Nothing

End Sub
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-29 00:52
#Excel VBA でそんな処理した覚えがあるような。忘れた。

ループ回数自体は xls_cell.Columns.Count や xls_cell.Rows.Count 数分やっておいて、値がなくなったらループを抜けるのはどうですか?

もちろん"データのある範囲"内で"データがない行や列"はないんですよね?
_________________
囚人のジレンマな日々
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-07-29 01:11
非表示行が存在しないなら、End Property
非表示行が存在するなら、Find Method

# しかし、VB.NET から Excel 扱う人多いみたいですね。
# わたしなら絶対にやりたくありませんが・・・
# その部分だけ別の言語で作ってやります。
岸川克己
会議室デビュー日: 2006/06/14
投稿数: 2
投稿日時: 2006-07-29 03:28
VB.NETは専門じゃないので間違ってるかもしれませんが。
UsedRangeプロパティは使えないんでしょうか。

xls_sheet.UsedRange.Rows.Count
xls_sheet.UsedRange.Columns.Count
マー帽
常連さん
会議室デビュー日: 2006/01/31
投稿数: 21
投稿日時: 2006-07-29 07:03
引用:

岸川克己さんの書き込み (2006-07-29 03:28) より:
UsedRangeプロパティは使えないんでしょうか。

xls_sheet.UsedRange.Rows.Count
xls_sheet.UsedRange.Columns.Count


UsedRangeだと、データが入力されていなくても
書式設定されていれば範囲に入る様なので、
データのみで判断されるCurrentRegionの方が
安全ではないでしょうか?


[ メッセージ編集済み 編集者: マー帽 編集日時 2006-07-29 07:25 ]
BB
ベテラン
会議室デビュー日: 2005/05/08
投稿数: 52
投稿日時: 2006-07-31 21:15
皆様アドバイス有難う御座います。

皆様にアドバイスしていただいた方法を一通り試してみましたが、
全て思った通りに動作しました。
1

スキルアップ/キャリアアップ(JOB@IT)