-PR-
締切済み

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

  • 困ってます
  • 質問No.231598
  • 閲覧数687
  • ありがとう数1
  • 気になる数0
  • 回答数4
  • コメント数0

VBでExcelデータ(Excel97)をAccessデータベース(Access97)に落とし込む処理をしたいのですが、空白行を含むExcelデータのレコードカウントを取得するにはどうしたら良いでしょうか?アドバイスよろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1
レベル8

ベストアンサー率 60% (21/35)

Excel97ではサポートされているか分かりませんがExcel2000では

Sheets(シート名).Range("A1").SpecialCells(xlLastCell)

で入力されている最後のセルを取得できます。
行数を取得するのでしたら

rowcount = Sheets(シート名).Range("A1").SpecialCells(xlLastCell).row

でできないでしょうか?
補足コメント
noname#3051

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


  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

使用している最終行を求めるマクロを書いてみました。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でも同じことをされたことがありましたら、教えていただけると嬉しいです。
投稿日時 - 2002-03-11 13:32:44
  • 回答No.3
レベル7

ベストアンサー率 46% (7/15)

以前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 '終了する。
'-------------------------------------------------------------
※質問は受け付けますが、ご批判は勘弁してください。
(少なくとも動きました。)
  • 回答No.4
レベル7

ベストアンサー率 46% (7/15)

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

言語はVIsualBasic6.0です。レコードカウント取得は変数格納ということでご指摘のとおりです。
投稿日時 - 2002-03-11 13:43:11
お礼コメント
noname#3051

VB6.0でExcelデータの最終行を取得する方法が見つかりました。マクロでの制御も勉強になりました。アドバイスくださったみなさん、ありがとうございました。
投稿日時 - 2002-03-11 16:09:09
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


専門家があなたの悩みに回答!

ピックアップ

ページ先頭へ