マンガでよめる痔のこと・薬のこと

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

このQ&Aに関連する最新のQ&A

A 回答 (5件)

Xls.Application.worksheets("Sheet1").Rows.Count



を使用するのが一般的なようです。

この回答への補足

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

補足日時:2007/02/23 11:13
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/23 10:53

こんばんは。

#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のサポートで、同じようなコードを見つけてきましたから、たぶん、開発途上に、何かの事情があったのでしょう。不勉強で申し訳ないです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/26 13:13

>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を見たり、質問するでどうでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/26 13:12

こんにちは。

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

この回答への補足

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

補足日時:2007/02/23 14:59
    • good
    • 0

わたしはアクセスはまったく存じませんが、エクセルのVBAでシートの使用領域の最終行を求めるなら以下で可能です。



With ActiveSheet
x = .UsedRange.Cells(.UsedRange.Count).Row
End With
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/23 13:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessからExcelファイルのデータ取得

Access2000かExcelファイルのデータを取得したいのですが、
Excelファイルを一度 CSVファイルに変換し、その後Accessのテーブルへデータ取り込み といった手順をとりたいのです。
この方法って、どうコーディングすればいいのですか?
(Accessのインポート処理は使用しない方法です)

Aベストアンサー

VBAの基本的なことはご存知ですか?
でしたら、
1.Accessで対象のExcelファイルを選択
2.AccessからExcelを制御してCSVにコンバート
3.出来たCSVファイルをAccessに取り込む(テキスト取り込み インポート定義を使うと簡単)
この順序で行えばOKです。
ExcelでVBAを書くことで制御する方法もありますが、
Access側からExcelを制御する方がやりやすいと思います。

QAccess-VBAでExcelファイルを作成する。

こんにちわお世話になります。

「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。
AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。
Office97を使用しています。

Aベストアンサー

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  ' Excel のセルに値を代入します。
  xlSheet.Cells(1, 1).Value = " "

  ' Worksheet を名前をつけて保存します。ダイアグボックス等を使用して
   パスやBook名など入力できるようにしてもOKです。
  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

こんな感じでしょうか。

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
...続きを読む

QAccess VBAよりExcelのシート名を取得

お世話になります。
Access2010
Windows7 Pro

以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。

http://www.accessclub.jp/bbs5/0005/vba1231.html
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim xlsFile As String

xlsFile = "ファイルパス"
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(Tbl.Name, 2) = "$'" Then
'シート名の最後は必ず$が付きます
Debug.Print Tbl.Name
End If
Next Tbl
Db.Close
Set Db = Nothing

なお、参照設定にて「Microsoft DAO 3.6 Object Library」にチェックが入っていないことが原因かと思い、チェックを入れようとしましたが「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。」というメッセージが表示され、チェックを入れることができません。

勉強不足で大変恐縮ですが、これらのメッセージからどういうことが分かりますでしょうか。
ご教授の程、宜しくお願い致します。

お世話になります。
Access2010
Windows7 Pro

以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。

http://www.accessclub.jp/bbs5/0005/vba1231.html
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim xlsFile As String

xlsFile = "ファイルパス"
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(...続きを読む

Aベストアンサー

Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる

Set Db = OpenDatabase(xlsFile, True, True, "Excel 12.0;") '←ここで止まる
ならOffice2010では出来ましたよ?
アプリケーションのバージョンではなくファイルのバージョン指定っぽいです。

ちょっと蛇足かもしれんが、参考になると思われます。
・・・本来 Null でない Excel 列内の一部の値が Null として返されることがあります・・・
http://support2.microsoft.com/kb/194124/ja

>この名前は既に・・・
Microsoft DAO 3.6 Object Library の上位バージョンの
Microsoft Office 14.0 Access Database Engine Object Library に
チェックが入っていれば OK です。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。

QACCESS側からEXCELの書式を設定するには?

ACCESSからEXCELにエクスポートした際、ACCESS側でEXCELの書式設定は行えますか?(例:セルAの幅がX桁等)

データ件数が多すぎて、下記VBでエクスポート処理をしています。

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

お手数ですが、ご教授願います。

Aベストアンサー

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
xlApp.Cells.EntireColumn.AutoFit
xlApp.Range("A1").Select
xlApp.Visible = False

xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Exit_Cmd1_Click:
Exit Sub

Err_Cmd1_Click:
MsgBox Err.Description
Resume Exit_Cmd1_Click

End Sub

こんな感じで記述してください。

#1の中でxlApp.DisplayAlerts = False これは除いてください。保存しますかのメッセージが出ます。

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
...続きを読む

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QACCESSからexcelブックを開いて保存したい

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このようなことをやりたいと思っています。

ネットでいろいろ探しているのですが
ファイルを開くのは見つかっても、保存したものを開くのが見つからず
そもそもできるのかどうかもわかっておりません。

自分にスキルがなく、あれこれ凝ったものは作れないので、
保存は自動じゃなくて、自分で別名で保存にしてもかまわないのですし
フォームに入力したものが、テンプレートに反映(出力?)されなくてもかまわないです。


参考になるサイト等ありましたら、ご教示いただけますか。

どうぞよろしくお願いいたします。


下記はやりたいことに近いかなと思って見つけたサイトです。
http://www.nurs.or.jp/~ppoy/access/access/acX013.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1220895032
http://accessclub.jp/bbs/0227/beginers70136.html

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このよう...続きを読む

Aベストアンサー

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、たぶん出来ると思います。

#013の末尾(http://www.nurs.or.jp/~ppoy/access/access/acX013.html)
--------------------------------------------------------------
'データ貼り付け
With wkb.Worksheets(stSheet)
.Range(stRng).CopyFromRecordset Data:=rst
End With

'#001の保存コード(http://www.nurs.or.jp/~ppoy/access/access/acX001.html)

'保存ダイアログからの入力を受けて保存
' fName = xls.Application.GetSaveAsFilename(,"Microsoft Excel(*.xls),*.*", 1)

'保存ダイアログを使わず、fnameを自動的に指定する方法(jacob-wk9付け足し)
fName=rst!受付ID

If fName <> False Then
wkb.SaveAs FileName:=fName
MsgBox "新規ブックは、「" & fName & "」の名前で保存しました!", vbOKOnly
Else
MsgBox "新規ブックは保存できませんでした。", vbOKOnly
End If

Set rst = Nothing: Set cnn = Nothing

Exit_opnXLtmp:
Set wkb = Nothing: Set xls = Nothing
Exit Sub

Err_opnXLtmp:
MsgBox Err.Description
Resume Exit_opnXLtmp
End Sub
----------------------------------------------------------------------

こんな感じになるのではないでしょうか。

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、...続きを読む

QAccessからExcelを編集

Access2003からExcelを編集したいのですが、
いろいろとWebで見ているのですが、よくわかりません。

例えば、
AccessからTEST.xlsのシート「データ」のA10のセルに「てすと」と入れるとします。
最後に上書きします。

申し訳ありませんが、わかる方、教えて下さい。

Aベストアンサー

「よくわからない」 という感想に怖さを感じます。。。
はたしてここで質問しても理解できるんだろうか、やりたい事のコードだけ利用して終わりってことになりゃしないだろうか、と。。。

Sub hoge()
  Dim xlApp As Object
  Set xlApp = CreateObject("Excel.Application")
  xlApp.Visible = True

  Dim wbk As Object
  Set wbk = xlApp.Workbooks.Open("D:\test\TEST.xls")

  Dim sht As Object
  Set sht = wbk.Worksheets("データ")

  sht.Cells(10, 1).Value = "てすと"

  wbk.Save
  wbk.Close
  xlApp.Quit
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング