[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『あるフォルダにある値を、別ブックに転記して集計するマクロ』(でコパン)
VBA初心者です。複数シートの値を、別ブックに転記していくマクロを作りたいです。
フォルダの中にある、.xlsxファイルがなくなるまでループしたいです。
よろしくお願いいたします。
Sub tenki()
Dim myPath As String, myBook As String
'mybookが空白になるまで続ける Do Until myBook = ""
    myPath = "C:\Users\Manager\Documents\"
    myBook = myPath & "*.xlsx"
Dim OpenFile As Workbook
'i は1づつ増えていく Dim i As Long i = i + 1
Set OpenFile = Workbooks.Open(myBook)
        'mybookのsheet1のC7セルを、myPath" & "転記.xlsmのA"i"セルにペースト
         Workbooks(myBook).Sheets("sheet1").Range(C7) = Workbooks("myPath" & "転記.xlsm").Sheets("Sheet1").Range("A" & 1)
         'mybookのsheet1のC7セルを、myPath" & "転記.xlsmのA"i"セルにペースト
         Workbooks(myBook).Sheets("sheet1").Range(S1) = Workbooks("myPath" & "転記.xlsm").Sheets("Sheet1").Range("B" & 1)
         'myBookの名前を、C"i"セルにペースト
         myBook = Workbooks("myPath" & "検証.xlsm").Sheets("Sheet1").Range("C" & 1)
    Workbooks(myBook).Close SaveChanges:=False '保存せず閉じる
     myBook = Dir
Loop
End Sub
< 使用 Excel:unknown、使用 OS:unknown >
さしあたって、↓は修正すべきでしょうが…
myBook = myPath & "*.xlsx" Workbooks(myBook)〜
 Workbooks("myPath" & "転記.xlsm")〜
(もこな2) 2021/01/26(火) 20:13
↓コメント間違ってますよ
 'mybookのsheet1のC7セルを、myPath" & "転記.xlsmのA"i"セルにペースト
  Workbooks(myBook).Sheets("sheet1").Range(S1) = Workbooks("myPath" & "転記.xlsm").Sheets("Sheet1").Range("B" & 1)
↓少なくとも左右逆ですよ
 'myBookの名前を、C"i"セルにペースト
  myBook = Workbooks("myPath" & "検証.xlsm").Sheets("Sheet1").Range("C" & 1)
(もこな2) 2021/01/26(火) 21:00
 myBook = myPath & "*.xlsx"
 Workbooks(myBook)〜
 Workbooks("myPath" & "転記.xlsm")〜
こちらは、フォルダ内にある「・xlsm」を探して全て処理することをしたく記述いたしました
(でコパン) 2021/01/26(火) 21:03
ちなみに、「myBook」の初期値は""ですよ。
↓なにか忘れていませんか?
Do Until myBook = "" myBook = Dir Loop
(もこな2) 2021/01/26(火) 21:34
■1
ステップ実行していれば容易に気づけたと思いますが、↓のように「myBook」に何も代入しなければ、初期値の「""」のままです。
そして、ループ処理の【前】にbufが「""」であればループ終了となっているのですから、ループ部分は一度も実行されないですよね。
    Sub 実験01()
        Dim myBook As String
        Do Until myBook = ""
            myBook = Dir()
        Loop
    End Sub
なので、判定するまえに「myBook」の代入がないとおかしいです。
■2
myPath = "C:\Users\Manager\Documents\" myBook = myPath & "*.xlsx"
↑のように記述した場合、結局「myBook」の中には「"C:\Users\Manager\Documents\*.xls"」という文字列が格納されます。
そのあとに↓のような記述になっていますが、Openメソッドでファイル名を含む、ファイルパスにワイルドカードは使えませんからエラーになります。
 Workbooks.Open("C:\Users\Manager\Documents\*.xls")
■3
myBook = Dir
↑のように書いてますが、ここもおかしいです。
たしかに↓のように【引数を省略して】書けば、【前回と同じ条件】でDir関数を実行というような意味になりますが、提示のコードでは1回もDir関数を実行してないのですから、前回と同じもへったくれもありません。
myBook = Dir()
さらに、今回のケースでは↑のように()を付けないとダメです。
(そもそも1回目のほうは、引数を省略しては駄目です)
■4
    myPath = "C:\Users\Manager\Documents\" 
    myBook = myPath & "*.xlsx"
 ★ Workbooks(myBook)〜
↑のように書いた場合、★の部分は「C:\Users\Manager\Documents\*.xlsx」という【名前】のブックという意味になります。
そんなブックないですよね?
■5
 ★ Workbooks("myPath" & "転記.xlsm")〜
↑のように書いた場合、★の部分は「myPath転記.xlsm」という【名前】のブックという意味になります。
そんな名前のブックがあるのですか?
■6
 Do Until myBook = ""
    Dim OpenFile As Workbook
    Dim i As Long
 Loop
↑のようにループ処理の中に変数の宣言(定義)があるのは適切ではありません。
修正をすることをお勧めします。
■7
↓について「ペースト」という表現はともかくとしてVBAの世界では代入(入力)する場合、右から左へ行くルールです。
 'myBookの名前を、C"i"セルにペースト
  myBook = Workbooks("myPath" & "検証.xlsm").Sheets("Sheet1").Range("C1").Value
したがって、↑のように書いた場合「myBook」という変数に「myPath転記.xlsm」という【ブック】の「Sheet1」というシートの「C1」セルの値を代入するという意味になってます
「myPath転記.xlsm」という【ブック】の「Sheet1」というシートの「C1」セルに、myBook」という変数の中身を書き込むならば↓のようになります。
   Workbooks("myPath検証.xlsm").Sheets("Sheet1").Range("C1").Value = myBook
長くなったので、一旦切ります。
(もこな2) 2021/01/26(火) 23:33
 〜Range(C7)   、  〜Range(S1)
         ^^                ^^
http://officetanaka.net/excel/vba/beginner/06.htm
■9
以上を踏まえて修正するとこんな感じだとおもいます。
    Option Explicit
    Sub tenki_修正()
        Dim myPath As String, myBook As String
        Dim OpenFile As Workbook
        Dim i As Long
        myPath = "C:\Users\Manager\Documents\"
        myBook = Dir(myPath & "*.xlsx") '←■3の説明を参照
        'mybookが空白になるまで続ける
        Do Until myBook = ""
            'i は1づつ増えていく
            i = i + 1
            Set OpenFile = Workbooks.Open(myPath & myBook) '←■2の説明を参照
            'mybookのsheet1のC7セルを、myPath" & "転記.xlsmのA"i"セルにペースト(■7の説明を参照)
            Workbooks("転記.xlsm").Sheets("Sheet1").Range("A" & i).Value = OpenFile.Sheets("sheet1").Range("C7").Value
            'mybookのsheet1の【S1】セルを、myPath" & "転記.xlsmの【B】"i"セルにペースト(■7の説明を参照)
            Workbooks("転記.xlsm").Sheets("Sheet1").Range("B" & i).Value = OpenFile.Sheets("sheet1").Range("S1").Value
            'myBookの名前を、C"i"セルにペースト(■7の説明を参照)
            Workbooks("転記.xlsm").Sheets("Sheet1").Range("C" & i).Value = myBook
            'Workbooks("転記.xlsm").Sheets("Sheet1").Range("C" & i).Value = OpenFile.name '←でもOK
            OpenFile.Close SaveChanges:=False '←修正
            myBook = Dir() '←■3の説明を参照
        Loop
    End Sub
(もこな2) 2021/01/27(水) 08:29
    Sub さんぷる()
        Dim フォルダパス As String, ブック名 As String
        Dim 出力行 As Long
        フォルダパス = "C:\Users\Manager\Documents\"
        ブック名 = Dir(フォルダパス & "*.xlsx")
        Do Until ブック名 = ""
            With Workbooks.Open(フォルダパス & ブック名)
                出力行 = 出力行 + 1
                Workbooks("転記.xlsm").Sheets("Sheet1").Range("A" & 出力行).Value = .Sheets("sheet1").Range("C7").Value
                Workbooks("転記.xlsm").Sheets("Sheet1").Range("B" & 出力行).Value = .Sheets("sheet1").Range("S1").Value
                Workbooks("転記.xlsm").Sheets("Sheet1").Range("C" & 出力行).Value = .Name
                .Close SaveChanges:=False
            End With
            ブック名 = Dir()
        Loop
    End Sub
(もこな2) 2021/01/28(木) 07:45
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.