![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VBA初心者です。宜しくお願い致します。
テーブルのデータをエクセルに出力しているのですが
特定の行まで出力したら、別のシートに出力先を変更したいのです。
以下コードの★部分で処理するのではないかと思っているのですが
どのように書けばいいのかさっぱりわからず、ご質問させて
いただきました。
どうぞ、宜しくお願い致します。
-----------------------
'既存の Excel Book をテンプレートとして開き、
'位置を指定して、テーブルのデータを出力
Dim cnADO As ADODB.Connection 'ADO コネクション確立
Dim rsADO As ADODB.Recordset
Dim xls As Excel.Application
Dim wkb As Excel.Workbook
Dim fName As Variant
Dim stDetail As String 'Query OR Table Name
Dim stPath As String 'mdb & Excel Book Path
Dim stXLName As String 'Book Name
Dim stSheet As String 'Sheet Name
Dim stSheet2 As String 'Sheet2 Name
Dim stRng As String 'Range Address
stPath = "\\marketing\" '自mdb & Excel Book のパス
stXLName = "marketing.xls" 'テンプレート用の Book
stDetail = "出力テーブル" 'テーブル名
stSheet = "marketing" '出力するシート名1
stSheet2 = "marketing2" '出力するシート名2
stSheet3 = "marketing3" '出力するシート名3
stRng = "A26" '出力開始セル番地
Set cnADO = CurrentProject.Connection
Set rsADO = cnADO.Execute(stDetail)
'テンプレート としてオープン
Set xls = CreateObject("Excel.Application")
xls.Workbooks.Add template:=stPath & stXLName
Set wkb = xls.Workbooks(1)
'★rsADOのレコード数を1行目のデータから30行目までに制限
'★明細データ貼り付け1(rsADOの1行目のデータから30行目までを貼り付け処理)
With wkb.Worksheets(stSheet)
.Range(stRng).CopyFromRecordset Data:=rsADO
End With
'★rsADOのレコード数を31行目のデータから75行目までに制限
'★明細データ貼り付け2(rsADOの31行目のデータから75行目までを貼り付け処理)
With wkb.Worksheets(stSheet2)
.Range(stRng).CopyFromRecordset Data:=rsADO
End With
'★rsADOのレコード数を76行目のデータから100行目までに制限
'★明細データ貼り付け3(rsADOの76行目のデータから100行目までを貼り付け処理)
With wkb.Worksheets(stSheet3)
.Range(stRng).CopyFromRecordset Data:=rsADO
End With
'Excel画面を表示して終了(保存しない)
xls.Visible = True
Set xls = Nothing
Set wkb = Nothing
Set fName = Nothing
rsADO.Close: Set rsADO = Nothing
cnADO.Close: Set cnADO = Nothing
No.2ベストアンサー
- 回答日時:
CopyFromRecordset メソッド をヘルプで調べてください。
expression.CopyFromRecordset(Data, MaxRows, MaxColumns)
MaxRows 省略可能です。バリアント型 (Variant) の値を使用します。ワークシートにコピーするレコードの最大数を指定します。この引数を省略すると、Recordset オブジェクトのすべてのレコードをコピーします。
-------------------------------------------------------------
MaxRows に、30, 45, 25 をそれぞれ指定して出力すればOKです。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
No.3
- 回答日時:
専門家ではありませんので詳しいことを良く知りませんが、
問題は何を根拠に何番目のレコードであるとするかだと思います。
アクセスでインデックスがない場合はは追加された順に見えますが、
そうである保障があるかどうかは(私は)わかりません。
よって、レコードセットを作成するとき何らかの形で順番をつけたほうが
良いと思います。 それを念頭において考えると、一行ずつ書き出す場合は、
DIM CON AS ADODB.CONNECTION
DIM RST AS NEW ADODB.RECORDSET
DIM STSQL AS STRING
DIM I AS INTEGER
SET CON = CURRENTPROJECT.CONNECTION
STSQL = "SELECT * FROM 出力テーブル ORDER BY ......."
RST.OPEN STSQL,CON,ADOPENKEYSET,ADLOCKOPTIMISTIC
I = 0
DO UNTIL RST.EOF
I = I + 1
SELECT CASE I
CASE < 31
'一行ずつ書き出す処理
CASE > 30 AND < 76
....
CASE > 75 AND <101
....
END SELECT
RST.MOVENEXT
LOOP
RST.CLOSE
(殴り書きですので、デバッグ等行っていません)
のような感じになりますが、私個人的にテーブルに連番を入れておいて
それを元にレコードセットを作ることをお勧めします。
その場合は、SQLにてレコードセットをお好みの番号だけに制限して
作成することができますので、パフォーマンスもコードも簡単です。
参考URL:http://www.geocities.jp/cbc_vbnet/ADO/recordset. …
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
No.1
- 回答日時:
エクセル側についてはまるで何も知らないのでアクセスの話を、
アクセスVBAを使っておられるなら、アクセスでテーブルを
三つに分けてしまうのが簡単だと思います。
テーブルの変更が可能なら、連番でインデックスを振っておいて、
対象範囲内のみを抽出するのが簡単だと思います。
そうでなければ、ADOなどでテーブルをあけて一件ずつ
数をカウントしながらmovenext してデータ処理していくとか
(件数が多いと大変です。)
テーブルは増やしたくないのでなんとかVBAでやりたいです。
>そうでなければ、ADOなどでテーブルをあけて一件ずつ
>数をカウントしながらmovenext してデータ処理していくとか
こちらのアドバイスの可能性を探りたいのですが、初心者なものでもう少しどのように書くのか、教えていただければ幸いです。
できれば既述のVBAをあまり大きく変更せずに対応できれば一番いいのですが。。。わがままですいません。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Access テーブルを分割してエクスポートしたい
Access(アクセス)
-
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
Access 1レコードずつcsvで出力したい
その他(データベース)
-
-
4
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
5
ACCESSで行数指定(5万行目~8万行目のような)
Word(ワード)
-
6
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
7
100万行のCSVを10万行ずつのファイルに区切るには?(UTF-8、改行LF)
Excel(エクセル)
-
8
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
○SQL Server2000○複数テーブル...
-
SQLのビューとカーソルの違い
-
CSVファイルを毎日、全レコード...
-
オラクルのエクスポートについて
-
同テーブルの差分レコードの抽出
-
SQL クエリアナライザ
-
Access昇順レコードを、5分割...
-
phpmyadminの外部キー設定について
-
以下の条件でデータベースのテ...
-
クロス集計されたデータを元に...
-
構文エラー : 演算子がありませ...
-
Accessでの稼働日数計算の方法
-
SQL文の結合(一対多)がわから...
-
このISAMでは、リンクテーブル・・
-
VBAでSQLServerへのODBC接続
-
リレーションシップについて
-
このSQLあってますか?教えてく...
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
ACCESSで成績管理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
Oracleで上書きImportはできま...
-
結合テーブルでINSERTする方法...
-
accessでレコード更新直後の反...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
マテリアライズドビューとスナ...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
「クリップボードにコピーされ...
-
ORA-01401が表示され、データが...
-
ACCESSで容量が50MBになった...
-
Accessでの稼働日数計算の方法
-
構文エラー : 演算子がありませ...
-
MS Accessを共有した際にファイ...
おすすめ情報