• 締切済み

Excelデータの最終行判別について

VBでExcelデータ(Excel97)をAccessデータベース(Access97)に落とし込む処理をしたいのですが、空白行を含むExcelデータのレコードカウントを取得するにはどうしたら良いでしょうか?アドバイスよろしくお願いします。

みんなの回答

  • pooh_200x
  • ベストアンサー率46% (7/15)
回答No.4

御免なさい! かなり的外れな答えでした。 スミマセン。 質問の方ですが、VBは「VB6.0」ですか?「VBA」ですか? >レコードカウントを取得 とは変数への取得ということでしょうか?

noname#3051
質問者

お礼

VB6.0でExcelデータの最終行を取得する方法が見つかりました。マクロでの制御も勉強になりました。アドバイスくださったみなさん、ありがとうございました。

noname#3051
質問者

補足

言語はVIsualBasic6.0です。レコードカウント取得は変数格納ということでご指摘のとおりです。

  • pooh_200x
  • ベストアンサー率46% (7/15)
回答No.3

以前AccessデータをExcelデータに落とし込んで関数で帳票を作った時 のソースです。 ※ちなみに私はトーシロですので正しい書き方とは思っておりません。 「とりあえず動けばイイヤ!」と思った際に参考にして下さい。 '----------------------------------------------------------------- '処理(セルの値を取得し印刷範囲を設定する。その上で印刷を行いAcに戻る。) Dim RetVal As String  '変数宣言「Shell起動」 Dim vPath As Variant  '変数宣言「Pathを取得」 Dim intPr1 As Long   'IFに使用するセルの値を取得 Dim intPr2 As Long   'IFに使用するセルの値を取得 '変数に特定のセルの値を代入 intPr1 = Worksheets("ファイル名").Range("C46").Value intPr2 = Worksheets("ファイル名").Range("C100").Value 'もし変数の値が"0"の場合は、改ページプレビュー位置をA1~CG54に設定 If intPr1 = 0 And intPr2 = 0 Then ActiveSheet.PageSetup.PrintArea = "$A$1:$CG$54" End If 'もし2pの値が"1"の場合は、改ページプレビュー位置をA1~CG108に設定 If intPr1 = 1 And intPr2 = 0 Then ActiveSheet.PageSetup.PrintArea = "$A$1:$CG$108" End If 'もし3pの値が"1"の場合は、改ページプレビュー位置をA1~CG162に設定 If intPr1 = 1 And intPr2 = 1 Then ActiveSheet.PageSetup.PrintArea = "$A$1:$CG$162" End If '印刷。 ActiveWindow.SelectedSheets.PrintPreview 'プレビュー '印刷は↓ 'ActiveWindow.SelectedSheets.PrintOut Copies:=1 'Accessが置いてあるPath名を変数に代入。 vPath = "c:\Test.mdb" 'Access起動(※端末により異なる。) RetVal = Shell("""" & "C:\Program Files\Microsoft Office97\Office\MSACCESS.EXE" & """" _ & """" & vPath & """", 1) '改ページプレビューを元の位置に戻す。 ActiveSheet.PageSetup.PrintArea = "$A$1:$CG$162" ActiveWorkbook.Save '保存する。 Application.Quit '終了する。 '------------------------------------------------------------- ※質問は受け付けますが、ご批判は勘弁してください。 (少なくとも動きました。)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

使用している最終行を求めるマクロを書いてみました。ExcelVBAで動かす例です。 使用している列について、下から上に向かって調べています。 当方、Excel2000ですがExcel97でも問題ないと思います。ご参考に。 Sub GetmaxRow()   Dim maxCol As Integer, wkCol As Integer, col As Integer '最大列、列、カウンタ   Dim MaxRow As Long, wkRow As Long, rw As Long '最大行、行、カウンタ   '使用している一番右の列を求める   maxCol = 1   For rw = 1 To Range("A1").SpecialCells(xlLastCell).Row     wkCol = Cells(rw, 256).End(xlToLeft).Column     If maxCol < wkCol Then maxCol = wkCol   Next   '使用している一番下の行を求める   MaxRow = 1   For col = 1 To maxCol     wkRow = Cells(65536, col).End(xlUp).Row     If MaxRow < wkRow Then MaxRow = wkRow   Next   MsgBox "一番下の行は " & MaxRow & " です。"   'MsgBox "一番右の列は " & maxCol & " です。" End Sub

noname#3051
質問者

補足

アドバイスありがとうございます。VBAで実行確認できました。同様のことをBisualBasicでしたいのですが、なかなかうまくいかないのでちょっと手間取っています・・・。VBでも同じことをされたことがありましたら、教えていただけると嬉しいです。

  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.1

Excel97ではサポートされているか分かりませんがExcel2000では Sheets(シート名).Range("A1").SpecialCells(xlLastCell) で入力されている最後のセルを取得できます。 行数を取得するのでしたら rowcount = Sheets(シート名).Range("A1").SpecialCells(xlLastCell).row でできないでしょうか?

noname#3051
質問者

補足

アドバイスありがとうございます。上記の内容ですが、マクロのみで使用されるコーディングなのでしょうか?Excel97,Excel2000でも試してみたのですが、「アプリケーション定義またはオブジェクト定義のエラー」で動作確認できませんでした。他に参照設定などの環境設定が必要なのでしょうか?

関連するQ&A