- ベストアンサー
レコードセットを配列に変換し、ワークシートに出力する方法
- Excel2003のVBEを使用して、外部データベースから店舗別の売上データを取得し、ワークシートに出力するプログラムを作成しています。しかし、レコードセットの検索には時間がかかるため、配列を使用する方法を探しています。
- これまで配列を使用したことがないため、どのようにすればレコードセットのデータを配列に格納し、ワークシートに一括で貼り付けることができるかわかりません。
- また、配列内で売上表のフォーマットを整形する方法も知りたいです。売上表は、縦列に日にち、横行に店舗名が並んでおり、各店舗の日別売上が一目でわかるようになっています。効率的な方法はありませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
実際データベースとか、クエリを見ていないので レコードセットの中身が分かりませんので ソースをかけませんが、配列に入れてシートに貼り付ける サンプルを作ってみました。 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 これだとデータがどんなに多くても高速です。
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
>ですのでレコードセットの中身を配列に格納して >それを売上表のフォーマットに整形できれば >それが一番ベストだと考えました。 配列に入れたらそのままでしょうから、 そうではなく、 レコードセットを売上表のフォーマット に整形し、それを配列に格納して ではないですか。順序が逆だと思いますが。 でなければ、データをExcelにコピーして Excel上で成型すればすむことです。 実現したいフォーマットが、 日付 1001 1002 1003 1004 ← 店舗コード 0201 ** ** ** ** 0202 ** ** ** ** 0203 ** ** ** ** 0204 ** ** ** ** ならばやることは限定的です。
- chibita_papa
- ベストアンサー率60% (127/209)
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 ** ** ** ** 当方の拙い説明で ご理解いただけますでしょうか? よろしくお願いします。