• ベストアンサー

VBA(エクセル)で教えて下さい。開いていないBOOKの貼り付け

VBA(エクセル)で教えて下さい。開いていないBOOKのシートを開いているBOOKのシートに貼り付けで、開いているBOOKから開いていないBOOK名を指定したいのですが、 現在開いているエクセルです。 SHEETS(Type)のRANGE(A1)に閉じているBOOK名を入力します。 SHEETS(In)に閉じているBOOKのSHEETSを貼り付けたいのですが、 Ex = Sheets("Type").Range("A1")  が無いと閉じているEx.xlsを貼り付けます。 このExと言うBOOK以外も多々コピーしたいのですが、どのように書けば良いか分からず、 是非、教えて下さい。 Sub a1() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("In").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select 'If Worksheets(1).Name = "STEP1" Then ' Worksheets(1).Activate ' Cells.ClearContents ' Else 'Worksheets.Add(Before:=Worksheets(1)).Name = "一覧" 'End If   Ex = Sheets("Type").Range("A1")   Set wsSrc = ActiveSheet Workbooks.Open "C:\WINDOWS\デスクトップ\test\Ex.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub

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

  • ベストアンサー
  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.1

ご質問の意図をつかみ損なっているかもしれないので、見当違いかもしれませんが。 >SHEETS(Type)のRANGE(A1)に閉じているBOOK名を入力します。 で、その名前のブックを開くのなら Dim Ex As String Ex = Sheets("Type").Range("A1").Text Workbooks.Open "C:\test\" & Ex & ".xls" とすればいいのではないでしょうか。 #はずしていたらすみません。

aieeen
質問者

お礼

ありがとうございます。 Sheets("Type").Range("A1").Text に入力したBOOK名がOPEN致しました。

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんにちは。 提示されたソースを見る限り、 Ex に代入された Sheets("Type").Range("A1") のデータは何にも使われてないですよ。 特定フォルダ内にあるファイルを扱うなら、既に#1さんが回答を出されています。 そうじゃないならフルパスで指定するようにするか、処理時にファイルを指定させるか、、、でしょう。 Sub aaa() Dim FName  FName = Application.GetOpenFilename("Excel(*.xls), *.xls")  If FName <> False Then   Workbooks.Open FName   '処理  End If End Sub

aieeen
質問者

お礼

ありがとうございます。 特定フォルダ内なのですが、後編フルパス指定時の ファイルの所得方法も学べて、プラスαです。 勉強になりました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

私の場合、c:\My Documentsにbbb.xlsとccc1.xlsがあります。新規に開いたエクセルのsheet1のA1:A2に bbb.xls ccc1.xls と入力しています。 そしてsheet2,sheet3があります。iを増やすなら 予め増やしておくか、ActiveWorkbook.Sheets.Addが 必要でしょう。 そういう下で Sub test01() For i = 1 To 2 b = Worksheets("sheet1").Cells(i, "A") MsgBox b n = ActiveWorkbook.Name Workbooks.Open "c:\my documents\" & b ActiveWorkbook.Worksheets("sheet1").Activate ActiveSheet.Range("a1:h10").Copy Workbooks(n).Worksheets("sheet" & (i + 1)).Activate Range("a1").Select ActiveSheet.Paste Application.CutCopyMode = False Workbooks(b).Close Next i End Sub を実行するとSheet2,Sheet3にbbb.xlsのsheet1, ccc1.xlsのSheet1をそれぞれコピーしました。 Activeの使い方やRangeのコピーを使っている点など をご参考になれば。ただし危ない橋を渡っている気がするので、更に拡張してご質問者のやりたいようにするには 難題が待ちうけているかもしれませんがよろしく。 ・Activeのこと・Pasteのこと・保存するまでのファイル名の問題など知りたいのですが、私の理解が十分でないことを認識しています。

aieeen
質問者

お礼

今回BOOK名は不特定で指示したBOOKをシートにコピーする 形を作成したかったので、 1・3の方と合わせて作成します。 本当にありがとうございました。 また皆様、お礼が遅れまして申し訳ございませんでした。

関連するQ&A