• ベストアンサー

エクセル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

  • Excelシートを何も変えず他のBookへ移動

    タイトルのままなんですが、エクセルでシートを作り関数を組んで表を制作しました。このシートを他のファイルに関数を変えずにコピーしたいのですがどうすればいいでしょうか? シート1~シート3入力データ シート4でまとめ  のような構成です。シート4を他のbookに使いまわしたいのですが。 状況として、 現在のファイルを「bookA.xls」としコピー先を「bookB.xls」とします。 Aの方でシートのタイトルバー上で『シートの移動またわコピー』を使ってBにコピーをするとシートの中の関数に…[bookA.xls]…が関数に入ってしまいます。 自分としては完全にそのままコピーがしたいのですが… どうすればいいでしょうか?宜しくお願いします。

  • 参照先のブックを開かずに内容をコピーしたい

    エクセルのマクロ初心者です。 いつもここで他の方のQ&Aを参考にしたり、自分で質問したりしてお世話になっています。 今回は、参照先のブックを開かずにその内容をコピーする方法についてお聞きしたいです。 現在、下記のようなマクロを組んでいます。 Workbooks.Open FileName:="BookA.xls" Sheets("Sheet1").Activate Range("B4:H4").Copy Windows("BookB.xls").Activate Sheets("Sheet2").Select Range("B1").Select Sheets("Sheet2").Paste Workbooks("BookA").Close Windows("BookB").Activate つまり、BookAのセルの一部分をコピーしてBookBのセルに貼り付けるという内容なんですが、コピー参照先のBookAを一度開いてコピーしてからBookBに行って貼付け、さらにBookAを閉じた後でBookBに再び戻る、という動作になっているため、画面がパラパラと切り替わる時間があって少々うっとおしいのです。 BookAをいちいち開かずに内容をコピーする方法があると思うのですが、どのような構文を使えばいいでしょうか? ご回答よろしくお願いします。

  • EXCELで他のブックを参照する方法について

    BookA.xlsx(明細)と、BookB.xlsx(集計先:関数集計+グラフ)ふたつのブックがありますが、Aを開かずにBを開くと集計されません。COUNTIFS関数等を使っているからのようですが、コードの記述で集計できませんでしょうか。 (AとBを同じブックにすれば簡単なのですが、今回は諸事情によりできません) パス・ファイル名・シート名をBookBに埋め込んで、それを呼び出すなどできませんでしょうか。コード初心者なので、具体的なサンプルをご教授頂けると助かります。大変お手数ですがよろしくお願いいたします。

  • エクセルで2つのブックからの引用??

    ご存知方教えて下さい。 現在、エクセルで2つのシートがあります。(bookA、bookB) それぞれ異なるデータです。 (例え) bookA:Aさん、東京出身、23歳 bookB:Aさん、女性、独身 そこで「bookC」として bookC:Aさん、女性、東京出身 というデータを作りたいのですが、 bookA・Bのそれぞれから「Aさん」という共通項を元に データを引っ張ってくる事はできるのでしょうか? 数はAさんだけではなく、Bさん・Cさん・・・というように 数多くいますが、引っ張ってくるデータは一緒です。 下手な説明で申し訳ございません。 ご存知の方教えて下さい。 よろしくお願い致します。

  • 列コピーについて

    VBAを利用した複数必要列をコピーする方法を教えて下さい。 シート1に入っているデータで 1行目には、項目名が入っています。 項目数はMAX200個前後です。 毎月各担当者からデータが入ったExcelブックを受け取り 必要な列だけを残して、データをコピペして頑張っていたのですが、 毎回列並びが異なるのと、担当者によっては抽出してくる 項目が違うため担当者ごとに修正するのが手まで困っております。 作業を以下の様にしたいです。 各ブックに入っている項目数はバラバラですが、最終的に必要な項目は 各担当者で必ず残してもらえています。 但し各担当者によって列並びがバラバラで困っています。 (1)例えばシート1に以下の様にデータを入力しておく (担当者で) A B(列) (行) 1 test 2 支店 3 営業担当者 4 番号 (2)シート2は各担当者より提出されるデータをまるっと貼り付ける A B(列) (行)test 日付 支店 営業担当者 エリア 番号 住所 電話番号 1 2 2行目以降はデータだけが入っている 3 4 ★行いたいのは(2)に入っているデータより★ (1)に入力されているB列の2行目以降に入っている項目キーと一致するデータを (2)からコピーしてシート3へ必要な項目が入っているデータを列ごと貼り付けたい 最終イメージーはにシート2に入っているデータから、 シート1には入っている項目だけのデータを シート2からコピーしたデータだけがシート3に残るようにしたいです。 以下がシート3で最終的に残るデータとしたい A(列)   B(列) C(列) D(列) E(列) F(列) → 以降項目数が続く (行)test  支店   営業   担当者 番号    電話番号 1 2 2行目以降はデータだけが入っている 3 4 ↓ 以降 データが入っている 必要データ以外は削除としたのですが、 項目数が多く以下の内容ではうまくいきませんでした。 ※例として書いているのが項目名が4つとしていますが、 必要な項目数はおよそ30前後になります。下記の内容では、 文字数の関係でエラーが出た為必要な項目をコピーして別シートへ貼り付ける方が よいとアドバイスをいただいたのですがうまく書けませんでした。 Dim rng As Range Set rng = Cells.Find("test、支店、営業担当者、番号", , xlValues, xlWhole) If Not rng Is Nothing Then Range(rng.Offset.EntireColumn, rng.Address).Delete End If Set rng = Nothing どのようにすれば必要な項目を列ごとコピーして別シートへ貼り付けることができるでしょうか。 是非お力添えをお願い致します。

  • EXCELマクロで特定の行以下をコピーしたい

    BookA.xlsファイルからBookB.cvsがあり、 bookB.csvには1から不特定に数字が昇順にならんでいます bookB.csv  A    B 1 1   文字列A 2 2   文字列B 3 54   文字列C 4 100  文字列D 5 101  文字列E BookA.xlsからbookB.csvを読出し、特定の数値(100番)を探し出し その行から下100行をコピー、BookA.xlsのSheetCに貼り付け という作業をするマクロを組みたいと思っています。 'CSVファイルを開く CSVname = Application.GetOpenFilename(Title:="CSVファイル指定", fileFilter:="CSV ファイル (*.CSV), *.csv") If CSVname = False Then MsgBox "ファイルを1個指定して下さい" Exit Sub End If 'ファイルをひらく Workbooks.Open CSVname '100番検索 Set Obj = Cells.Find("100", LookAt:=xlWhole) If Obj Is Nothing Then MsgBox "見つかりませんでした。" Else Tate = Cells.Find("100", LookAt:=xlWhole).Row End If 'A列100番のある行から199行を選択・コピー エラー→Range(Cells(1, Tate), Cells(2, Tate)).Select このように作ってみたのですが、どうしてもここでエラーになり 先に進めません。 どうか解決方法をお教え下さい。 宜しくお願いします。

  • VBAの1行目のコピー

    EXCEL2010のマクロで困っております。皆様のお力をお貸しください。 環境:WindowsXPSP3 office2010 EXCEL2010です。 やりたい事、BookAとBookBがあります。BookAにはたくさんのSheetがあります。これを、これを一つのSheetにまとめました。このSheetをBookBにコピーしました。そこで、1行には、項目入っています。A1には、生徒の名前、A2には、男女別、・・・と言うふうにA1~AW1まで入っています。A2行以下にはたくさんのデータが入っています。このデータは、BookBの一つのSeetにコピーしました。BookAのデータ行が沢山ある場合は、良いのですが、少ないと、BookAの一行目の項目の入った部分だけがBookBの一つのSheetにコピーできません。一行目のコピーの仕方は下記の通りです。 Sheets(4).Range("A1:AW1").CurrentRegion.Copy Sheets("Sheet" & sheetsuu).Range("A1:AW1") そこで、BookAのデータが少ない時にも一行目の項目をコピーしたいのですが、どうすれば良いかご教授願います。宜しくお願い申し上げます。

  • Excel VBAを使って他ブックのデータ抽出とコピー

    VBA初心者です、よろしくお願い致します。 現在、Excel97を使用して、実績をまとめるファイルを作成しています。 このファイルのシートに、他ブック(ネットワーク上固定フォルダ固定ファイル名)のデータを抽出コピーを行いたいと思っています。 他ブックは、品名(A3)、日付(C3~AG3)(1日~31日)という列からなり、品名数の増減があります。 様々な情報を参照させていただき下記のようなコードを作成しました。 Set wb1 = Application.ActiveWorkbook 'ブックを開く Application.ScreenUpdating = False Set wb2 = Application.Workbooks.Open(dataDirJisseki & dataNameJisseki, ReadOnly:=True) 'コピーする With wb2 .Worksheets("SMT生産実績").Range("A3:A65536").Copy _ Destination:=wb1.Worksheets("work_jisseki").Range("A1") .Worksheets("SMT生産実績").Range(colTmp & "3:" & colTmp & "65535").Copy _ Destination:=wb1.Worksheets("work_jisseki").Range("B1") End With 'ブックを閉じる Set wb1 = Nothing wb2.Close Savechanges:=False Set wb2 = Nothing Application.ScreenUpdating = True 上記プログラムでも希望した動作にはなるのですが、下記について改善したくご相談させていただきました。 (1)抽出する列を他ブックから検索したい  現状では、抽出する列を自ブックのシートの"日付"セルに入力させ、その値に該当する他ブックの列名をSelect Caseを使って判断しています。 Select Case Day(Range("日付")) Case "1" colTmp = "C"     : Case "31" colTmp = "AG" End Select  これでは他ブックの列構成が変わってしまうと異なるデータ列を取ることになるため、日付を使って他ブックから該当列を検索するようにしたいです。 (2)他ブックのデータ数(行列数)を使ってコピーをしたい  現状では行数最大値の65536でコピーしていますが、他ブックのデータ数でコピーしたい。 以上ですが、是非お力添えをいただければと思います。 説明等不足がありましたら、そちらも指摘ください。よろしくお願いします。

  • ExcelVBA 名簿の別ブック(CSV)へコピーについて

    VBAは学生時代勉強したもののすっかり忘れてしまい、初心に返って現在参考書を読みながら取り掛かっていますが、 望むような動作が出来ず大変困っています。下記のようなデータを新規ブックAへある条件でコピーし、 CSVとして保存したく、試行錯誤中です。 (A:1)(G:15)までタイトル行にあったデータが入っている名簿があります。 (G:15)でデータは終了ですが、別の名簿も扱う事があり、別の名簿はデータの終了行は(G:15)とは限りません。 -------------------------------------------------------------- (A列)(B列) (C列) (D列) (E列) (F列) (G列)  No   姓    名  姓カナ  名カナ  年齢  性別  1  2  3  ・  15  空白  空白  空白  空白  空白  空白  空白 -------------------------------------------------------------- コピー条件 (1)データの開始行検索&終了行検索(空白セル) (2)データ内の検索(文字or数字) (3)データの開始行から終了行まで新規ブックAへ下記を繰り返す (4)A列のデータを新規ブックAへコピー (5)タイトル行のデータ入力(A列:同じ)(B列:名前)(C列:カナ) (6)B列+全角スペース+C列のデータを新規ブックAのB列へコピー (7)D列+半角スペース+E列のデータを新規ブックAのC列へコピー (8)G列のデータを新規ブックAのD列へコピー (8)F列のデータを新規ブックAのE列へコピー (9)新規ブックを本ファイル名+YYYYMMDD.csvでデスクトップへ保存 -------------------------------------------------------------- 図々しい質問ですが、具体的なコードのお知恵をお貸し頂けたら大変助かります。どうぞ、よろしくお願いいたします。

  • エクセルで、別Bookの同じデータを自動的にコピーする

    自分で考え解決できるほどのスキルが無いので、ここをよく利用しています。皆さんよろしくお願いしますm(_ _)m エクセルです。2つのBookがあります。それぞれにデータ(文字)が入っていますが、その一部を自動的にBook2から Book1にコピーしたいのです。 ★☆★ Book1のあるセルのデーター(文字)と同じデータが入っている、Book2のセルと同じ行で別の列にあるデーターを、 Book1のデータと同じ行で別の列にコピーしたい。 ★☆★ このような事が、自動的に出来るんでしょうか? ちなみに、マクロは・・・私には難しいですm(_ _)m

専門家に質問してみよう