今excel2003のVBEで外部データベースから店舗別の売上データを取得し
それをエクセルのワークシートに出力するというプログラムを作成しています。
ここで問題なのが扱うデータの量が多すぎでレコードセット検索を
使用してそれをDo Until RS.EOFで各店舗の日別売上に出力していくとものすごく時間がかかってしまいます。
そのため配列を使う方法を見つけたのですが配列を使ったことなくて
どうしたらよいのかわかりません。
なんとかレコードセットの中身を配列に格納後にそれを一気に範囲貼り付けしたいと思います。
でも配列内で売上表のフォーマットに整形を行うことができるのでしょうか?
レコードセットのフィールドは店舗別日別売上、売上日付、店舗コード、ブランドセクションです。
売上日付|ブランドセクション|店舗コード|店舗別日別売上
20100201 100 1001 100000
20100201 100 1002 10000
・ ・ ・ ・
・ ・ ・ ・
売上表のフォーマットは縦列に1から月末までの日にち、横行に各店舗名が並んでいて各店舗の日別売上が一目でわかるつくりになっています。
各店舗名の上に店舗コードを持たせてそれを元に入力列を取得するという方法も考えたのですがそれも効率的とは思えません。
なにか良い方法はないでしょうか?
アドバイスお願いします。
最後に文章だけの説明でわかりにくくてすみません。
よろしくおねがいします。
No.2ベストアンサー
- 回答日時:
実際データベースとか、クエリを見ていないので
レコードセットの中身が分かりませんので
ソースをかけませんが、配列に入れてシートに貼り付ける
サンプルを作ってみました。
Sub test()
Dim varArray(1 To 100, 1 To 26) As Variant
varArray(1, 1) = "日付" 'range("A1")
varArray(1, 2) = "1001" 'range("B1")
varArray(1, 3) = "1002" 'range("C1")
varArray(1, 4) = "1003" 'range("D1")
varArray(1, 5) = "1004" 'range("E1")
varArray(2, 1) = 20100201 'range("A2")
varArray(3, 1) = 20100202 'range("A3")
varArray(4, 1) = 20100203 'range("A4")
Range("A1:Z100") = varArray
End Sub
これだとデータがどんなに多くても高速です。
No.3
- 回答日時:
>ですのでレコードセットの中身を配列に格納して
>それを売上表のフォーマットに整形できれば
>それが一番ベストだと考えました。
配列に入れたらそのままでしょうから、
そうではなく、
レコードセットを売上表のフォーマット
に整形し、それを配列に格納して
ではないですか。順序が逆だと思いますが。
でなければ、データをExcelにコピーして
Excel上で成型すればすむことです。
実現したいフォーマットが、
日付 1001 1002 1003 1004 ← 店舗コード
0201 ** ** ** **
0202 ** ** ** **
0203 ** ** ** **
0204 ** ** ** **
ならばやることは限定的です。
No.1
- 回答日時:
Sheets("Sheet1").Range("A2").CopyFromRecordset rs
ではだめですか。
又は、
Do Until RS.EOF
でどの様な処理をしているか教えていただければ
多分なんとかなると思います。
この回答への補足
回答ありがとうございます。
Do until RS.EOF = True
myRng = GetRng(myRS!売上日付, myRS!ブランドセクション, myRS!店舗コード)
myRngはfunctionで日付が20100201ならセル4行目、店舗コードが1001ならA列、ブランドセクションが100ならSheet1、みたいに貼り付ける先のセルを取ってきています。
でそれを
myRng = myRS!店舗別日別売上
の形でloopしようと思っています。
(まだイメージの段階で実際にコードを書いてません)
ただこの方法だとmyRngを取得する際にVB内で店舗コード1001="A列"、1002="B列"、1003="C"...と何百店舗にも処理を分けなければいけないのか?それとも別シートに店舗マスタなどを作成して
そこから取得すればいいのか?など非効率的なアイデアしか浮かびません。
実際の店舗コードは序列ではなくforでi+1など回せる気もしません。
ですのでレコードセットの中身を配列に格納してそれを売上表のフォーマットに整形できればそれが一番ベストだと考えました。
こんなフォーマットになっています。
日付 1001 1002 1003 1004 ← 店舗コード
0201 ** ** ** **
0202 ** ** ** **
0203 ** ** ** **
0204 ** ** ** **
当方の拙い説明で
ご理解いただけますでしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのデータ整形について 3 2022/11/12 00:27
- Amazon Amazonさん 価格の違い...について 4 2022/07/01 21:12
- スーパー・コンビニ コンビニ決済の用紙で支払いの際に「店舗控え」の部分が有りますが、雇用店員が「不要」だと言う根拠が分か 5 2022/04/04 08:27
- 飲食店・レストラン ウーバーイーツの店舗売上データはどこで確認できますか? 会社が運営する飲食店がウーバーを始めたのです 1 2023/07/08 22:24
- その他(買い物・ショッピング) 最近の値上がりの多い中、少しでも努力してくれている感覚を感じたお店。 1 2023/05/03 15:41
- 企画・マーケティング コンビニ本部がドミナント戦略を取るなら、フランチャイズオーナーを救済してあげても良いのでは? 1 2023/07/18 20:16
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- その他(ネットショッピング・通販・ECサイト) 通販の服、皆売り切れ。 通販の服は、目欲しい物は皆売り切れていて、探すに時間がかかる上、結局買えない 1 2022/05/06 08:56
- その他(趣味・アウトドア・車) ドライブレコーダーは、家電屋さんには置いてないでしょうか? 7 2022/10/10 13:00
- 営業・販売・サービス 店舗の店番を無給で他者に行わせる事は違法行為になりますか? 5 2022/06/11 18:27
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
レコードセットにnullの場合
Visual Basic(VBA)
-
6
2次元のdictionary
Visual Basic(VBA)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
9
SQLの速度をあげるには・・・
Visual Basic(VBA)
-
10
レコードセットのデータを1行ごとに抽出したい
Visual Basic(VBA)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
TextBoxコントロールを引数として渡すには?
その他(教育・科学・学問)
-
13
セルの値を取得してSQL文に組み込みたい
SQL Server
-
14
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
15
レコードセット(ADO.Recordset)で処理レコードは何番目?
Visual Basic(VBA)
-
16
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
17
実行時エラー -2147217900 ADODBでレコードセットオープン時エラー
Access(アクセス)
-
18
UserForm
Visual Basic(VBA)
-
19
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
20
DAOでフィールドのデータ型を変更するには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
構造体配列の特定のメンバーをF...
-
配列の要素がすべてカラかどう...
-
配列の中の最大値とそのインデ...
-
Redim とEraseの違いは?
-
Excelマクロ:配列データからグ...
-
C言語 ポインタと配列
-
vba フィルター 複数条件 3つ以...
-
CheckBoxの配列化
-
VBで重複しているデータをユニ...
-
エクセルVBAからNotesでメー...
-
エクセルの列一括書き込み
-
定数配列の書き方
-
エクセル(VBA)の空白配列の削除...
-
DBから取得した値を配列へ代入する
-
配列の中から最大値だけ取り出...
-
pictureboxの名前を変数で設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
VBAで配列引数を値渡しできない...
-
C++で作成したDLLにVBAから配列...
-
構造体配列の特定のメンバーをF...
-
OutOfMemoryExceptionの回避策...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
Segmentation Fault (メモリ制限?)
-
Excelのメモリ(配列)の上限は2G...
-
Redim とEraseの違いは?
-
CheckBoxの配列化
-
配列の中の最大値とそのインデ...
おすすめ情報