• ベストアンサー

エクセル VBA 別のフォルダのブックからコピー

Cドライブに格納されているブックのシート1のA列の内容を、Dドライブに格納されているブックのシート1のA列にコピーする場合、やはりブック名が分からなければ、ソースを書く事は不可能でしょうか。可能であれば教えていただけませんでしょうか。 ※Cドライブのフォルダ名は常に変わらず、その中には一つしかブックは入っていない。 よろしくお願いします。

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

  • ベストアンサー
回答No.3

こんばんは。 #1の補足、了解しました。 ドライブを逆にすればよいのですね。 もう少し、すっきりしたコードにしてあげられればよいのですが、どちらか片方のファイルが開いていた場合や、コピー先のファイルがない場合などの思い当たるエラーをいくつか考慮してみました。 コードをややこしくしているのはあくまでも、エラーの発生を減らすためです。 ひとつだけ、エラー処理を施していないのは、ありえないようで、あることですが、コピー元とコピー先が同名ファイルの時があります。システムのエラーメッセージが出るはずです。 なお、読みにくいようでしたら、DST とか、SRCとかは、それぞれ、"コピー先"、"コピー元"と、文字列を置換してしまうと、少しは読みやすくなります。 なお、このような例も考えてみました。  '1列ずつ、左の列から貼り付けていく場合    'DstSht.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).PasteSpecial 'ペースト '// Sub Open_CopyR()  Const SRCDRV As String = "C:\" '検索先ドライブ  Const SRCFOLD As String = "C:\Users\(YourName)\My Documents\(TestFoler)\" '末尾に\ を入れてください  Const DSTFILE As String = "Test1.xlsx" 'コピー先ファイル名 *このマクロファイルと同じ場所  Dim fName As String  Dim SrcBook As Workbook 'コピー元  Dim DstBook As Workbook 'コピー先  Dim DstSht As Worksheet 'コピー先シート    On Error Resume Next    Set DstBook = Workbooks(DSTFILE) 'すでに開いている場合  If Err.Number > 0 Then '開いていない場合   If Dir(DSTFILE) = "" Then MsgBox DSTFILE & " がありません。", vbCritical: Exit Sub   Set DstBook = Workbooks.Open(ThisWorkbook.Path & "\" & DSTFILE) 'コピー先を開く  End If  Set DstSht = DstBook.Worksheets("Sheet1") 'コピー先のシート  ChDrive SRCDRV 'ドライブ変更 C:\ドライブ  ChDir SRCFOLD 'フォルダーを開く  fName = Application.GetOpenFilename("EXCELファイル,*.xl*") 'ファイル名取得  If MsgBox("'" & fName & "' でよろしいですか?", vbOKCancel, "ファイルオープン") = vbCancel Then Exit Sub   Set SrcBook = Workbooks(fName) 'すでに開いている場合  If Err.Number > 0 Then '開いていない場合    Set SrcBook = Workbooks.Open(fName)   End If  If DstSht.Cells(Columns.Count, 1).End(xlToLeft).Column >= Columns.Count Then _  MsgBox "これ以上コピーできません。", vbCritical: Exit Sub 'A列コピーなら不要  SrcBook.Worksheets("Sheet1").Columns(1).Copy 'A列をコピー  DstSht.Range("A1").PasteSpecial 'ペースト  '1列ずつ、左の列から貼り付けていく場合    'DstSht.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).PasteSpecial 'ペースト  DstBook.Activate  DstSht.Range("A1").Select 'ペーストの痕跡を直す  Application.DisplayAlerts = False 'クリップボードのダイアログを出さない  SrcBook.Close False 'コピー元を閉じる  DstBook.Save 'コピー先保存  DstBook.Close False 'コピー先を閉じる  Application.DisplayAlerts = True  Set SrcBook = Nothing  Set DstSht = Nothing  Set DstBook = Nothing  ChDir "D:\" '起動したブックのドライブに戻る End Sub

その他の回答 (2)

回答No.2

#1の補足 Dドライブが、Removal 形式の場合、 最後の方の行で、、  End With  ChDrive "C:\" '←これを入れたほうが安全かもしれません。 Exit Sub ErrorHandler:

回答No.1

こんにちは。 ・Cドライブに格納されているブックのシート1のA列の内容を、 ・Dドライブに格納されているブックのシート1のA列にコピーする ・Dドライブのブック名は決まっていない この3つの条件で、Cドライブ側は1つ(一意)であっても、Dドライブ側は変わるという条件でよろしいのでしょうか。 マクロの起動は、別のファイルから、と理解してよろしいのでしょうか? そうすると、Dドライブ側は、対話型で開くしかないと思います。 ちょっとごちゃごちゃしていますが、ステップモード(F8)で追いかけてみてください。 '// Sub Open_Copy()  Const DSTDRV As String = "D:\" 'コピー先ドライブ  Const SRCFOLD As String = "C:\Users\(YourName)\My Documents\(SpecialName)\" '末尾に\ を入れてください  Const SRCFILE As String = "Test1.xlsx" 'ソースファイル名  Dim fName As String  Dim SrcBook As Workbook  On Error GoTo ErrorHandler  On Error Resume Next  Workbooks(SRCFILE).Activate  If Err.Number > 0 Then   Workbooks.Open SRCFOLD & SRCFILE  End If  Set SrcBook = ActiveWorkbook  On Error GoTo 0  ChDrive DSTDRV 'ドライブ変更    '対話型ダイアログボックス  fName = Application.GetOpenFilename("EXCELファイル,*.xl*") 'ファイル名取得  If MsgBox("'" & fName & "' でよろしいですか?", vbOKCancel) = vbCancel Then Exit Sub  With Workbooks.Open(fName)   SrcBook.Worksheets("Sheet1").Columns(1).Copy 'A列(縦)をコピー   .Worksheets("Sheet1").Range("A1").PasteSpecial 'ペースト   .Worksheets("Sheet1").Range("A1").Select 'ペーストの痕跡を直す     Application.DisplayAlerts = False 'クリップボードのダイアログを出さない     SrcBook.Close False 'コピー元を閉じる     .Save     .Close False   Application.DisplayAlerts = True  End With  Exit Sub ErrorHandler:  'ドライブが用意されていない時のエラーメッセージ  If Err.Number = 68 Then   MsgBox Err.Description, vbCritical  End If End Sub

urashiba12
質問者

補足

>マクロの起動は、別のファイルから、と理解してよろしいのでしょうか? ご回答、ありがとうございます。 正しくは下記です、本当に申しわけありません。 ・Cドライブに格納されているブックのシート1のA列の内容を、 ・Dドライブに格納されているブックのシート1のA列にコピーする ・Cドライブのブック名は決まっていない、Dドライブのファイル名は固定です。 さらに、 ・Dドライブからマクロは実行します。

関連するQ&A

  • エクセルVBAでシートを別のフォルダに新規ブックとして格納

    デスクトップにある「元ブック」の「元」シートを、Dドライブの「先フォルダ」という名前のフォルダに「新ファイル」というブック名で格納したいのですが、教えていただけないでしょうか。

  • エクセルで別ブックを検索するマクロ、VBA

    エクセルで以下の処理を行えるマクロを作成したいです。 当方、マクロについてほとんど知識がありません。 恐縮ですが、教えていただけると嬉しいです。 ・主にしたいこと  [検索]ブックで一致するコードを探して、  [結果]ブックの対応するコードの行にそれぞれの項目を返したい。 ●ブック1 [検索]  シートが12個あります(それぞれ、1、2、3…12というシート名=1~12月分)  ↓各シートの内容    A    B    C    D 1  氏名  数値  コード  内容 2  abc   111  SS1234 あいうえお 3  bcd   123  SS3456 かきくけこ ・ ・ ・ といった感じです。 12個のシートの中身はそれぞれ似たようなものですが、 「コード」や「内容」などは少しずつ違います。 ●ブック2 [結果]  ↓シートの内容    A    B    C    D 1  氏名  コード  内容  数値 2      SS3456 3      SS1234 ・ ・ ・ といった感じです。 (注)検索用ブックとは列の並びが異なっています。 ここでやりたいことの詳細ですが、 ・[結果]ブックの「コード」(B列)にコードを入力すると、  [検索]ブックで一致するコードを検索し、  A列「氏名」、C列「内容」、D列「数値」に、[検索]シートの内容を  自動的に表示させたい。  (ただし[結果]ブックに入力した「コード」は、[検索]ブックの1~12のうち、   どのシートにあるかわからない) ・入力したコードが見つからない場合は何も表示しない。 ということです。 最初VLOOKUP、MATCH等の関数で表示することを考えましたが、 シートが複数にまたがっているのと、 列の並び方が[検索][結果]ブックで違うのでわかりませんでした。 長くなってしまい申し訳ありませんが、どうかおしえてください。 よろしくお願いします。

  • Excel2007 VBAでブックのコピーについて

    VBAでブックのコピー仕方が分からないので教えて下さい やりたいことはBook1とBook2のシートデータを統合した物をBook3に書き出したいです 具体的には以下になります Book1 シート名 パターン1 パターン5 A-1 B-2 B-3 B-4 C-1 C-3 C-5 C-7 Book2 パターン2 パターン3 パターン4 パターン6 D-5 D-6 D-7 D-8 E-9 E-10 F-1 F-5 これをパターン1を先頭にアルファベット順に整列してBook3に書き出す作業をしたいです 求めている結果 Book3 パターン1 パターン2 パターン3 パターン4 パターン5 A-1 B-2 B-3 B-4 C-1 C-3 C-5 C-7 D-5 D-6 D-7 D-8 E-9 E-10 F-1 F-5 Book1とBook2のシート名に関しては重複するシート名はないが並び順がばらばらなので Book3に合体させたときにパターン1を先頭にアルファベットのA-1から順番に整列させたいです どのようにマクロを記述したらいいのか分からず困っているのでよろしくお願いします シートの中には画像やオートシェイプなども入っています

  • Excel2007 VBAでブックのコピーについて

    VBAでブックのコピー仕方が分からないので教えて下さい やりたいことはBook1とBook2のシートデータを統合した物をBook3に書き出したいです 具体的には以下になります Book1 シート名 パターン1 パターン5 A-1 B-2 B-3 B-4 C-1 C-3 C-5 C-7 Book2 パターン2 パターン3 パターン4 パターン6 D-5 D-6 D-7 D-8 E-9 E-10 F-1 F-5 これをパターン1を先頭にアルファベット順に整列してBook3に書き出す作業をしたいです 求めている結果 Book3 パターン1 パターン2 パターン3 パターン4 パターン5 A-1 B-2 B-3 B-4 C-1 C-3 C-5 C-7 D-5 D-6 D-7 D-8 E-9 E-10 F-1 F-5 Book1とBook2のシート名に関しては重複するシート名はないが並び順がばらばらなので Book3に合体させたときにパターン1を先頭にアルファベットのA-1から順番に整列させたいです どのようにマクロを記述したらいいのか分からず困っているのでよろしくお願いします シートの中には画像やオートシェイプなども入っています

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • 【エクセル】新しいブックにコピーするVBA

    急ぎで必要で、困ってます。 ”一覧”と”原本”という2つのシートがあります。 ”一覧”シートのA55~H78には、最大24個の商品の情報が縦に入力されています。 A列はメーカー名、B列は商品名・・・H列はフラグ(”0”か”1”のどちらか) ”原本”シートは1商品1枚の注文書みたいなものです。 G13に商品名、G16にメーカー名・・・といった情報を入力する欄が設けられています。 そのエクセルに対し、以下の処理を実行してくれるVBAを作りたいです。 新しいブックを開き、そこに”原本”シートをコピーする。但し、以下の条件がある。 ・”一覧”シートのH列のフラグが ”1”と入力されている商品の情報が入力されている状態の  ”原本”シートが新しいブックにコピーされる様にしたい。 例えば、”一覧”シートに、以下の情報が入力されているとします。 A55=株式会社斎藤 B55=鈴木チョコ ・・・ H=1 ↓ Hが1なので、G13=鈴木チョコ、G16=株式会社斎藤と入力されている”原本”シートを 新しいブックにコピーします。 この処理を繰り返して、H列に”1”と入力されている情報分の”原本”シートが 新しいブックにコピーされる様にしたいです。 以上、丸投げになってしまうので、大変恐縮なのですが、分かる方がいましたら返信お願いします。

  • Excel VBAの違うBOOKへのコピーについて

    お世話様です excel vbaのコピーについての質問です C:\Documents and Settings\tanaka\デスクトップ\a というbookの中にあるsheet1のa1のデータ(以後a-a1と表記)を C:\Documents and Settings\tanaka\デスクトップ\b というbookの中にあるsheet2のc1にコピーしたい、と言った場合、 (以後b-c1と表記) それぞれのbookをactiveにしないとだめでしょうか (つまり、違うbookのファイル間でのコピーの際の質問なのですが) 私にはその方法しかわからず、この後 a-a11をb-d3へ、a-e11をb-s18へというアットランダムコピーが続くのですが、非常にコードも長く、時間がかかる処理になってしまいます。 どうか教えていただけると助かります 宜しくお願いします

  • エクセルVBAで違うブックの指定セルの値をコピーするコード

    同じフォルダ内に次のブックがあります。 ・「日報」フォルダ ・「入力」ブック ・「日報」ブック 「日報」ブックの「入力」シートのセルに入力して、ボタンを押すと 「日報」ブックの指定のセルに順にコピーしていくようにしたいの ですが、コードをお教えいただけないでしょうか? 具体的には次のようになります。 「入力」ブックの「入力」シート→「日報」ブックの「日報」シート A2,C2,D2,E2,F2→→→→→→A5,D5,F5,L5,P5 A3,C3,D3,E3,F3→→→→→→A6,D6,F6,L6,P6 A12,C12,D12,E12→→→→→→A34,J34,E34,E35 A13,C13,D13,E13→→→→→→A36,J36,E36,E37 このように入力されるようにしたいと思います。 実際にはもう少し同じようにコピーするところが あるので、後でセル番地を追加できるようなコード であれば非常にありがたいです。コードを教えて ほしいなんて本当にずうずうしいですが、どうぞ よろしくお願いします。

  • エクセル(VBA)のブック間でのコピーペーストについて

    こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。

  • エクセルVBA 一覧にあるブックを順に印刷するには

    こんばんは。ブック名の一覧の中から指定したものを順に印刷をしていく方法を教えてください。 D10から下にブック名が書いてあります。 その横(C列)に“印刷”と入力してあるブックのシートすべてを順に印刷をしたいと思っています。 ただし、シート名に「保存」という名前を含んだものについては印刷対象から除きたいというわがままなものなのです。 ブックはすべてマクロ実行のファイルと同じフォルダの中にあります。 これ、可能でしょうか?よろしくお願いします。

専門家に質問してみよう