• ベストアンサー

VBでEXCELシートを読み込んだとき・・・

CreateObject("Excel.Application")を使ったとき データが入っている所までってわかるのでしょうか? OpenDatabaseのようなEOFってあるのでしょうか シートに入っている内容を構造体にセットするのに65535行まで読むと無駄なので入っているところまでを読みたいのですが 何か良いやり方がありましたら教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • deecyan
  • ベストアンサー率38% (89/233)
回答No.2

xxx に EXCELのオブジェクトがセットされている場合 最終行は xxx.UsedRange.Row (使われている最初の行)に xxx.UsedRange.Rows.count (使われている行)を足して 1を引くと 最終行が求まる A列が必ず入っているのなら xxx.UsedRange.Rows.count だけでも可

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.4

VBからの操作であればアクティブシ-トなどに とらわれずにデータが入っている最終セルを掴むのに Cells.SpecialCells(xlCellTypeLastCell).Address を使うと良いと思います。 Cellsの左にシートを明示すればSelect/Activateは不要で AddressをRowに替えれば「行」、Columnに替えれば「列」 が返ります。 >OpenDatabaseのようなEOFってあるのでしょうか VB系特有の「誤解」かと思いますが、 Excelのオブジェクトを掴んだ後はExcelVBAと 何ら変わりません。 ExcelVBAでワークブックやワークシートのプロパティを 調べればご理解頂けるはずです。

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_030_100.html
全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>CreateObject("Excel.Application")を使ったとき 質問の限定条件としては関係無いです。 >OpenDatabaseのようなEOFってあるのでしょうか エクセルの入力済みデータの最終セルや列行と、ファイル (=BOOK)のEOFとは何の関係もありません。次元の違う話です。 >シートに入っている内容を構造体にセットするのに 構造体にする必要は無いと思います。世の中色いろですが。 普通1行が1レコード相当で、1レコードで1処理単位を処理できるものです。 >65535行まで読むと無駄なので入っているところまでを読みたいのですが 設計で65536行あります。 データ最終行を知りたいのなら Sub test01() Worksheets("sheet1").Activate d1 = Range("A65536").End(xlUp).Row MsgBox d1 d2 = Range("A1").CurrentRegion.Rows.Count MsgBox d2 d3 = ActiveSheet.UsedRange.Rows.Count MsgBox d3 End Sub などを参考に。それぞれクセがありますので注意。 あるいは空白セルに出会わないか、If文で聞くとかもあります。 >読みたいのですが Cells(i,j)でセルの値を取れますが、そのiが行、jが列です。iとjを指定して各セルのデータをとれます。 jを1ずつ最終行まで増やし(MoveNext的)て行けば 良いです。 一括で考えるSQL型でなく、レコードセット型で処理する方が、殆どの場合有効です。

全文を見る
すると、全ての回答が全文表示されます。
  • freednia
  • ベストアンサー率25% (84/324)
回答No.1

NULLが絶対にない列があるのでしたら、下記の方法もあります。 A列にNULLがない場合 Dim x As Integer x = 1 Do x = x + 1 Loop While xlSheet.cells(x, 1) <> "" これでxに最終行が入ります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBとExcelオブジェクト

    VB6から 起動してまたは→CreateObject ("Excel.Application") オープン中の→GetObject(, "Excel.Application") Excelのデータを取り込んでいるのですが エクセルのデータが一定以上の行を超えると エクセルがタスクに残ってしまいます。 過去ログなどを見ましたがいまいち原因がつかめません。 使っているのは、Rangeぐらいしかありません。 現状は、取込範囲が 44行でアウト 40行はOKといった感じです。 複雑なことはやっていませんが 取り込む行数によって現象が 起こったり起こらなかったりして 困っています。 ************************************ プログラム概要 GetObject版 Dim objExcel As Excel.Application Dim SheetNm As String Set objExcel = GetObject(, "Excel.Application") SheetNm = objExcel.ActiveSheet.Name Do Until 縦=終了条件    Do Until 横=終了条件           構造体.XXX = objExcel.Range(座標).Value       横=横+1    Loop    縦=縦+1 Loop Set objExcel = Nothing    .    .    . 格納した構造体のデータをデータベースに格納    .    .    . ************************************ CreateObjectの場合は、 openやclose、Quitも記述してあります。

  • VB6でExcelシートのコピー、貼付け

    VB6でExcelファイルを開いてシートをコピーし、新規ファイルとして保存したいのですが方法がわかりません。 (既存のExcelシートを雛形として新しくBookを作りたいんです) Set objexcel = CreateObject ("Excel.Application") Set objexcel_new = CreateObject("Excel.Application") objexcel.Workbooks.open (App.Path & "\book1.xls") objexcel_new.Workbooks.Add '新規に作る 'シートのコピー objexcel.sheets("Sheet1").Copy objexcel_new.sheets("Sheet1").Select objexcel_new.activesheet.Paste としても、実行前のクリップボードの中身が貼り付けられるだけで、シートがコピーできません。 よろしくお願いします。

  • VB5.0からExcel97にデータを書き込むとき

    VB5.0からExcel97にデータを書き込んだりする場合、最初にVBのほうで どういう設定をしなければいけないのでしょうか? 参照設定でMicrosoft Excel 8.0 Object Libraryを選択していて 以下の文をVBに設定しています。 Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") これだけだと、起動したときに"Excel.Application"の部分が 「型が一致しません」でエラーになります。 何か足りない設定があるのでしょうか? 説明がわかりにくいかと思いますが、どうしたらいいかなかなか わかりません。どうぞよろしくお願いします。

  • VBScriptでEXCELシートに保護をかけたい

    いつも参考にしています VBAですと下記コードですが ActiveSheet.Protect Password:=11111, DrawingObjects:=True, Contents:=True, Scenarios:=True VBScriptのコーデイングが分かりません Set EXCELAPP = CreateObject("Excel.Application") Set BOOK = EXCELAPP.Workbooks.Open("@.xls") Set SHEET = EXCELAPP.Sheets(0) この後にシート保護のコーディングをしたいのですが。。。 ヒントをお願いします

  • VB6.0上でExcelオブジェクトを生成

    質問です。 VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As Excel.Application … Set xlApp = CreateObject("Excel.Application") と その2 Dim xlApp As Object … Set xlApp = CreateObject("Excel.Application") と、どちらが良いのでしょうか? 開発環境は Win XP SP2 VB 6.0 Excel 2003 実行環境は Win 98 SE VB 6.0(ランタイムのみ) Excel 2000 SR-1 です。 開発環境ではその1、その2ともOKなのですが、 実行環境ではその2のみがOKです。 参考書にはその1が書かれていますが、その2を使うことによって何か不具合や都合の悪いことが起こりうるのでしょうか? あるいは当方の見当違いで根本的に何かが間違っているのでしょうか? どんな些細なことでも結構ですので宜しくお願いします。

  • VB6は初心者です。

    VB6は初心者です。 VB6を使用してEXCELを起動し使用しています。 If xlApp = 0 Then 'Excelが起動されていない Set xlApp = GetObject(, "Excel.Application") '///// 指定したBOOKを開く ///// Set xlApp = CreateObject("excel.application") Set xlBook = xlApp.Workbooks.Open("C:\test.xls") xlApp.IgnoreRemoteRequests = True 'excelはtest.xls専用として開く End If と記述しておりEXCELでは問題なく起動しています、 基本的に上記の記述もアプリケーションを作成してもらっていて内容を熟知していないための質問です。 この状況でexcelではなく代わりにOpen Officeがインストールされているとした場合、動作するものかどうか。 具体的にはシートにあるデータのリード/ライトしか使用はしていません。 お分かりになる方がいたら教えていただけますでしょうか。 宜しくお願いします。

  • VBからEXCELを保存

    VBからEXCELに保存したいのですが、前準備としてEXCELのsheet2で保存します。VBを実行したときにExcelのsheet1に保存したいのですが、どうすればいいかわかりません、おしえてください。多分、保存するときにSheet2を対象にしていると思うので、sheet1を対象にしたいのですが・・・ /****************** VBを実行したときの処理 ********************/ 'アプリケーションの参照 Set xlApp = CreateObject("Excel.Application") 'ブックの参照 Set xlBook = xlApp.Workbooks.Open("C:\テスト\テスト.Xls") 'シートの参照 Set xlSheet = xlBook.Worksheets("Sheet1")

  • VBSを使って Excel の任意シートを開くには

    VBS初心者です。知識のある方、ご教授願えませんか。 VBScript で同一フォルダにある「複数の Excelファイルを順番に任意のシートを選択して 開く」というのを実行したいのですが、どのようにすればよいでしょうか 仕事で急に必要になったのですが、VBScript の知識がなく困っていおります。 色々と調べてシート名が「半角英数字」なら成功したのですが、「漢字」の場合は「インデックスが有効範囲にありません」とエラーメッセージがでます。 「漢字」のシートを選択した場合でも成功するようにしたいのですが、どなたかご教授願えませんでしょうか? (●成功例)「半角英数字」のシートを指定した場合 Option Explicit Dim bk, ex, f, gf, sh, so Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = true For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "xlsm" Then Set bk = ex.Workbooks.Open(gf & "\" & f.Name) ex.worksheets("shukei").select Set sh = bk.Worksheets(1) End If Next MsgBox("Finished!") (●失敗例)「漢字」のシートを指定した場合 Option Explicit Dim bk, ex, f, gf, sh, so Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = true For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "xlsm" Then Set bk = ex.Workbooks.Open(gf & "\" & f.Name) ex.worksheets("集計").select Set sh = bk.Worksheets(1) End If Next MsgBox("Finished!")

  • EXCEL:複数シートから特定行を一覧化したい

    【 EXCELで悩んでいます 】 複数のシートから特定の言葉の記入がある行だけ、 新規ワークシートへ自動で書き出したいのですが難儀しています。 当方エクセル初心者でして、 ピボットテーブルもマクロも組んだことがありません。 工程数がかかってもいいので、できるだけ優しい方法を教えて下さい。 仕事で使うデータで、これがあると非常に助かります。 【 準備しているデータ 】 ・参照したいデータシートは8枚 ・それぞれ、同じフォーマットで内容が異なる60行弱の文字データ (画像参照ください。このようなデータシートが8枚あります) 【 やりたいこと 】 8枚にも渡るシートの内容のなかから、 特定の文字が入っているもの(画像でいうと、G列「進捗」の「作業中」になっている行)だけを自動的に抽出して 一枚の新規シートにまとめて一覧化したい 【 環境 】 EXCEL 2003 Windows 面倒かとは思いますが、 お優しいエクセルマスター様がいらっしゃると信じております。 どうかよろしくお願い申し上げます。

  • Access VBAからExcelシートの削除

    お世話になります。 Access VBA から指定したExcelシートの削除を行うプログラムを下記の通りに記載しています。 Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Open FileName:="エクセル.xls" oApp.DisplayAlerts = False oApp.Sheets("シート名1").Delete oApp.DisplayAlerts = True この場合において、"シート名1"が存在していれば問題なく処理されますが、 このシートが存在していなければエラーが起きます。 指定したExcelブックにこのシートが存在するかどうかのチェックを事前に行い、 存在する場合のみ削除処理を行うにはどうすればよいでしょうか? よろしくお願いします。 環境は、Access2007です。