質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

2回答

4628閲覧

エクセルVBAでのブック間ペーストができない

roloc2909

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

1クリップ

投稿2020/04/09 09:08

前提・実現したいこと

エクセル(VBA)で集計表を作成しています。

デスクトップにある集計フォルダ内にあるエクセルファイル(.xlsx)の特定のセルをコピーしてマクロのあるブックにペーストをしたいです。

発生している問題・エラーメッセージ

実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。

該当のソースコード

VBA

1 2Sub 集計() 3 4'Application.ScreenUpdating = False 5'ActiveSheet.Range("B3:B15") = "" 6 7Dim Filename As String 8Dim IsBookOpen As Boolean 9Dim OpenBook As Workbook 10 11With CreateObject("WScript.Shell") 12 .CurrentDirectory = "C:\Desktop\集計\" 13End With 14 15 16Filename = Dir("*.xlsx") 17 18Do While Filename <> "" 'フォルダ内のファイルをループ 19 i = 1 20 If IsBookOpen = False Then 21 22 Workbooks.Open (Filename), UpdateLinks:=1 23 24 ActiveWorkbook.Worksheets("10月").Range("G1").Copy 25 ThisWorkbook.Worksheets("10月").Activate 26 Range(2, 3).PasteSpecial Paste:=xlPasteValues 27 Workbooks(Filename).Close SaveChanges:=False 'True 28 29 End If 30 31i = i + 1 32 33Filename = Dir() 34 35Loop 36 37End Sub 38

試したこと

おそらくペーストができていないので
18行目のペーストの特性やブック・シートの指定方法を変えましたが
開いたブックのコピーができた段階でエラーが出ます。

補足情報(FW/ツールのバージョンなど)

office365

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Range(2, 3).PasteSpecial Paste:=xlPasteValues
ここでエラーになるのですよね。

Range("C2").PasteSpecial Paste:=xlPasteValues
とするか、
Cells(2,3).PasteSpecial Paste:=xlPasteValues
としてください。


蛇足ですが、使用していない変数があったり、無駄な処理が多いのが気になるので、リファクタリングしてみました。

vba

1Sub 集計() 2 Dim Filename As String 3 Dim OpenBook As Workbook 4 Dim PasteCell As Range 5 Set PasteCell = ThisWorkbook.Worksheets("10月").Cells(2, 3) 6 7 Const FolderPath = "C:\Desktop\集計\" 8 Filename = Dir(FolderPath & "*.xlsx") 9 10 Do While Filename <> "" 11 Set OpenBook = Workbooks.Open(FolderPath & Filename) 12 13 PassteCell.Value = OpenBook.Worksheets("10月").Range("G1").Value 14 OpenBook.Close SaveChanges:=False 15 16 Set PasteCell = PasteCell.Offset(1) '次のセル 17 Filename = Dir() 18 Loop 19 20End Sub

投稿2020/04/09 10:07

編集2020/04/09 13:04
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roloc2909

2020/04/09 12:59

ありがとうございます、Cellsにしたらできました。 また、頂いたVBAでやったところ Set OpenBook = Workbooks.Open(Filename) でエラーが出ました・・
hatena19

2020/04/09 13:04

あっ、コード間違ってました。 回答のコードを修正しました。
roloc2909

2020/04/10 10:16

ありがとうございます。 ただ他の方のが今後の応用のイメージがわきやすかったのでベストは今回ごめんなさい。。。
guest

0

ベストアンサー

オブジェクト定義のエラーです。

Rangeプロパティの引数の指定方法が間違っています。
つまり存在しないセルを指定しているということです。
Rangeプロパティは数字のみでは、セルを認識しません。
行番号、列番号で指定するのは、Cellsプロパティです。

↓参考サイト
Rangeプロパティ 

他にも

If IsBookOpen = False Then

変数「IsBookOpen」がTrueになりようがないし、
おかしな記述が多いです。
試行錯誤の中で消しちゃったのでしょうか?

ExcelVBA

1Sub test() 2 Dim buf As String 3 Dim wb As Workbook 4 Dim i As Long 5 Const sDirPath As String = "C:\Desktop\集計*" 6 7 8 buf = Dir(sDirPath & ".xlsx") 9 Do While Len(buf) > 0 10 'ファイルをすでに開いているか確認 11 For Each wb In Workbooks 12 If buf = wb.Name Then Exit For 13 Next 14 15 '開いてなければ開く 16 If wb Is Nothing Then 17 Set wb = Workbooks.Open(sDirPath & buf) 18 End If 19 20 'コピペ 21 wb.Worksheets("10月").Range("G1").Copy 22 ThisWorkbook.Worksheets("10月").Cells(i, 3).PasteSpecial xlPasteValues 23 24 '開いたファイルを閉じる 25 wb.Close False 26 27 buf = Dir() '次のファイル 28 i = i + 1 '次の行番号 29 Loop 30End Sub

投稿2020/04/09 10:46

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roloc2909

2020/04/09 12:56

ありがとうございます、間違いを直したらできました。 まえあ、頂いたVBAでやったところ Set wb = Workbooks.Open(sDirPath & buf) で同じエラーが出てしまいました。
mattuwan

2020/04/09 13:24

Const sDirPath As String = "C:\Users\hiraigumit\Desktop\集計\" buf = Dir(sDirPath & "*.xlsx") 失礼しました。上に修正願います。
roloc2909

2020/04/10 10:16

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問