
今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も見ています
-
性格悪い人が優勝
できるだけ性格悪い人になって回答をお願いします。
-
ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
ゴリラ向け動画配信サイト「ウホウホ動画」にありがちなことを教えて下さい。
-
最速怪談選手権
できるだけ短い文章で怖がらせてください。
-
スタッフと宿泊客が全員斜め上を行くホテルのレビュー
スタッフも宿泊客も、一流を通り越して全員斜め上なホテルのレビューにありがちな内容を教えて下さい
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
レコードセットにnullの場合
Visual Basic(VBA)
-
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
-
4
2次元のdictionary
Visual Basic(VBA)
-
5
[Excel VBA] ODBCによる外部データ取込で書式が変わる。
Visual Basic(VBA)
-
6
参照設定は2.8と6.0 6.1とどちらにチェッ
その他(Microsoft Office)
-
7
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
8
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
9
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
10
レコードが存在しなかった場合
Microsoft ASP
-
11
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
Listviewのデータを上から順番に取得 VBA
Visual Basic(VBA)
-
14
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
-
15
VBAで変数内に保持された二次配列データをテーブルに格納
Access(アクセス)
-
16
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
17
Excel VBAからAccessマクロを実行したい
Visual Basic(VBA)
-
18
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
19
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
20
SELECT文を発行して、ACCESSより取得する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
Msgboxのループ
-
ジャグ配列生成時の1オリジン
-
配列の中身を行頭の数字で並べ...
-
VBの添削をお願いします。
-
順列をランダムに発生するプロ...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
プログラムからMySQLを使うとき...
-
VB.NETにて、構造体へデータを...
-
エクセルでXY座標に並べられた...
-
CheckBoxの配列化
-
Excelマクロ:配列データからグ...
-
【UWSC】URL内の数字部分を可変...
-
グラフの「項目軸ラベルに使用...
-
エクセル(VBA)の空白配列の削除...
-
定数配列の書き方
-
VBAで配列引数を値渡しできない...
-
VBA フォルダ内のファイルを、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
配列のペースト出力結果の書式...
-
CheckBoxの配列化
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
Redim とEraseの違いは?
-
VB.NETの配列にExcelから読み込...
-
複数のtextboxの処理を一括で行...
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
COBOLの基本的な事なので...
-
DBから取得した値を配列へ代入する
-
VB.NETの配列の限界を教えてく...
-
Segmentation Fault (メモリ制限?)
おすすめ情報