[[20181018190612]] 『指定した2つのファイルを1つのファイルにまとめ』(nini) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定した2つのファイルを1つのファイルにまとめたい』(nini)

初めまして

いろいろ調べたのですがどうしてもうまくいきません。

やりたいことは、2つのフォルダにあるファイルのうちから、それぞれファイル名を指定して開き、1つにまとめることを、作業用の別ファイルから制御したいです。

(EX)
フォルダ1には1、2、3…というファイル
フォルダAにはA、B、C…というファイルがあり、

作業用ファイルには

フォルダ1のフルパス⇒F1
フォルダ1内のファイル名⇒F2
フォルダAのフルパス⇒F3
フォルダA内のファイル名⇒F4
を指定するセルがあります。

また、作業用ファイルのA1に、
1、と入れると、フォルダ1内のファイル1、フォルダA内のファイルA
2、と入れると フォルダ1内のファイル2、フォルダA内のファイルB
と、2フォルダのペアファイルが順繰り変わるよう、LOOKUP関数を使って
指定しています。

で、作業用ファイルのマクロを走らせたら、
A1の値が1なら
フォルダ1のファイル1を開いて、
フォルダAのファイルAを開いて、
ファイルAのシートを全選択し、ファイル1の末尾にまるっと移動
(ファイルAは自動的に閉じますよね)
ファイル1のもともとのシート(1枚のみ)を先頭アクティブにして
ファイル1を上書き保存して閉じる

ネクストで
A1の値が2になり、
フォルダ1のファイル2を開いて…

という制御を行いたいです。

今、For iを使わないで、シート移動部分だけを作っていますが
うまくいきません。

  数字ファイル保存先 = Sheet1.Range("F1").Value

    数字ファイル名 = Sheet1.Range("F2").Value
    ABCファイル保存先 = Sheet1.Range("F3").Value
    ABCファイル名 = Sheet1.Range("F4").Value

    Workbooks.Open Filename:=数字ファイル保存先 & 数字ファイル名 & ".xlsx"
    Workbooks.Open Filename:=ABCファイル保存先 & ABCファイル名 & ".xlsx"
     Worksheets.Move Before:= _
        Workbooks(数字ファイル名).Sheets(2)

2つのファイルが開くところまではいくのですが、肝心のワークシートを移動するところがうまく動きません…
移動後に数字ファイルも上書き保存で閉じるところまでうごかして
next iと、したいのですが、、ラストのシート移動の部分の記述を
教えていただけないでしょうか?

ファイルは20ペアくらいあるので、1つ1つ指定するのは
避けたくて、セルの値にファイル名を入れて参照、という風に
しています。。。

お忙しいところすみませんが、よろしくお願い申し上げます。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


変数がどのように宣言されて、何が格納されているのか確認したいので、
Sub ○○()〜End Subまで提示してもらえないでしょうか。

いまのだと、実コードの一部なのか、疑似コードなのかわからないです。
(もこな2) 2018/10/18(木) 19:45


もこな2様返信ありがとうございます。

すみません、失礼しました!

宣言も間違ってる気がするのですが…

全部Stringにしてしまってます。
WorkBookにしたら、なんだかよくわからいエラーが出てしまって
もっと手前で躓いてしまったので…

宣言に使ってる名前?やフォルダ名、ファイル名は、
具体的な仕事内容になっているので変えました。
指定セルの位置とかも違います。

それぞれの変数を入れるセルの中には、

パスの方は
D:\テスト\数字フォルダ\

のような形で、フルパスのお尻を¥マークで閉じてます。

ファイル名は拡張子なしのファイル名が入ってます。
for i は、まだ記述してません。。
とりあえずシート移動がうまくいったら記述しようと思って、
けつまずきました(;_;)

すみません。過去質問とかも見たのですが、
色々いじってもうまく動かず、新規で質問させて
いただいてしまいました。

Sub 一つのファイルにまとめる()

    Dim 数字ファイル保存先 As String
    Dim 数字ファイル名 As String
    Dim ABCファイル保存先 As String
    Dim ABCファイル名 As String

  数字ファイル保存先 = Sheet1.range("F1").Value
  数字ファイル名 = Sheet1.Range("F2").Value

    ABCファイル保存先 = Sheet1.Range("F3").Value
    ABCファイル名 = Sheet1.Range("F4").Value
    Workbooks.Open Filename:=数字ファイル保存先 & 数字ファイル名 & ".xlsx"
    Workbooks.Open Filename:=ABCファイル保存先 & ABCファイル名 & ".xlsx"
     Worksheets.Move Before:= _
        Workbooks(数字ファイル名).Sheets(2)

End Sub

(nini) 2018/10/18(木) 22:22


編集がかぶったけどそのまま。

文言訂正兼ねて追加投稿。

とりあえず、データ元のブック、移動先のブック、ツール用のブックと3つのブックが絡むので、どのブックなのかちゃんと記述(修飾)すべきです。

同様に、(どのブックに属する)どのシートなのかも明示すべきです。

また、「For i」を使わないで、といっていますが、おそらく「For〜Next」ステートメントの間違いでしょう。
(「VBA For Next」ググればいくらでも説明してるサイトがあるので。説明は割愛します。)

このほか、
>ファイルAのシートを全選択し、ファイル1の末尾にまるっと移動
出来ないとはおもいませんが、個人的には作業グループにして云々って操作好きじゃないので、1シートずつ”コピー”して用が済んだら閉じたらどうでしょうか?

    Sub たたき台()
        Dim srcWB As Workbook
        Dim dstWB As Workbook
        Dim i As Long

        With ThisWorkbook.Worksheets("Sheet1")
            Set srcWB = Workbooks.Open(.Range("F1").Value & "\" & .Range("F2").Value)
            Set dstWB = Workbooks.Open(.Range("F3").Value & "\" & .Range("F4").Value)
        End With

        With srcWB
            For i = 1 To .Worksheets.Count
                .Worksheets(i).Copy After:=dstWB.Worksheets(dstWB.Worksheets.Count)
            Next i
            .Close
        End With

    End Sub
(もこな2) 2018/10/18(木) 22:27

もこな2様
早速ありがとうございます

そうです、For〜Nextステートメントと言いたかったんです、
色々分かってなくてすみません(T_T

たたき台ありがとうございます!
宣言等についても、詳しく説明してくださり、どうもありがとうございました。

こちらを参考に、明日VBA部分を修正してみます!!
大変助かりました!
ありがとうございました。

(nini) 2018/10/18(木) 22:54


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.