- 締切済み
Excelデータの最終行判別について
VBでExcelデータ(Excel97)をAccessデータベース(Access97)に落とし込む処理をしたいのですが、空白行を含むExcelデータのレコードカウントを取得するにはどうしたら良いでしょうか?アドバイスよろしくお願いします。
- オフィス系ソフト
- 回答数4
- ありがとう数1
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- pooh_200x
- ベストアンサー率46% (7/15)
御免なさい! かなり的外れな答えでした。 スミマセン。 質問の方ですが、VBは「VB6.0」ですか?「VBA」ですか? >レコードカウントを取得 とは変数への取得ということでしょうか?
- pooh_200x
- ベストアンサー率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 '終了する。 '------------------------------------------------------------- ※質問は受け付けますが、ご批判は勘弁してください。 (少なくとも動きました。)
- nishi6
- ベストアンサー率67% (869/1280)
使用している最終行を求めるマクロを書いてみました。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
補足
アドバイスありがとうございます。VBAで実行確認できました。同様のことをBisualBasicでしたいのですが、なかなかうまくいかないのでちょっと手間取っています・・・。VBでも同じことをされたことがありましたら、教えていただけると嬉しいです。
- akinori_s
- ベストアンサー率60% (21/35)
Excel97ではサポートされているか分かりませんがExcel2000では Sheets(シート名).Range("A1").SpecialCells(xlLastCell) で入力されている最後のセルを取得できます。 行数を取得するのでしたら rowcount = Sheets(シート名).Range("A1").SpecialCells(xlLastCell).row でできないでしょうか?
補足
アドバイスありがとうございます。上記の内容ですが、マクロのみで使用されるコーディングなのでしょうか?Excel97,Excel2000でも試してみたのですが、「アプリケーション定義またはオブジェクト定義のエラー」で動作確認できませんでした。他に参照設定などの環境設定が必要なのでしょうか?
関連するQ&A
- EXCELの行ごとにデータを表示させる方法
EXCEL2000のデータシート(タイトル項目20程度レコード数300程度)で、先頭行をタイトルとして用い、ACCESSのフォーム(単票形式)の様に 一行ごとに全てのタイトルを表示させ データ入力をさせたいのですが、EXCELだけを用いての方法を教えて下さい。
- ベストアンサー
- オフィス系ソフト
- レコードセットのデータを1行ごとに抽出したい
いつもお世話になっております 今、VBを使用してツールを作成しているのですが DataGridにデータベースからレコードセットを 使用してデータを1行ずつ入れていこうと 思っているのですが、レコードセットで1行ずつ データを取れません。 どうか1行ずつのデータのとり方を教えて下さい! お願い致します。
- 締切済み
- Visual Basic
- Excel データ追跡機能でデータのクリヤ方法は
Excel2007でアドイン・データ追跡機能を追加し使用しています 第1部のデータ処理が終わったのでそのデータをクリヤし 第2部のデータを新たに入力したいのですが 第1部のデータをクリヤする方法がわかりません 単にDELETEしただけでは空白行が残ってしまいます 新たなデータベースファイルを作るしかないのでしょうか どなたかアドバイスよろしくお願いします
- ベストアンサー
- その他MS Office製品
- エクセルデータのインポート(アクセスへ)
エクセルで作成したデータをアクセスに取り込む際、エクセルではレコード数が540なのに、アクセスでは557となってしまいました。 原因は、エクセル上で空白のデータも、インポートされてしまっているようです。エクセル上で空白の部分は、データがないものとしてインポートさせないようにするにはどうすればよいでしょうか。
- 締切済み
- その他(データベース)
- 2行にわたるデータを1行にしたい
こんにちは。小川と申します。どなたか知恵を貸してください。 表の中のレコードデータが2行にわたるものを1行にしたいのです。 1レコードが1行目2行目にありますが、E2をE1とF1の間に、F2をF1とG1の間に入れて2行目を削除したい。 エクセルやアクセスなど手段はどれでもいいのですが、件数が5000件以上あるファイルが多数あり、とても手作業で出来ません。 どなたか知恵を貸してください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- AccessのデータをExcelに貼り付け
AccessのデータをフィルターしてExcelに貼り付けるには、AccessとExcelのどちらのVBAを使えば良いでしょうか。 前提:Accessに10フィールド100行くらいのデータがあり、Excelに氏名と日付を入力する欄がある。 処理:AccessのデータをExcelに入力した氏名と日付でフィルター(AND検索)→フィルターしたままExcelに貼り付け→そのデータをExcelの関数とVBAで処理(複雑な関数なのでAccessで処理できない)
- 締切済み
- Access(アクセス)
- 1行目のデータが張り付けられない(アクセス)
お世話になります。 windows7 アクセス2010 エクセル2010 エクセルのデータをアクセスに張り付けると、1行目のデータが 張り付けることができません。 2行目以降からデータはりつけはできます。 なんとなく、アクセスが勝手に1行目はヘッダーとみなして 2行目から処理しているような感じです。 もともとオフィス2003で同様の操作を行っていましたが、 オフィス2010の環境になると張り付けれなくなりました。 対処方法ご存じの方いませんか? よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセルで重複データの行を見つける方法を教えてください
データベースでデータの重複行を探して消したいと思っています。 同様の質問が、アクセスでは回答があったように記憶していますが、エクセルで「目視」確認以外で効率的にできる方法があれば教えてください。
- ベストアンサー
- オフィス系ソフト
- VB2005でのエクセルへのデータ出力
タイトルどおりなのですが、DBからマスタのデータを単純にエクセルに出力するだけなのですが、どういったやり方が一番高速に処理できるのでしょうか? マスタのデータをデータテーブルに取得して、データテーブルをループさせながら、1レコードごとにエクセルに出力するようなやり方しか思いつかないのですが、もっと効率的で高速に処理できる方法があれば教えて下さい。 ちなみに、エクセルは新規ファイルではなく1行目にマスタのテーブルのカラム名を記述している既存ファイルのエクセルに出力していく形になります。 画面の動作としては、マスタメンテの画面にある「出力」ボタンをクリックすることで、ファイルダイアログを表示して保存先を決めたら、出力開始というイメージです。 できれば、サンプルコードなどあれば有難いです。 宜しく、お願いします。 開発環境: OS:WinXP SP2 DB:Oracle 10g(?)、すみません。バージョンまであってるかは不明です。 言語:VB2005Pro Excel:Excel2000
- 締切済み
- Visual Basic
- Excelファイルから固定長データの作り方について
次のエクセルのデータを 番号 金額 ← 空白行が入ります。 1001 300 ← 空白行が入ります。 1002 400 ← 空白行が入ります。 1005 800 ← 空白行が入ります。 1013 1200 下記のように固定長のデータに変換したいのですが 2 00000300 0010010001 2 00000400 0010020002 2 00000800 0010050003 2 00001200 0010130004 「2」(固定)、「 」(スペース5個))、金額(8桁)、「」(スペース1個)、番号(6桁)、連番(4桁) どのようにしたらいいのでしょうか? VBを使えばいいとは思うのですが、よくわかりません。
- 締切済み
- Visual Basic
お礼
VB6.0でExcelデータの最終行を取得する方法が見つかりました。マクロでの制御も勉強になりました。アドバイスくださったみなさん、ありがとうございました。
補足
言語はVIsualBasic6.0です。レコードカウント取得は変数格納ということでご指摘のとおりです。