• ベストアンサー

Accessの値をExcelに縦横入替出力させる

現在、作業列を使って一旦AccessからデータをVBAでADOを使用して読み込み その後transpose関数で入れ替えているのですが 出力する前に縦横を入れ替えた状態にはできないのでしょうか?

  • fwod
  • お礼率54% (47/86)

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

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

>出力する前に縦横を入れ替えた状態 テーブルやクエリで持たせるにしても コードが面倒なので、以下のように 定番のような方法がありますが、 どうでしょうか。ADOで行ないます。 Excelでの記述です。 ファイルまでのパスや、コネクション設定は 省きます。必要な変数だけ設定しておきます。 なお、rsはADODB.Recordsetです。   ・   ・   ・ Dim buf() As Variant Dim i As Long Dim j As Long   ・ 'ここにAccessファイルへのコネクションを設定   ・   ・ i = rs.Fields.Count j = rs.RecordCount ReDim mbuf(i - 1, j - 1) buf = rs.GetRows Range(Cells(1, 1), Cells(i, j)) = buf これで終了です。 ポイントはADOのGetRowsを使うことです。 ただし、メモリを消費するので巨大なデータでは 何がおこるかはわかりませんが。

fwod
質問者

お礼

返事が遅くなってしまい、申し訳ございません。 回答ありがとうございました、試してみます

その他の回答 (1)

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

No1です。 コードの途中で、 >ReDim mbuf(i - 1, j - 1) となっていますが、bufに変なものをくっつけていました。  ReDim buf(i - 1, j - 1) です。

関連するQ&A

  • Accessの値をExcelに縦横入替出力したい

    以前 http://okwave.jp/qa/q8776430.html ここにて質問をさせて頂いたのですが、回答を頂いたことに感激し お恥ずかしい事に解決する前に先走って回答を締めきったものの どうしても解決できないので申し訳ないですが再度質問させて下さい。 質問:AccessからデータをExcelVBAでADOを使用して読み込み、 出力する前に縦横を入れ替えたいのですが その際に, adOpenstatic、adOpenKeyset などカーソルのタイプを変更しても recordcountが-1を返してしまうのですが、解決法を教えてください。 以下補足です。 -------------------------------------------------------------------- 現在、作業列を使って一旦AccessからデータをVBAでADOを使用して読み込み その後transpose関数で入れ替えているのですが 出力する前に縦横を入れ替えた状態にはできないのでしょうか? -------------------------------------------------------------------- という質問に対して、 Dim buf() As Variant Dim i As Long Dim j As Long   ・ 'ここにAccessファイルへのコネクションを設定   ・   ・ i = rs.Fields.Count j = rs.RecordCount ReDim mbuf(i - 1, j - 1) buf = rs.GetRows Range(Cells(1, 1), Cells(i, j)) = buf ------------------------------------------------------------- という回答を頂き パス(省略) Sub AcRecordCount() Dim tmpFldCnt As Variant Dim tmpRecCnt As Variant Dim buf() As Variant Call DBconnect(True) (省略) strSQLgenyu = _ "SELECT * " & _ "FROM TBL " & _ "WHERE コード = " & Range("J1") & _ "Or コード = " & Range("J2") 'J1、J2に一致したwhereフィールドの列を、fromテーブル名から全て(*)を出力 adoRs.Open strSQLgenyu, adoCn, adOpenKeyset 'SQLを実行して、対象をadoRsへ MsgBox (adoRs.RecordCount)  '-1が返ってくる tmpFldCnt = adoRs.Fields.Count tmpRecCnt = adoRs.RecordCount ReDim buf(tmpFldCnt - 1, tmpRecCnt - 1) 'インデックスが有効範囲にありませんとでる(恐らくrecordcountが原因) buf = adoRs.GetRows Range(Cells(131, 11), Cells(tmpFldCnt, tmpRecCnt)) = buf Range("EA11:JJ105").ClearContents 'セル内を削除 Range("EA11").CopyFromRecordset adoRs '出力 End Sub と、書いたのですが、-1が返ってきてしまいます。 原因は何なのでしょうか?

  • アクセスでエクセルに出力

    アクセスでエクセルにマクロの出力コマンドを使用して出力しています。ただ、日々更新されていますので、それをプリントアウトするときに印刷の設定(用紙サイズとか縦横・余白の大きさ)をエクセルで設定するのが毎回毎回面倒なので出力するときにアクセス側?で設定できないでしょうか?

  • アクセスからエクセルへのデータ出力で困っています

    アクセスデータをエクセルの形で出力させているのですが、エクセル出力をするとデータのところどころが抜けて何も入っていない状態になります。アクセスで見るとちゃんとデータは入っています。どのようにすればもれなくデータのエクセル出力が出来るのでしょうか?

  • AccessからExcelへ

    Accessの任意のテーブルのデータを配列変数に代入しておいて、Excelの既にあるファイルの任意のセルを指定して転記して表を作成する・・・という事をしたいのですが。 Excelに出力するというマクロがあることも知っていますが、それをすると内容が書き換わってしまうだけでデータの追加が出来ませんし、Excelに出力した後列幅やら表示形式やらのレイアウトも同時にVBAで変更したいのですがうまくできません。 私DAOはある程度わかります。(古いバージョンを使用しているのでADOは使ったことがありません。)Loopや配列変数のプロシージャも一応理解できます。 こんな風にしたら出来ます、ないしはこの書籍に載ってます。という回答お願いします。

  • MS Accessの列と行の入れ替えをしたいのですが・・・

    たとえばPC1よりPC2へTXT形式でデータを落としてきて、そのデータの行と列を入れ替え、それをAccessでリンクさせるという一連の作業を自動でできたらと思っているのですが、VBAは現在勉強注なのですが、ほとんどわからないためどうしたものかと思っています。 一度きりならエクセルなどで編集して列と行を入れ替えて使おうと思ったのですが、リンク元のtxtデータには毎日新しいデータを上書きするのでそうもいかないので、どうしたものかとろいろ考えたのですがよい考えが浮かびません。 どなたかよい方法を知っておりましたらぜひ、教えていただけないでしょうか。 よろしくお願いします。

  • ファイル出力の時間をはかりたい

    AccessからVBAでExcelにデータを出力しています。複数ファイルを出力しているのですが、吐き出す時間が非常に遅いです。そこで1ファイル出力するのに、どのくらいの時間がかかるのか知りたいのですが、どういった関数を使えば時間をはかれるのでしょうか?googleで調べてみましたが、調べ方が悪いのか欲しい関数が出てきませんでした・・・

  • Excelのデータ種類の出力方法

    Excelで、例えば1列目に「ああいいううういあああいいううううう」とデータが入力されている状態で、この列には「あ」と「い」と「う」の3種類のデータがあって、それを出力させる関数はあるのでしょうか?ご存知の方がいらっしゃいましたら宜しくお願い致します。

  • Excelで値貼り出力をするVBAは作れますか?

    Excelで値貼り出力をするVBAは作れますか? Excel2003を業務で使用しています。 SUMPRODUCTなどのいろんな関数を使って売上げ報告書を集計し、 取引先に送っているのですが、計算式や参照式でファイルが重くなっているので、 値貼りをしたファイルを作成したいのです。 そこで、VBAを使って以下のどちらかを実現することは可能でしょうか。 ・報告書の全シートの全書式(罫線・色)と値を別ファイルに出力 ・書式のみ、全て空欄の別ファイルに全シートを値貼り これが出来るととても助かるので、ご教示ください。宜しくお願いいたします。

  • Access2010でのExcel出力について

    お世話になります。 Access2010のクエリで抽出した結果を下記のコマンドでExcelに出力しています。 Private Sub コマンド6_Click() Dim デスクトップの場所 As String デスクトップの場所 = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" If Nz(Dir(デスクトップの場所 & "log.xlsx"), "") <> "" Then If vbNo = MsgBox("デスクトップに同じ名前のファイルが存在します。上書きしますか?", vbYesNo + vbQuestion, "ファイルが存在します") Then Exit Sub End If End If DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Q_syukei", デスクトップの場所 & "log.xlsx" DoCmd.Close MsgBox "デスクトップに案件ログのExcelファイルが出力されました" End Sub その中のフィールドにコンボボックス利用のデータが複数あり、 1列目にID番号が振られていて、2列目に目的のデータ項目が格納されています。 元のテーブルでも、クエリでも列幅を0cm;10cmとしていて、 クエリの結果もAccess上で見ると2列目のデータ項目が表示されるのですが、 出力されたExcelには1列目のID番号しか載ってきていません。 2列目のデータをExcelに出力するにはどうすればよいでしょうか。 ご教授ください。

  • ExcelからAccessにデータを取り込む方法

    質問します。 Access初心者、VBA初中級者です。 VBAで、ExcelからAccessにデータを取り込んでいます。 ですが、Excelの表はAccessのDBの型と一致していません。取り込む場合、特定の列のデータをAccessの特定のフィールドに取り込むことはできますか? (たとえば、ExcelのA列のデータは、Accessの「品番」フィールドに入れる、B列のデータはAccessの「商品名」フィールドに入れる、というように。) 一時エリアに保存して、それを取り込む方法でもいいです。 現在TransferSpreadsheetを使っていますが、Rangeを指定して一度に全部もってきたいわけではないので、できれば取り込み先を設定したいと思った次第です。 また、Excelは使用行が決まっていないため、取り込みも、できれば 「カラ行になるまで1行ずつ取り込む」というようなコードにしたいです。 お手数をおかけしますが宜しくお願いします。

専門家に質問してみよう