• ベストアンサー

ACCESSのVBで、エクセルファイルの最終行を取得

題名の通り ファイルの最終行を知りたいのです ざっと エクセルファイルをオープンするは下記のように すると思いますが その後、最終行を取得するのに、どうするのか 教えてください ーーーーーーーーー------------ Set Xls = GetObject("エクセルのファイル") Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate

  • maaaa
  • お礼率91% (330/362)

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

  • ベストアンサー
  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

Xls.Application.worksheets("Sheet1").Rows.Count を使用するのが一般的なようです。

maaaa
質問者

お礼

早速の回答ありがとうございました オーバーフローしました、とでますが いずれ解決すると思います ありがとうございました 助かりました LastRow=Xls.Application.worksheets("Sheet1").Rows.Count

maaaa
質問者

補足

先ほどオーバーフローがでると書きましたが 65536とでました これはシートが展開できる限界値を示している、とおもいます 知りたいのは実データの入ったラストの行です でも、この回答でありがとうございました 90%は解決できたので、ありがとうございました さらに、たずねる、ともりで書いたのでなく、 一応報告として、挙げました ありがとうございました

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。#2 のWendy02です。 >End(xlUp).Rowの、xlUp、が未定義のエラーがでてしまいます #4 さんで、説明されているとおりで、その理由は分かるのですが、こちらは、そのまま、Access VBAで、コードがとおっていましたね。一応、動作試験はしています。参照設定がされていたからかもしれません。 私のコードでは、解消方法は、Sub ....の下に、 Const xlUp As Integer = -4162 とすればよいだけです。 私の場合、基本的には、Access VBAで、Excelを使う場合は参照設定をしてしまいますね。何よりも、インテリセンスが使えますから、便利なのです。また、参照設定しないと、メモリの状態によっては、トラブルがあるときがあるからです。 Access は、参照設定の管理がExcelよりも優れていますから、そちらを使わない手はありません。 後は、imogasiさんの、原則論は、そのまま、おっしゃっている話のままです。(^^; こちらは、どうしても、Excel中心に動いていますので、Access に関するものは、今ひとつ反応が鈍くなってしまいます。この申し訳ないのですが、私は、Excel中心になっています。 Access が分からないわけではないのですが、やはり、書法が違うようですね。Access Club で確認してきましたが、MSのサポートで、同じようなコードを見つけてきましたから、たぶん、開発途上に、何かの事情があったのでしょう。不勉強で申し訳ないです。

maaaa
質問者

お礼

説明ありがとうございました 感謝の気持ちでいっぱいです

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>End(xlUp).Rowの、xlUp、が未定義のエラーがでてしまいます 私もこれでエラーが出て何でだろうと思いました。 エクセルVBAで Sub test01() MsgBox xlUp End Sub をやるとー4192と出たので下記をやってみました。 下記はACCESSのモジュールに貼り付けて実行するものです。 Sub test04() Dim ExcelApp As Object 'Excel.Application Dim Book As Object 'Excel.Workbook Dim Sheet As Object 'Excel.Worksheet Set ExcelApp = CreateObject("Excel.Application") 'ExcelApp.Visible = True Set Book = ExcelApp.workbooks.Open("C:\Documents and Settings\XXX\My Documents\_社員1.xls") Set Sheet = Book.worksheets("_社員1") Sheet.Select ' MsgBox Sheet.Range("A2") Sheet.Range("A65536").Select f = Sheet.Range("A65536").End(-4162).Row MsgBox f Set Book = Nothing Set Sheet = Nothing End Sub エクセルの定数がうまく働かないようです。 この点の理屈のご説明は、他の方にお願いします。 ーーー 先般から質問者は、同じような質問をしてますが >ACCESSのVB ACCESSのVBAです この質問は、むしろEXCELのVBAの質問です。 EXCELのVBAの本でも読んで、エクセルの機能とVBAのその知識を増やしましょう。 一応Set ExcelApp = CreateObject("Excel.Application") でエクセルのVBAの世界が使えるようになったら、ExcelAppを冠してエクセルVBAの世界のコードが使えないかやってみる。 本件・上記のようにつまずくことがあれば、そこで色々考えたり、本やWEBを見たり、質問するでどうでしょう。

maaaa
質問者

お礼

丁寧な説明ありがとうございました

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 この前から、拝見させていただいているのですが、それは、Access のVBAなのですね。 前回、VBとおっしゃっていたので、やむを得ず、私は、VB6 でコードを作りましたが、私の書いた質問には、訂正のないままに閉めてしまわれました。私自身も、知らないことがあって、それはそれなりに、勉強しているのですから、イチゲンではなかったら、あまり、ヘンな無視の仕方はしないでくださいね。こういうことを書いている自分自身、知らなかったことを言い訳しているようで、みっともないのですが、一応、私は、.Net を含め、Excel VBAだけではありませんので、言語やアプリケーションソフト、また、場合によっては、Versionの指定はしてくださいね。同じようでも、違うものがあるので、分からなくなるのです。 今調べましたら、Access VBAの独特の書き方があるようですね。MSサポートも調べてみて、確認しました。Formモジュールにいれるので、いたし方がない、というところかもしれません。 ちょっと不安になって、プロセスを調べてみましたが、終了しても、Excelのオブジェクトは残していないようです。ただ、私は、やはり、Access でも、オートメーション・サーバーを使用する場合は、本来は、Applicationオブジェクトを確保していたほうが、安全のような気がしますね。今回は、書きませんでしたが。 [XL2000]GetObjectで開かれたファイルに文字を入力すると強制終了 http://support.microsoft.com/kb/413900/ja トラブルは起きていないようですから、これは必要ないようです。 一応、変数は、分かりやすくするために、xlWb にさせていただきました。ただし、私は、見慣れていないせいか、親(Application)と子(Workbook)が逆になったような気がします。めったに、子から親を呼び出すコードは書きませんから。 Sub testExcel()   Dim xlWb As Object   Dim xlSh As Object   Dim i As Long      Const FNAME = "エクセルのファイル"   Set xlWb = GetObject(FNAME)   xlWb.Application.Windows(1).Visible = True   xlWb.Application.Worksheets(1).Activate   Set xlSh = xlWb.Worksheets("Sheet1")   '最終行 確保   i = xlSh.Cells(xlSh.Rows.Count, 1).End(xlUp).Row '#.2 のmerlionXX さんの書き方も、Sheetオブジェクトがあるので、このコードなら変更できるはずです。   xlWb.Close False     Set xlSh = Nothing : Set xlWb = Nothing      MsgBox i  End Sub

maaaa
質問者

補足

毎回親切丁寧な回答をいただき、ありがとうございました 前回VBとだけ書いてあれば、VB6と解釈されるのは あたりまえで、こうした不注意が多大が迷惑をおかけしたことを お詫びします もしさしつかえなければ、という趣旨で補足質問させて いただくならば、実行してみると、 End(xlUp).Rowの、xlUp、が未定義のエラーがでてしまいます お時間があればで結構です よろしくお願いします

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

わたしはアクセスはまったく存じませんが、エクセルのVBAでシートの使用領域の最終行を求めるなら以下で可能です。 With ActiveSheet x = .UsedRange.Cells(.UsedRange.Count).Row End With

maaaa
質問者

お礼

ありがとうございました 助かりました

関連するQ&A

  • 2つのエクセルファイルのオブジェクトどちらがActiveか知る方法

    ACCESSのVBAにおいてです Set Xls = GetObject("File1.xls") Set Xls2 = GetObject("File2.xls") Xls.Application.Windows(1).Visible = True Xls2.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate こんな風にして行って、 File1.xls File2.xls のCellを参照しています この場合どちらのSheet1、がActive、なのか知るのに どんな命令語を使うのですか よろしくおねがいします 実は、Xls、Xls2、のオブジェクト名では File1.xls、File2.xls、の区分ができなくて困っています しかし、今の質問はどちらがActiveか知る手立てが わかればたすかります

  • Worksheets("Sheet1").ActivateのActivateの反対語は

    ACCESSのVBAからの操作です ----------------------------------------------- 略 Set Xls = GetObject(myFile2) Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate<--- ------------------------------------------------ 上記でActivate、の反対にしたいとき、何ですか 最後のポイント↓を入れると ("Sheet1").<--- 選択値が出てくる場合がありますが(この場合ではない) この場合選択値がでないので、 よろしくお願いします

  • AccessVBAから、Excelシート内の列の書式設定がしたい!!

    とうとう朝になってしまいました。 もう丸2日間も悩んでいます。 どなたか解決方法をご存知の方、よろしくお願いいたします。 AccessVBA内のモジュールからExcelファイルを開いて、そこへデータを出力するという処理は動きます。 そこで、出力する前に、Excelのセルの書式設定を列毎にしようとしていますが、どうしても上手くいきません。 下記のような感じでは、使えないのでしょうか? Set xls = GetObject("c:AAA\TEST.xls") xls.Application.Windows(1).Visible = True xls.Application.worksheets("sheet1").Activate xls.Application.worksheets("sheet1").RANGE("A:A").Selection.NumberFormatLocal = "\#,##0;\-#,##0" なにか良い方法がありましたら教えてください!! よろしくお願い致します。

  • 「ほかのデータソースへのリンクが含まれています。」→VBで操作

    Excelを開いた時に、下記の画面が出ます -------------------------------------------------- このブックには、ほかのデータソースへのリンクが含まれています。 ・リンクを更新すると、Excelは更新のデータを取り込もうとします。 ・リンクを更新しないと、以前の情報が利用されます。 □更新する、□更新しない、□ヘルプ -------------------------------------------------- このファイルをACCESSのVBで操作、つまり Set Xls = GetObject(myFile) Xls.Application.windows(1).Visible = True Xls.Application.Worksheets("Sheet1").Activate と(Open)して、該当Cellを読もう、としています。 この時、上記のメッセージが出るのですが □更新しない、にVBで答えるには、どうするんですか? よろしくお願いします。

  • VBでエクセルのセルのバックカラーをつけるには?

    お世話になります 表題のように、VBを実行して、エケセルのあるセルに 色(赤)をつけたいのですが どうしたらいいか、アプローチを教えてください ちなみに下記のようなVBは実行して からくりが理解でしました ------------------------------------------ Function Excel_SelectSel_Export1() Dim Xls As Object Set Xls = GetObject("c:\vba\実践VBA.xls") Xls.Application.Windows(1).Visible = True 'ワークシートをアクティブにする Xls.Application.worksheets("sheet1").Activate 'エクスポート先セルをRow(行)とColumn(列)の形式で指定する Xls.Application.Goto "r3c2" 'セルに値をエクスポートする Xls.Application.activecell.Value = "★彡☆彡" Xls.Application.Goto "r4c2" Xls.Application.activecell.Value = "☆彡★彡" Xls.Application.Quit 'Excelを閉じる Set Xls = Nothing Debug.Print "Completed!!" End Function

  • ACCESSからexcelを操作

    accessのVBからEXCELのデータ編集を行う際、 最後エクセルを開放しているつもりなのですが、できていないようです。 ※タスクマネージャーにエクセルのタスクが残っており、 該当のファイルを開くと白くなっている。閉じて再度開くと正常動作する。 いくつかの帳票がありますが、 現象が起こるものと起こらないものがあります。 試しに Xls_app.ScreenUpdating = Trueにしてみるとタスクには残っているが 問題なく開けます。 Xls_app.ScreenUpdating = Falseだとタスクにも残るし、ファイルを開くと白くなっているような感じです。 しかし発生原因がわからず、再発するような気もするので根本原因を 突き止めたいです。 Excel起動時 ---------------- Set Xls_app = CreateObject("Excel.Application") Set Xls_book = Xls_app.Workbooks.Open(STR_out_file) Set Xls_sheet = Xls_book.Worksheets(STR_sheet1) Set Xls_sheet2 = Xls_book.Worksheets(STR_sheet2) 'DEBUG Xls_app.Visible = False Xls_app.ScreenUpdating = False Xls_app.UserControl = True ' Xls_app.Visible = True ' Xls_app.ScreenUpdating = True Private Sub Excel終了()----------------------- Xls_book.Close (True) Xls_app.Quit Set Xls_sheet = Nothing Set Xls_sheet2 = Nothing Set Xls_book = Nothing Set Xls_app = Nothing End Sub

  • エクセルの「ウィンドウ→表示しない」について

    エクセルを開いていて メニューバーのウィンドウ→表示しなし とするとSheet全体が見えなくなります また ウィンドウ→再表示、とすると 見えるようになります さて、 これをACCESSのVBで操作すると どの命令になるのでしょうか 参考までに ACCESSからエクセルを参照するときは ---------------------------------------- Set Xls = GetObject(myFile2) Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate ---------------------------------------- こんな風にしますが 終わり方がまずいために 質問にあるように、表示されなくなります 余計なことを書きましたが 質問点は画面を表示するVBAコードは?、です

  • ACCESSのVBAにてExcelのシートをコピーしたい

    入庫.xlsに現在、"原紙"というシートがあります。 入庫.xlsには、"原紙"と入庫のあった日のシートがあるようにしたいのです。 今日、入庫があれば、入庫.xlsには "原紙"と"20"のシートが存在するようにしたいのです。 AccessのVBAにて1文でシートのコピーってできないでしょうか? Dim oApp As Object Dim StWk1 As String Dim SHizk As String Dim Hizk As Integer Hizk = DatePart("d", Me![入庫日付]) SHizk = CStr(Hizk) StWk1 = "c:入庫.xls" Set Xls = GetObject(StWk1) Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) Xls.Application.worksheets(SHizk).Activate 上記のように作成してみたのですが、実行すると、 Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) のところで、エラーになります。 実行エラー'9': インデックスが有効範囲にありません。 のメッセージが表示されます。 教えてください。

  • AccessからExcelのVBAを動かしたい

    2002です。 Excel_A.xlsからExcel_B.xlsのFromAccessプロシージャを実行する場合、 Application.Run "'" & ActiveWorkbook.Path & "\Excel_B.xls'!FromAccess" でいけたのですが、、、 Access_A.mdbから次のようにやると Application.Run "'" & CurrentProject.Path & "\Excel_B.xls'!FromAccess" エラーになります。 それで、次のようにやってみたら動いたのですが、FromAccessが一気に終了して しまい、デバッグできません。 Dim myExcel As Object Set myExcel = CreateObject("Excel.Application") Set myExcel = GetObject(CurrentProject.Path & "\Excel_B.xls", "Excel.Sheet") myExcel.Application.Visible = True myExcel.Application.UserControl = True myExcel.windows(1).Visible = True myExcel.Application.Run "FromAccess" デバッグしながら、AccessからExcelのプロシージャを実行するにはどうしたらいいのでしょうか?

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

    現在AccessのテーブルをExcelへエクスポートする処理を書いています。 内容は以下のとおりです。 ・エクスポート先のExcelファイルは新規のものではなく既存のファイルを使用 ・エクスポートする際、以前エクスポートした分のシートを削除してから転送させたい 下記のようなコードを書きましたが実行してみると前回エクスポートした分のシートは削除されておらず 今回エクスポートしたものが追加されているという状況です。 ●エクスポート先Excelファイル名:エクセルファイル.xls ●エクスポートするテーブル名(Excelではシート名):転送テーブル Set xlsApp = CreateObject("Excel.Application") Set wkBook = xlsApp.Workbooks.Open("C\エクセルファイル.xls") wkb.Application.DisplayAlerts = False wkBook.Worksheets("転送テーブル").Activate wkBook.Worksheets("転送テーブル").Delete wkBook.Save wkBook.Close wkb.Application.DisplayAlerts = True Set xlsApp = Nothing Set wkBook = Nothing DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "エクセルファイル.xls", FullPath どうぞよろしくお願い致しますm<_ _>m

専門家に質問してみよう