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

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

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

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

マクロ

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

Q&A

解決済

3回答

4557閲覧

VBA マクロを使用してブックからブックに転記する方法

icecleam

総合スコア46

VBA

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

マクロ

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

0グッド

0クリップ

投稿2020/09/15 12:57

編集2020/09/15 13:41

エクセルのマクロを使用して、以下の画像のようにブックからブックへ転記をしたいです。
その時、転記元のエクセルファイル(拡張子はxls)が格納されているフォルダを指定してエクセルファイルに「更新」というシートがあるときだけ転記を実行したいです。

以下のソースではフォルダを指定して、そのフォルダ内のファイル名を転記するところまで実装(画像のような転記先のセルの場所の指定はできていません)しているのですが、そのあとで詰まってしまったので教えていただきたいです。

すみませんが、よろしくお願いします。。

VBA

1Sub Macro() 2 3Dim buf As String, cnt As Long 4 Const Path As String = "ここでフォルダのパスを指定" 5 buf = Dir(Path & "*.xls") 6 Do While buf <> "" 7 cnt = cnt + 1 8 Cells(cnt, 1) = buf 9 buf = Dir() 10 Loop 11 12End Sub 13

転記元
転記元

転記先
転記先

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

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

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

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

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

coco_bauer

2020/09/15 13:29

質問のコードを実行すると、開いているブック(天気先)のA列に、指定したフォルダーパスにあるファイルのファイル名が順に入るように思われますが、質問の転記先の画像では、A2:A13に"ファイル名1"が入っています。 『以下のソースではフォルダを指定して、そのフォルダ内のファイル名を転記するところまで実装している』と書かれていますが、転記先の画像と矛盾していませんか?
icecleam

2020/09/15 13:39

すみません、『以下のソースではフォルダを指定して、そのフォルダ内のファイル名を転記するところまで実装している』とありますが転記先のセルの指定まではうまくできておらず、画像通りの実装とはなっておりません。 確かに分かりづらいですね、修正しておきます。 ご指摘ありがとうございます
guest

回答3

0

そんな感じです。
ただ、

VBA

1Set wb = xls.Workbooks.Open(Path & strFile)

の前にファイルがExcel形式(拡張子が.xlsもしくは.xlsx)であることのチェックが必要なのと、

VBA

1For s = 1 To wb.Worksheets.Count

のsはシート番号なので、snの方がわかりやすいかな、と思います。

投稿2020/09/15 20:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kuma_kuma_

2020/09/15 21:08

>buf = Dir(Path & "*.xls") 元ソースより.xlsもしくは.xlsxどちらでも良いと判断しました。 人のソースのあら探ししていないで、きちんとした回答をなさったほうがよろしいかとおもいますが?
guest

0

ベストアンサー

こんな感じでしょうか?

ソースコード

vba

1Sub sample1() 2 3 Dim lngRowsNo As Long ' 書きこむ位置 4 Dim lngSheetIndex As Long ' シートの番号 5 Dim strFile As String ' Excelファイルの場所 6 Dim xlsAcq As New Excel.Application ' 取得側Excel 7 Dim wbAcq As Workbook ' 取得側Excelブック 8 Dim wsAcq As Worksheet ' 取得側Excelシート 9 Dim wsSet As Worksheet ' 設定側Excelシート 10 Const strPath As String = "ここでフォルダのパスを指定" 11 Set wsSet = ActiveSheet 12 13 strFile = Dir(strPath & "*.xls") 14 lngRowsNo = 1 15 Do Until strFile = "" 16 '----- Excelブックを開く 17 Set wbAcq = xlsAcq.Workbooks.Open(strPath & strFile) 18 19 '----- シートを検索 20 For lngSheetIndex = 1 To wbAcq.Worksheets.Count 21 '----- 「更新」シートを検索 22 If wbAcq.Worksheets(lngSheetIndex).Name = "更新" Then 23 '----- 「更新」シートを変数へ登録 24 Set wsAcq = xlsAcq.Worksheets(lngSheetIndex) 25 '----- 「更新」シートの内容を現在のシートにコピー(自由に変更して下さい) 26 wsSet.Cells(lngRowsNo, 1) = wsAcq.Cells(1, 1) 27 '----- 書きこむ位置移動 28 lngRowsNo = lngRowsNo + 1 29 '----- 検索の終了 30 Exit For 31 End If 32 Next lngSheetIndex 33 34 '----- シート参照の解放 35 Set wsAcq = Nothing 36 '----- ブックを閉じる 37 wbAcq.Close Savechanges:=False 38 '----- 次のファイルへ 39 strFile = Dir() 40 Loop 41 42 '----- Excelへの参照の解放 43 Set xlsAcq = Nothing 44 45End Sub 46 47

投稿2020/09/15 20:20

編集2020/09/15 21:05
kuma_kuma_

総合スコア2506

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

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

0

転記元セルと転記先セルを指定することで実現できると思います。

VBA

1Workbooks("転記先ブック名").Worksheet("転記先シート名").Cells(1,1)=Workbooks("転記元ブック名").Worksheet("転記元ブック名").Cells(1,1)

ブック名およびシート名は変数に格納すると効率が良くなります。
あと転記元ブックに「更新」シートが存在しない場合はスキップする処理も必要ですね。

投稿2020/09/15 20:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問