• 締切済み

他ブックから指定範囲をコピー

自分で調べたのですがよく分からないので質問します。 下のように書いたのですが 実行時エラー '424'; オブジェクトがッ必要です。というエラーが出ます。 Private Sub CommandButton3_Click() Dim F_Name As String, myRange As Range F_Name = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If F_Name <> "False" Then Workbooks.Open F_Name With ActiveWorkbook Set myRange = .Worksheets(1).Range("B6:U509") .Saved = True .Close End With With ThisWorkbook myRange.Copy.Worksheets(2).Range ("B6:U509") End With End If Set myRange = Nothing End Sub やりたいことは読み込んだExcelのシート1(または金額というシート)のB6:U509範囲をコピーし 実行したブックのシート2(または金額というシート)のB6:U509範囲に貼り付けたいのです。 よろしくお願いします

みんなの回答

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

>If F_Name <> "False" Then If F_Name <> false Then cancelされたときに返されるのはFalseという文字ではなくfalseという論理値 >myRange.Copy.Worksheets(2).Range ("B6:U509") myRange.Copy Worksheets(2).Range ("B6:U509") copyの次はピリオドではなくSpace (一個の空白) >実行時エラー '424';オブジェクトがッ必要です。というエラーが出ます。 こういう質問はどこでエラーになるかを記述してください。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Copy実行前に元Bookを閉じると失敗しませんか? Copy実行後に閉じればどうでしょうか。 例えば F_Name = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If F_Name <> "False" Then Workbooks.Open F_Name F_Name = Split(F_Name, "\")(UBound(Split(F_Name, "\"))) '★元Book名抽出 With Workbooks(F_Name) '★元Book名で指定 Set myRange = .Worksheets("金額").Range("B6:U509") End With With ThisWorkbook myRange.Copy .Worksheets("金額").Range("B6") End With End If Workbooks(F_Name).Close SaveChanges:=True '★元Bookを閉じる Set myRange = Nothing

関連するQ&A

  • 他のブックでマクロを実行するには?

    以下のマクロを実行すると同一ブック内の他のシートに入力 されますが、これを他のブックのシートに入力されるように するには、具体的にどのようにすればいいのでしょうか? ご教授ください。 ---------------------------------------------------------------- Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = Worksheets("sheet1").Range("B7").Value .Range("F" & LastRow).Value = Worksheets("sheet1").Range("B9").Value .Range("G" & LastRow).Value = Worksheets("sheet1").Range("B11").Value End With End Sub

  • Excel VBA For Each Next構文内の別シートを対象とする方法

    こんにちは。 VBA初心者のものですが教えてください。 「sheet1のC29:U29とsheet2のC31:G31について 1より小さければ小数第2位まで表示する」 の構文を作成したいのですが、 下記の構文ではエラーが出てしまいました。 どのように訂正すればよいでしょうか? ※できればrangeプロパティを使いたいのですが、  cellsプロパティを使わなきゃできませんか? すみませんがご教示をお願いいたします。 Sub test() Dim myrange As Range For Each myrange In Worksheets("sheet1").Range("C29:U29"),Worksheets("sheet2").Range("C31:G31") If myrange.Value < 1 Then myrange.NumberFormatLocal = "0.00" End If Next myrange End Sub

  • エクセル マクロ:チェックボックス コピー

    教えてください。 sheet1にデータがあり sheet2にチェックボックスとコマンドボタンがあります。 チェックボックスにレ点を入れ、コマンドボタンを押すと sheet1の該当する列をコピーして、sheet3に貼り付ける マクロを作ろうと思ってますがうまくいきません。 下記のマクロを使えるように手直ししていただけないでしょうか。 よろしくお願い致します。 Private Sub CommandButton1_Click() Dim myrange As String Dim rmax As Long rmax = Sheets("sheet1").Range("A2").End(xlDown).Row With Sheets("sheet2") If .CheckBox1 Then myrange = myrange & ",$B$1:$B$" & rmax If .CheckBox2 Then myrange = myrange & ",$C$1:$C$" & rmax If .CheckBox3 Then myrange = myrange & ",$D$1:$D$" & rmax End With If myrange = "" Then MsgBox "チェックしてください" Exit Sub End If myrange = "$A$2:$A$" & rmax & myrange Sheets("sheet1").Range(myrange).Copy Sheets("sheet3").Range("A1").PasteSpecial xlPasteValues Application.CutCopyMode = False Sheets("sheet3").Select End Sub

  • Excel マクロ 他ブックのシートの範囲選択した内容を別ブックのシートにコピーする方法

    他ブックのシートの範囲を選択しコピーした内容を、別ブックのシート に貼り付けするマクロを作成しています。 現在の情報であれば、下記のマクロで解決できます。 Sub Test1() Dim myCellall As Range Dim myCellsom As Range Dim myCelluri As Range   Set myCellall = Sheets("すべて").Range("A1") Set myCellsom = Sheets("総務").Range("A1") Set myCelluri = Sheets("売上").Range("A1") With Workbooks.Open("\") .Worksheets("すべて").Range("A1:K17").Copy myCellall .Worksheets("総務").Range("A1:K88").Copy myCellsom .Worksheets("売上").Range("A1:K81").Copy myCelluri .Close False End With End Sub ただ、他ブックのシートのデータは変動するため、行と列の変更を行わなければいけません。行と列の増減があっても、自動的に対応できるマクロを書きたいと思います。 どのようなマクロを追加すればよろしいでしょうか。 よろしくお願いいたします。

  • ブック内に特定名のシートがある場合

    はじめまして、こんにちは。 VBAを最近はじめたばかりの者です。質問が初歩的なもので申し訳ないのですが是非教えてください。 以下を使って、複数ブックの○○というシートから指定セルの内容を抜き出したいと思っています。 ところが、ブックによっては○○というシートが存在しない場合があり、その場合には「インデックスが有効でない」というエラーで動作が止まってしまいます。 ブック内に○○というシートがある場合にのみ動作させるようにするにはどのようにすれば良いのでしょうか。 よろしくお願いします。 Dim wb As Workbook, myRow As Long Dim e As Integer myRow = ThisWorkbook.Worksheets(1).Rows.Count With Application.FileSearch .NewSearch .LookIn = ThisWorkbook.Path .SearchSubFolders = True .FileType = msoFileTypeExcelWorkbooks If .Execute() > 0 Then For i = 1 To .FoundFiles.Count If .FoundFiles(i) <> ThisWorkbook.FullName Then Set wb = Workbooks.Open(.FoundFiles(i), UpdateLinks:=0) Application.ScreenUpdating = False ThisWorkbook.Worksheets(1).Range("A" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F6").Value ThisWorkbook.Worksheets(1).Range("B" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F7").Value ThisWorkbook.Worksheets(1).Range("C" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F8").Value ThisWorkbook.Worksheets(1).Range("D" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("Y6").Value wb.Close False End If Next i Else MsgBox "ファイルがありません。" End If End With End Sub

  • ブックの中の1枚だけ選んで印刷したい

    win7とExcel2007でマクロ作成中の初心者です。 以下、ファイルの中の複数シートを印刷できました。 Private Sub 請求書印刷_Click() Application.ScreenUpdating = False Unload Me 請求書の印刷100 '請求書印刷 Worksheets(1).Select ActiveWindow.DisplayHorizontalScrollBar = False End Sub Sub 請求書の印刷100() ' Dim i As Integer For i = 1 To Worksheets.Count - 8 With Worksheets(i) If .Range("F11").Value <> 0 Then .PageSetup.PrintArea = "$B$1:$U$44" .PrintOut End If End With Next i Worksheets(1).Activate End Sub ------------------------------------ 今度は、同一のファイルから、指定の単一のシートを印刷したいので 以下のコードを実行すると、 Private Sub 単数印刷_Click()' Application.ScreenUpdating = False Unload Me Unload G印刷 Dim i As Integer With 名簿リスト2 For i = 0 To .ListCount - 1 If .Selected(i) Then 請求書の印刷範囲200 ' Worksheets(.list(.ListIndex)).PrintPreview Worksheets(Split(.list(.ListIndex - 0), " ")(1)).PrintPreview ' End If Next i End With ActiveWindow.DisplayHorizontalScrollBar = False GH印刷.Show End Sub Sub 請求書の印刷範囲200() ' ActiveSheet.Unprotect Dim i As Integer For i = 1 To Worksheets.Count - 8 With Worksheets(i) .PageSetup.PrintArea = False '印刷範囲のクリア If .Range("F11").Value <> 0 Then .PageSetup.PrintArea = "$B$1:$T$44" End If End With Next i Worksheets(1).Activate End Sub 以下の行が黄色くなりマクロがエラーとなり停止します。 エラーは 実行時エラー9 インデックスが有効範囲にありません となります。 Worksheets(Split(.list(.ListIndex - 0), " ")(1)).PrintPreview ' これと同様のファイルで試すと何なく1枚だけ印刷できました。 このエラーの原因はなんでしょうか?解決方法を教えてください。

  • マクロ EXCELの範囲をコピーして貼付け2

    【やりたいこと】 エクセルファイル(test.xls)に複数のシートが存在します。 (1)そのエクセルに新しいシートを1つ挿入しシート名を「統合」とつけます。 (2)シート名に「時」という文字が含まれたシートにある表を範囲指定しコピー (3)「統合」シートに貼り付けます。 ※「時」という文字が含まれたシートは複数あります(不特定) 【問題箇所(エラーになっている箇所)・・★】 「時」という文字が含まれたシートは複数枚あるので「統合シート」に貼付ける際 前に貼り付けた続きから貼り付けたいので「統合」シートの最終行を求め、 貼り付けを行っていきたいのですが、最終行を求める箇所でエラーになります。 度々の質問で申し訳ございませんがどなたかご教示頂けないでしょうか。 よろしくお願い致します。 Sub attendanceJoin() Dim MaxRow As Integer Dim wsNewMaxRow As Integer Dim NewWorkSheet As Worksheet Dim ws As Worksheet Workbooks("test.xls").Activate Set NewWorkSheet = Worksheets.Add() '新しいシートを追加 NewWorkSheet.Name = "統合" '新しく追加したシートに「統合」と名前をつける Worksheets("統合").Range("A1").Value = "NO" 'A1のセルに「NO」と入れる For Each ws In Worksheets If ws.Name Like "*時*" Then MaxRow = Worksheets(ws.Name).Range("A4").End(xlDown).Row wsNewMaxRow = Worksheets("統合").Range("A1").End(xlDown).Row '↑★この行でエラー:最終行を求める箇所 With Workbooks("test.xls") .Worksheets(ws.Name).Range("A5:M" & MaxRow).Copy .Worksheets("統合").Range("A" & wsNewMaxRow + 1).PasteSpecial '求めた最終行の次から貼り付けする。 End With End If Next End Sub

  • Excel VBA Rangeについて

    下記のコードは、あるテキストに掲載されていたコードです。 D5に番号を入力すると、F5に文字が表示されるというようなコードです。 下記コードのRange("顧客コード")とは何を意味するのでしょうか? Worksheets("顧客")の意味は分かりますが、私の知識ではRange(" ")の中に入るのは、A1などしか分かりません。 よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Integer, myRange As Range Set myRange = Worksheets("顧客").Range("顧客コード") With Target '変更されたセルがD5だったら If .Row = 5 And .Column = 4 Then '顧客コードの位置を取得 r = Application.WorksheetFunction _ .Match(Target.Value, myRange, 0) 'セルに顧客名を表示 Range("F5") = Worksheets("顧客").Range("B1").Offset(r - 1).Value End If End With End Sub

  • エクセル マクロ:チェックボックス コピー2

    昨日質問し、解決したと思ったのですが、データ量とチェックボックスの数を増やしたら エラーが出てしまいました。解決策を教えてください。 sheet1にはデータがあり行数は25000です。(行数は変動で行数MAXだったりもします) sheet2にはチェックボックス20個とコマンドボタンがあります。 下記のマクロでは17個までチェックしてもコピー出来ましたが、18個目からエラーが出ました。 よろしくお願い致します。 Private Sub CommandButton1_Click() Dim myrange As String Dim rmax As Long rmax = Sheets("sheet1").Range("B1").End(xlDown).Row With Sheets("sheet2") If .CheckBox1 Then myrange = myrange & ",$B$1:$B$" & rmax If .CheckBox2 Then myrange = myrange & ",$C$1:$C$" & rmax If .CheckBox3 Then myrange = myrange & ",$D$1:$D$" & rmax If .CheckBox4 Then myrange = myrange & ",$E$1:$E$" & rmax If .CheckBox5 Then myrange = myrange & ",$F$1:$F$" & rmax If .CheckBox6 Then myrange = myrange & ",$G$1:$G$" & rmax If .CheckBox7 Then myrange = myrange & ",$H$1:$H$" & rmax If .CheckBox8 Then myrange = myrange & ",$I$1:$I$" & rmax If .CheckBox9 Then myrange = myrange & ",$J$1:$J$" & rmax If .CheckBox10 Then myrange = myrange & ",$K$1:$K$" & rmax If .CheckBox11 Then myrange = myrange & ",$L$1:$L$" & rmax If .CheckBox12 Then myrange = myrange & ",$M$1:$M$" & rmax If .CheckBox13 Then myrange = myrange & ",$N$1:$N$" & rmax If .CheckBox14 Then myrange = myrange & ",$O$1:$O$" & rmax If .CheckBox15 Then myrange = myrange & ",$P$1:$P$" & rmax If .CheckBox16 Then myrange = myrange & ",$Q$1:$Q$" & rmax If .CheckBox17 Then myrange = myrange & ",$R$1:$R$" & rmax If .CheckBox18 Then myrange = myrange & ",$S$1:$S$" & rmax If .CheckBox19 Then myrange = myrange & ",$T$1:$T$" & rmax If .CheckBox20 Then myrange = myrange & ",$U$1:$U$" & rmax End With If myrange = "" Then MsgBox "チェックしてください" Exit Sub End If myrange = "$A$1:$A$" & rmax & myrange Sheets("sheet1").Range(myrange).Copy Sheets("sheet3").Range("A1").PasteSpecial xlPasteValues Sheets("sheet3").Select End Sub

  • ExcelVBA データのコピー範囲について

    あけましておめでとうございます。今年もよろしくお願いします。 Sub Test() Dim myTarget As Range, r As Range, f Set myTarget = Sheets("Sheet1"). _    Range("B2", Sheets("Sheet1").Range("B65536").End(xlUp)) For Each r In myTarget  Set f = Sheets("Sheet2").Columns(1). _    Find(r.Value, Sheets("Sheet2").Range("A1"), Lookat:=xlWhole)  If Not f Is Nothing Then    If r.Offset(0, 3).Value <> f.Offset(0, 3).Value Then      f.Resize(1, 4).Copy Destination:= _      Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)    End If  End If Next r End Sub 前回の質問で教えていただいたコードなのですが、現時点では、B列のデータを元にして二つのSheetのデータを比較して別Sheetへコピーしているのですが、そのときに、B列以降の(たとえば、B列からX列まで)データはコピーできますが、A列もコピーしたい時はどうすればよいのかで、悩んでいます。どの様に変更すればよいのでしょうか?

専門家に質問してみよう