
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です。

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. …

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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス レコードセットを更...
-
Accessでデータシートに同じデ...
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
Accessのテーブルデータを一気...
-
マテリアライズドビューとスナ...
-
構文エラー : 演算子がありませ...
-
SQLです教えてくださいお願いし...
-
ODBC接続で新しいレコードを追...
-
重複クエリを使ったデータ削除
-
ERROR1062:Duplicate entry.......
-
このISAMでは、リンクテーブル・・
-
ORA-01401が表示され、データが...
-
Access VBAからエクセルに出力...
-
結合テーブルでINSERTする方法...
-
MySQLのDB内容をWEB上に表示す...
-
Access昇順レコードを、5分割...
-
Accessのインポートについて(上...
-
住所のDBテーブル、マスターの...
-
CSVファイルを毎日、全レコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Oracleで上書きImportはできま...
-
このISAMでは、リンクテーブル・・
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
アクセス レコードセットを更...
-
Accessのテーブルデータを一気...
-
accessでレコード更新直後の反...
-
マテリアライズドビューとスナ...
-
結合テーブルでINSERTする方法...
-
ユニオンクエリで複数ファイル...
-
ORA-01401が表示され、データが...
-
ERROR1062:Duplicate entry.......
-
住所のDBテーブル、マスターの...
-
Accessでの稼働日数計算の方法
-
ACCESSで容量が50MBになった...
-
VBAでSQLServerへのODBC接続
-
ODBC接続で新しいレコードを追...
-
処理の途中で停止させ、再開さ...
-
「クリップボードにコピーされ...
おすすめ情報