• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:レコードセットの中身を配列に、そしてワークシートに。)

レコードセットを配列に変換し、ワークシートに出力する方法

このQ&Aのポイント
  • Excel2003のVBEを使用して、外部データベースから店舗別の売上データを取得し、ワークシートに出力するプログラムを作成しています。しかし、レコードセットの検索には時間がかかるため、配列を使用する方法を探しています。
  • これまで配列を使用したことがないため、どのようにすればレコードセットのデータを配列に格納し、ワークシートに一括で貼り付けることができるかわかりません。
  • また、配列内で売上表のフォーマットを整形する方法も知りたいです。売上表は、縦列に日にち、横行に店舗名が並んでおり、各店舗の日別売上が一目でわかるようになっています。効率的な方法はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
回答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 これだとデータがどんなに多くても高速です。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>ですのでレコードセットの中身を配列に格納して >それを売上表のフォーマットに整形できれば >それが一番ベストだと考えました。 配列に入れたらそのままでしょうから、 そうではなく、 レコードセットを売上表のフォーマット に整形し、それを配列に格納して ではないですか。順序が逆だと思いますが。 でなければ、データをExcelにコピーして Excel上で成型すればすむことです。 実現したいフォーマットが、 日付  1001  1002  1003  1004 ← 店舗コード 0201   **   **   **   ** 0202 ** ** ** ** 0203   **   **   **   ** 0204   **   **   **   **  ならばやることは限定的です。

回答No.1

Sheets("Sheet1").Range("A2").CopyFromRecordset rs ではだめですか。 又は、 Do Until RS.EOF でどの様な処理をしているか教えていただければ 多分なんとかなると思います。

anman0201
質問者

補足

回答ありがとうございます。 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