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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Access テーブルを分割してエクスポートしたい
Access(アクセス)
-
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
Access 1レコードずつcsvで出力したい
その他(データベース)
-
-
4
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
5
【AccessVBA】レコードセットOpen時の引数について
Access(アクセス)
-
6
ACCESSで行数指定(5万行目~8万行目のような)
Word(ワード)
-
7
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
8
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
Oracleで上書きImportはできま...
-
ACCESSで容量が50MBになった...
-
Accessのテーブルデータを一気...
-
「クリップボードにコピーされ...
-
アクセス レコードセットを更...
-
同一テーブルのデータを参照し...
-
ユニオンクエリで複数ファイル...
-
Access無いけど.mdbが見たい!
-
phpMyadmin(さくらSV)で検索が...
-
処理の途中で停止させ、再開さ...
-
MS Accessを共有した際にファイ...
-
Access2000でAccess97のテーブ...
-
結合テーブルでINSERTする方法...
-
mysqlのデータの上限ってありま...
-
access2000 オートナンバーで...
-
住所のDBテーブル、マスターの...
-
複数のテーブルを参照するselec...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
Oracleで上書きImportはできま...
-
結合テーブルでINSERTする方法...
-
accessでレコード更新直後の反...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
マテリアライズドビューとスナ...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
「クリップボードにコピーされ...
-
ORA-01401が表示され、データが...
-
ACCESSで容量が50MBになった...
-
Accessでの稼働日数計算の方法
-
構文エラー : 演算子がありませ...
-
MS Accessを共有した際にファイ...
おすすめ情報