EXCEL VBA複数ブックからの貼り付け

このQ&Aのポイント
  • 複数のブックにあるデータを一つのシートに繋げるマクロを作成中です。エラーが発生して困っています。
  • 特定の部分で『インデックスが有効範囲にありません。(Error 9)』のエラーが発生しています。
  • さらに、コメントアウトしても同様のエラーが出てしまいます。
回答を見る
  • ベストアンサー

EXCEL VBA複数ブックからの貼り付け

複数のブックにあるデータを一つのシートに繋げるマクロを作っています。 元となるブックのフォーマットは全て一緒の為下記の様なコードを書きました。 Dim OpenFileName As Variant, tmp As String, i As Long '複数のブック巣を選択 OpenFileName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls", _ MultiSelect:=True) '名前の取得 If IsArray(OpenFileName) Then For i = 1 To UBound(OpenFileName) tmp = tmp & OpenFileName(i) & vbCrLf Next i MsgBox "選択したファイルは " & vbCrLf & tmp & " ", vbInformation Else MsgBox "キャンセルされました。", vbInformation End If '選択したブックを開く For i = 1 To UBound(OpenFileName) Workbooks.Open OpenFileName(i) Next i '最初のファイルをコピーをし、DataSheetに貼り付ける Workbooks(OpenFileName(1)).Worksheets("元帳").Cells.Copy _ Destination:=Workbooks("在庫表BETA.xls").Worksheets("DataSheet").Range("A1") '2個以降のファイルを下に貼り付ける For i = 2 To UBound(OpenFileName) Workbooks(OpenFileName(i)).Worksheets("元帳").Range("A9:V54").Copy _ Destination:=Workbooks("在庫表BETA.xls").Worksheets("DataSheet").Range("A65536").End(xlUp) Next i '最初のファイルをコピーをし、DataSheetに貼り付ける Workbooks(OpenFileName(1)).Worksheets("元帳").Cells.Copy _ Destination:=Workbooks("在庫表BETA.xls").Worksheets("DataSheet").Range("A1") 上の部分で『インデックスが有効範囲にありません。(Error 9)』の エラーが発生してしまい、困っております。 また、該当箇所をコメントアウトしても『2個目以降のファイルを貼り付ける』の箇所でも同様のエラーが発生してしまいます。 無知な私ですが、宜しくお願い致します。

  • mot-o
  • お礼率100% (1/1)

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub try() Dim OpenFileName As Variant Dim WB_Name As Variant '複数のブック巣を選択 OpenFileName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls", _ MultiSelect:=True) WB_Name = Split(OpenFileName(1), "\") Debug.Print OpenFileName(1), WB_Name(UBound(WB_Name)) End Sub イミディエイトウインドウで違いがわかるかも。

mot-o
質問者

お礼

n-jun殿 有難う御座います。 OpenFileNameはパスを含むために、エラーが出てしまったのですね。 助かりました、有難う御座います。

関連するQ&A

  • EXCEL VBA 別ブックから貼り付け

    お世話になります。 A、Bという2つのブックがあります。 A.xls データファイル B.xls 処理実行ファイル Bブックを開いてSheet1に置いてあるボタンを押すとファイル洗濯ダイヤログが出てきて、そこで指定したBブックをsrtPathに格納(シートは1つだけ)のBブックのA1から全データをAブックのSheet1に貼り付けたいのです。 下記VBAを書いてみましたがエラーになってうまく動きません。 Workbooks(strPath).Range("A1").Copy ActiveWorkbooks.Worksheets("Sheet1").Range("A1").PasteSpecial どなたが解決方法をご教授いただけませんでしょうか。 よろしくお願い致します。

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

  • コピー後に値のみ貼り付け エクセル、VBAの記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

  • VBAで別ブックからの貼付

    XP、EXCEL2007を使用しています。 元ファイル(A)からVBAで他のブック(B)を開き、A~CK列データをコピー後 ファイル(A)のA~CK列に貼り付けるコードを作りました。 しかし下記の★がついている2行がエラーでうまくいきません。 改善するにはどうすれば良いかご教授下さい。 色々調べながらくっつけたコードですので、 だいぶ問題があると思います。 エラーコードは 「オートーメーションエラーです。」 「致命的なエラーです。」 Sub DATEOPEN() Dim OpenFileName As Variant With CreateObject("WScript.Shell") .CurrentDirectory = "\\Landisk\disk\テスト\" End With OpenFileName = Application.GetOpenFilename("xlsファイル (*.xls),*.xls", 1, "ファイルを選択") If OpenFileName <> "False" Then If Trim(Dir(OpenFileName)) = "" Then Call MsgBox("ファイルが見つかりません", vbOKOnly, "確認") Else Workbooks.Open OpenFileName ★ActiveSheet.Range("A:CK").Copy _ ★ThisWorkbook.Worksheets("データ貼付").Range("A:CK") ActiveWorkbook.Close Range("A:CK").Select ActiveSheet.Paste ActiveWorkbook.Saved = True Application.CutCopyMode = False End If End If End Sub

  • Excel VBAで異なるファイル間のコピー

    異なるファイル間で値のみをコピーしたいです。下記の様な感じです。 hoge1.xlsのA1からA10のセルの値のみをhoge2.xlsのB1からB10へコピーする。 以下の様に書いてみたのですが、数式がコピーされてしまいます。 VBAをやったことがなく、今ネットで30分ほど見て書いてみたので 根本的に理解していません。簡単な書き方を教えていただきたいです。 Sub test() Dim Fname As String Fname = "hoge1.xls" Workbooks.Open Filename:=Fname, ReadOnly:=True Dim range1 As Range Set range1 = Worksheets("Sheet1").Range("A1:A10") range1.Copy Destination:=Workbooks("hoge2.xls").Worksheets("Sheet1").Range("B1:B10") End Sub また、ファイルを開いたり閉じたりは必要なのでしょうか? Workbooks.Open Filename:=Fname, ReadOnly:=True を書かずに、いきなり Set range1 = Workbooks("hoge1.xls").Worksheets("Sheet1").Range("A1:A10") はダメなのでしょうか?? よろしくお願いします。

  • EXCEL VBAで、PasteSpecialと Destinationの組み合わせ方法?

    ここで教えていただいたマクロで ActiveSheet.Paste Destination:=Workbooks(\"book1.xls\").Worksheets(\"Sheet1\").Range(\"A1\") のペースト部分を書式を除きたいので PasteSpecial Paste:=xlFormulas でやりたいのですが、どう組み合わせたらいいのかわかりませんでした。 おしえていただけませんでしょうか?

  • エクセルVBAでエラー、Changeの使い方が×?

    エクセルVBAでBOOK1のsheet1とsheet2とsheet3があり、 sheet1とsheet2の全ての情報をsheet3にコピーしてまとめるようにしました。 マクロを実行するには、Visual Basicを開いてF5を押しています。 それをsheet1かsheet2の中身の一部分でも変更すると そのときに自動的にマクロが実行されるようにしたいです。 sheet1とsheet2とsheet3に Private Sub Worksheet_Change(ByVal Target As Range) Call マクロ() End Sub を入れ、 標準モジュールに Sub マクロ() Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _ Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50") Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _ Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150") Dim UsedCell As Range Dim Max_Row, RowCount As Integer Set UsedCell = ActiveSheet.UsedRange Max_Row = UsedCell.Cells(UsedCell.Count).Row Application.ScreenUpdating = False For RowCount = Max_Row To 1 Step -1 If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then Rows(RowCount).Delete End If Next Application.ScreenUpdating = True End Sub をやって、sheet1かsheet2のセルを変更すると エクセルが固まってしまいます。 デバックでは最初の Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _ Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50") がよくないようです。 書き方が間違っているのでしょうか?

  • エクセルVBA 違うbookのフォームにデータを

    ひとつのエクセルに BOOK1,2 を 起こして BOOK1 から BOOK2 の 自作フォームの テキストに 値は 送り込めないのでしょうか? シートのセルと ボタンは 可能なのですが・・・ Workbooks("Book2.xlsm").Worksheets("Sheet1").Range("A1:a4").Copy Workbooks("test.xlsm").Worksheets("Sheet2").Range("A1:a4").PasteSpecial Workbooks("test.xlsm").Worksheets("Sheet2").opb2.Value = True フォームには何か書き方が有るのでしょうか

専門家に質問してみよう