- - PR -
Excel Sheet Max行、Max列
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2006-07-29 00:52
#Excel VBA でそんな処理した覚えがあるような。忘れた。
ループ回数自体は xls_cell.Columns.Count や xls_cell.Rows.Count 数分やっておいて、値がなくなったらループを抜けるのはどうですか? もちろん"データのある範囲"内で"データがない行や列"はないんですよね? _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-07-29 01:11
非表示行が存在しないなら、End Property
非表示行が存在するなら、Find Method # しかし、VB.NET から Excel 扱う人多いみたいですね。 # わたしなら絶対にやりたくありませんが・・・ # その部分だけ別の言語で作ってやります。 | ||||
|
投稿日時: 2006-07-29 03:28
VB.NETは専門じゃないので間違ってるかもしれませんが。
UsedRangeプロパティは使えないんでしょうか。 xls_sheet.UsedRange.Rows.Count xls_sheet.UsedRange.Columns.Count | ||||
|
投稿日時: 2006-07-29 07:03
UsedRangeだと、データが入力されていなくても 書式設定されていれば範囲に入る様なので、 データのみで判断されるCurrentRegionの方が 安全ではないでしょうか? [ メッセージ編集済み 編集者: マー帽 編集日時 2006-07-29 07:25 ] | ||||
|
投稿日時: 2006-07-31 21:15
皆様アドバイス有難う御座います。
皆様にアドバイスしていただいた方法を一通り試してみましたが、 全て思った通りに動作しました。 |
1