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

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

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

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

Q&A

解決済

2回答

1179閲覧

VBAで複数のエクセルファイルを開いて、情報を集約(転記)することをしたいです

Tarooo

総合スコア8

VBA

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

0グッド

1クリップ

投稿2019/03/26 07:44

簡単なVBAは作ったことがありますが、基本的には初心者です。
グーグル検索、参考書を見ながらやっています。

・やろうとしていたこと。
① 個社別のエクセルファイル名を取得。 ←これはなんとか出来ました
② そのファイルを開く。 ←ここがうまくいきません
③ 特定のセルの情報を取得。

・詳細
用意しているエクセルファイルが2つ。
(A)とりまとめ用のエクセルファイル
(B)個社別の情報が入力されているエクセルファイルが複数(個社別分)
このファイルを「20190322」というフォルダに保存しています(作成対象一覧のB3セルに「20190322」と入力)

Aのファイルには2つのシートがあります。
(1)シート名:ファイル名一覧表
Bのファイル名をマクロで取得してくる ← これはなんとか出来ました
(2)シート名:作成対象一覧
2のシートに記載のファイル名と一致するファイルを開いて必要な情報(セル2つ分)をもってきたい

BのファイルのB12セル、H12セルに記載の情報を
AのファイルのA6セル以降とB6セル以降に転記したいと考えていますが、
「実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」
というエラーメッセージが表示されます。

(最終的には、この転記された情報を社内申請用のテンプレートに転記していきたいのですが
、まだそこまでいけません…)

○ 作成したプロシージャ
Sub ファイル名一覧表()
Application.ScreenUpdating = False
Dim i As Long, bookname As String
With Sheets("ファイル名一覧表")
.Columns(1).ClearContents
bookname = Dir(ThisWorkbook.Path & "" & _
Sheets("作成対象一覧").Range("B3") & "*")
Do While bookname <> ""
i = i + 1
.Cells(i, 1) = bookname
bookname = Dir()
Loop
End With
End Sub

Public Sub 相対ヘッダー用情報一覧()
Application.ScreenUpdating = False
Dim i As Long, r As Long
Dim f As Worksheet
Set f = Sheets("ファイル名一覧表")
With Sheets("作成対象一覧")
.Range("A5").CurrentRegion.Offset(1, 0).ClearContents
For i = 1 To f.Cells(Rows.Count, 1).End(xlUp).Row
r = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Workbooks.Open ThisWorkbook.Path & "" & _
.Range("B3") & f.Cells(i, 1)
.Cells(r, 1) = Range("B12")
.Cells(r, 2) = Range("H12")
ActiveWorkbook.Close savechanges:=False
Next
End With
End Sub

初歩的な問題なのかとも思いますが、何かアドバイスをいただけると助かります。
ご質問の仕方などお作法的な問題もあるかとも思いますが、ご容赦ください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーの原因は、単純にフォルダ名とファイル名の間に""がないためブックが開けていないからだと思います。

その他に指摘するとすれば、開いたブックはアクティブブックになるとは思いますが、アクティブブックやアクティブシートに頼ったコーディングは避けた方がいい、というところでしょうか。

現在のコードではWorkbook.Openの戻り値を取っていませんが、このメソッドは開いたブックを戻り値として返しています。

VBA

1Dim wb As Workbook 2Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & .Range("B3") & "\" & f.Cells(i, 1)) 3 4.Cells(r, 1) = wb.Worksheets(1).Range("B12") 5.Cells(r, 2) = wb.Worksheets(1).Range("H12") 6 7wb.Close savechanges:=False

のように変数に格納したほうが、アクティブなブックやシートの取り違えが起こらず、安定したコードとなります。

参考になれば幸いです。

投稿2019/03/26 09:29

編集2019/03/27 00:16
jawa

総合スコア3013

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

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

Tarooo

2019/03/26 09:52

ありがとうございます!!! 問題なく動きました!感動しました!
guest

0

他のExcelファイルの特定のセルの内容を読み出すだけなら、開かずに読み出すことができます。
詳しくは以下のリンクを参照ください。

ブックを開かないでセルのデータを読む

投稿2019/03/26 08:01

PineMatsu

総合スコア3579

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

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

Tarooo

2019/03/26 08:10

迅速にアドバイスをいただきましてありがとうございます!まずは教えていただいた内容をよく読んでみます。 追加で質問させていただくかもしれません! まずはお礼まで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問