• ベストアンサー

エクセル2002 winXP タイトルの列を入れ替えて他のブックへコピーしたい

お世話になります。 簡単なマクロを使って、表題通り、あるブックの表を、他のブックへ コピーし、なおかつタイトル列を右へ左へと入れ替えた状態で表示する方法を 教えてください。 具体的には・・・ bookA には、A列から順番に、たとえば 日付 材料名 単価 入り数 金額 というタイトルの列が並んでいて(データの量は、3000行くらいです) 各列には文字列だったり数値だったりのデータが入っています。 このようなデータから、他ブック  bookB へ。 このbookB には、既にデータが何千行か入っていて、bookAと 同じデータなのですが、 見方を違えているので、タイトルがbookA と 並び方が違っています。 bookA のタイトルが、bookBでは 日付 単価 金額 入り数 (実際にはもう少し複雑なのですが)と並んでいます。 このbookBの、最終行に、bookA を、貼り付けたいのです。 bookA   日付 材料名 単価 入り数 金額    (3000行くらいデータが入ってるのでそれをコピーしたい) から、 bookB   日付 単価 金額 入り数        (既に何千行か入ってるので最終行の続きへ貼り付けたい)

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

う~ん 何でかな? データはどの様に入っていますか?  日付    単価  金額  入り数  2007/01/01 10000  1000   10  2007/01/02 15000  2000   20  2007/01/01 20000  3000   30  2007/01/03 15000  4000   40  2007/01/02 50000  5000   50    これ位の簡単なデータで試した場合はどうなりますか? あと rsXL.Open "select 日付,単価,金額,入り数 from [大阪$]", _     cnXL, adOpenForwardOnly を rsXL.Open "select * from [大阪$]", _     cnXL, adOpenForwardOnly とした場合は? Connection自体は成功しているようなのでデータに何かあるのでは?と思っています。 (データ量の多寡は問題なさそうです。1万行で試しました。)

asacchi
質問者

お礼

できました!!!(*^_^*) 自宅のは エクセル2003だと気づき、そのせいもあるのかと思いましたが、いろいろ間違った点がありました。 まず、試しで作ったファイルを利用していたので、新規ブックを使ってはいたが、一旦保存していなかったため、多分ファイルが見つからないと 出たのでしょう。 それから、ファイルパス指定を、Dドライブなのに、コピーしたままのCにしていた・・・ということに気づき、なおしたら、 あっというまにマクロが走りました!!! ありがとうございました! お忙しい時間をさいていただき感謝します。 これを、実際のでっかいファイルに明日、活用してみます!

asacchi
質問者

補足

お返事ありがとうございます。 今夜自宅で試して見ます。 未熟者ですみません!

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

抜けてた。 一部修正 wS.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).CopyFromRecordset rsXL あとは大丈夫かな・・・

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

簡単なマクロ・・・では無いかも? 私自身現場で使った事はありませんが何とかなりそうなのでレスしました。 VBEの画面でツール→参照設定で下記にチェックを入れます Microsoft ActiveX Data Objects 2.5 Libraly (2.5 より大きいものもありますが、それを選択した場合ADODBのヘルプが使えなくなります) で、BookBの標準モジュールに Sub importXL()   Dim cnXL As ADODB.Connection   Dim rsXL As ADODB.Recordset   Dim wS As Worksheet   Set wS = Worksheets("sheet1")   Set cnXL = New ADODB.Connection   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=C:\bookA.xls; ReadOnly=True;"     .Open   End With   Set rsXL = New ADODB.Recordset   rsXL.Open "select 日付,単価,金額,入り数 from [ブックAのシート名$]", _     cnXL, adOpenForwardOnly   wS.Cells(Rows.Count,1).End(xlUp).CopyFromRecordset rsXL   rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing End Sub C:\bookA.xlsは実際のPathに、 ブックAのシート名$ も 実際の名前(Sheet1$)などに替えて下さい。 ※必ずバックアップは取ってからお試しを!

asacchi
質問者

お礼

補足の補足です。 [ブックAのシート名$]", の、シート名は、大阪  なのですが、 rsXL.Open "select 日付,単価,金額,入り数 from[大阪$]", _ cnXL, adOpenForwardOnly ここで、 Microsoft Excel Driver で、2が足りません。・・・ と出てきてしまいます。 どういう意味なのでしょうか??

asacchi
質問者

補足

お忙しい中、ご回答ありがとうございました! 自分でも、VBAを使った方法でやってみようと、 休み中自宅で考えていましたが、なにぶんVBAについては初心者で、 なかなか思うところまでいきつきません。 いつも構文をみようみまねでアレンジしている次第でして。。。 早速ためしてみたいと思います。 また、結果の報告をお礼の欄でさせて頂こうと思います。 ありがとうございます!

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

列毎に選択コピーし、貼り付けるのがいいと思います。

asacchi
質問者

お礼

それが手っ取り早いとは思うのですが、実際には対象のワークシートがたくさんあり、同じ作業を何回もするくらいなら、と思いまして。 ありがとうございました。

関連するQ&A