[[20200123172029]] 『VBA 複数ファイルで同一シートの複数条件を一括集』(とり) ページの最後に飛ぶ

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

 

『VBA 複数ファイルで同一シートの複数条件を一括集約』(とり)

現在、50人ほどの営業員が個別で持っている「売上」データを1つずつ開き、
データ内にある「ノート」シートから、D列に「済」の入力が、
AB列に納品先の「○○」の入力がある行をフィルター処理し、
「集約用」データにコピペしています。

「集約用」データには、以前の担当者が作ったらしい、
オートフィルターだけ行うVBAがありますが、それ以外は手動です。
この作業をVBAで完全自動化する方法はありますか?

ネットなどで調べて、全てのデータを一括集約する方法を見つけ、
いろいろと思考錯誤をしてみたのですが、初心者の自分では難しく、
こちらに書き込みさせていただきます。
よろしくお願いします。

下記がオートフィルターのコードです。

Sub 検索()

    ActiveWindow.SmallScroll Down:=-25
    Selection.AutoFilter Field:=4, Criteria1:="済"
    Selection.AutoFilter Field:=28, Criteria1:="○○"
    Range("A6").Select
End Sub


「ノート」シートは、「A2」セルに営業の名前があり、
「A5〜AS5」セルには各種項目が、6行目から下に集約に必要な情報が入っています。
そして6行目以下の情報は、営業員によって30〜1000行が使われていて、
その全てのセルに情報が入っているとは限りません。

「集約用」データは、A列には番号がすでに入っており、
B列は抽出したデータの担当営業員の名前を入れる列とし、
「C4〜AU4」には「ノート」シートと同じ順で各種項目が入力されています。

< 使用 Excel:Excel2013、使用 OS:unknown >


■1
提示されたコードを想像込みで整理するとこんな感じです。
    Sub 検索_改()
        Range("A1").AutoFilter Field:=4, Criteria1:="済"
        Range("A1").AutoFilter Field:=28, Criteria1:="○○"
    End Sub

 ※ActiveWindow.SmallScroll、Range("A6").Select は要りません

■2
>いろいろと思考錯誤をしてみた
どのようなことをやってみましたか?
(オートフィルタの部分はわかりましたので、それ以外で試したことを教えて下さい)

■3
たぶん、こんな流れになるとおもいます。

※集約.xlsm にマクロを書いて「集約用」シートにデータを集めるとして

 (1)「リスト」シートのA列にブック名(営業員の名前とか)のリストを作る
 (2)「C:\データ保存フォルダ」みたいに決まった場所に、売上げデータを保存する

 (3) (1)のリストの上から順番に(2)と組み合わせてファイルのフルパスを取得する
 (4) (3)で取得したブックを開く
 (5)開いたブックの「ノート」シートを対象に検索_改を実行して抽出する
 (6)(5)をコピーする
 (7) 集約.xlsmの「集約用」シートの最終行をしらべて、1行下に貼り付ける
 (8) (4)で開いたブックを閉じる

 (9) (3)〜(8)を繰り返す

完全には(特に繰り返す部分は)無理ですが、大部分はマクロの記録で得られたコードを調べれば必要な命令はわかります。
ですので、とりあえず、1つのブックを、開いて、抽出して、コピーして、閉じる という操作をして、マクロの記録で必要な命令をしらべてみてはどうでしょうか?

(もこな2) 2020/01/23(木) 18:34


>もこな2さま、早速の返信ありがとうございます。

>■2ですが、ネットで検索した一括集約の以下コードを基に、フォルダ名やシート名を変更し、
ステップ8の内容を変更すればいいのかと考え、
1)フィルターのコードに変えたが、「実行時エラー'1004' RangeクラスのAutoFilterメゾットが失敗しました。」と出て来た。
2)findを使うのかと思って作ろうとしたが、複数条件に出来ないことに気づいた。
3)If〜のコードかと思って作ろうとしたが、D列とAB列の範囲指定でつまづいた。
という状況です。

まずは、「集約用」シートの書式を考えずにコピペできるようにしたかったので、
>>A列には番号がすでに入っており、B列は抽出したデータの担当営業員の名前を入れる列とし、〜
これは無視しています。

>■3について
下記のコードは拾ってきたものなため、理解しているかと言われれば「否」と即答できる状況です。
なので、明日、自分でもやってみようと思います。


Sub 一括集約()

    'ステップ1|変数定義
    Dim path As String
    Dim cmax1 As Long, cmax2 As Long
    Dim i As Long, j As Long, n As Long
    Dim wb1 As Workbook, wb2 As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet

    Dim fs As Scripting.FileSystemObject
    Dim basefolder As Scripting.Folder
    Dim mysubfiles As Scripting.Files
    Dim mysubfile As Scripting.File

    'ステップ2|集約用エクセルの変数設定
    Set wb1 = ThisWorkbook
    Set ws1 = wb1.Worksheets("集計")
    n = 0

    'ステップ3|FileSystemObjectの変数設定
    path = ThisWorkbook.path & "\売上ノート"
    Set fs = New Scripting.FileSystemObject
    Set basefolder = fs.GetFolder(path)
    Set mysubfiles = basefolder.Files

    'ステップ4|指定フォルダ内のファイルを繰り返しを読み込む
    For Each mysubfile In mysubfiles

        'ステップ5|ファイル拡張子を取得し
        'エクセル(xls, xlsx, xlsm)のみ選択する
        If fs.GetExtensionName(mysubfile) Like "[xls]*" Then

            'ステップ6|エクセルファイルを開く
            Application.DisplayAlerts = False
            Workbooks.Open Filename:=mysubfile.path
            Application.DisplayAlerts = True

            'ステップ7|開いたエクセルファイル(子エクセル)の変数設定
            Set wb2 = ActiveWorkbook
            Set ws2 = wb2.Worksheets("ノート")

            'ステップ8|子エクセルの最終行の値を取得
           ※元は cmax2 = ws2.Range("A1048576").End(xlUp).Rowがありました。
             Range("A1").AutoFilter Field:=4, Criteria1:="済"
          Range("A1").AutoFilter Field:=28, Criteria1:="○○"
       Range("A6").Select

            'ステップ9|子エクセルのデータを集約用エクセルに書き込む
            For j = 2 To cmax2
                cmax1 = ws1.Range("A1048576").End(xlUp).Row + 1
                ws1.Range("A" & cmax1 & ":E" & cmax1).Value = ws2.Range("A" & i & ":E" & i).Value
            Next

            'ステップ10|子エクセルを閉じる
            Application.DisplayAlerts = False
            wb2.Close
            Application.DisplayAlerts = True
            Set wb2 = Nothing

        End If

    Next

End Sub

(とり) 2020/01/23(木) 19:59


■4
>1)フィルターのコードに変えたが、「実行時エラー'1004' RangeクラスのAutoFilterメゾットが失敗しました。」と出て来た。
提示されたコードだと「Selection.AutoFilte」ってなっているので、そのときに選択されている範囲が表の外だったりして、オートフィルタが設定できなかったんでしょうね。

■5
>2)findを使うのかと思って作ろうとしたが、複数条件に出来ないことに気づいた。
Find(FindNext)メソッドを使って複数条件を指定できないわけではないです。

 (1) 1番目の条件に合うセルを全部検索して、そのセルが含まれる行を抽出
 (2) (1)のうち(2)番目の条件にあうセルを全部検索して、そのセルが含まれる列を抽出
  ・
  ・

としていけば可能ではあります。(複雑になりますからお勧めしませんが)

■6
>3)If〜のコードかと思って作ろうとしたが、D列とAB列の範囲指定でつまづいた。

    Sub 実験01()
        Dim 行 As Long
        Dim 出力行 As Long
        Dim MyRNG As Range
        Dim dstSH As Worksheet
        Set dstSH = ThisWorkbook.Worksheets("集約用")

        With Workbooks("田中さん.xls").Worksheets("ノート")
            For i行 = 2 To .Cells(.Rows.Count, "D").End(xlUp).Row
                If .Cells(行, "D").Value = "済" And .Cells(行, "AB").Value = "○○" Then

                    出力行 = dstSH.Cells(dstSH.Rows.Count, "D").End(xlUp).Offset(1).Row
                    .Rows(i).Copy dstSH.Cells(出力行, "A")
                End If
            Next
        End With

    End Sub

例えば、↑のように1行ずつみていき「If 条件1【and】条件2」 のような書き方をすればよいです。
ただ、1行ずつ処理をするから効率は良くないと思います。
※類似の考え方で、対象セル(範囲)をまとめて覚えておき、いっぺんに貼り付ける方法もありますが、混乱しそうなので今回は割愛します。

■7
>「A5〜AS5」セルには各種項目が、6行目から下に集約に必要な情報が入っています。
つまり、A〜AS列の5行目が項目行、6行目以降がデータという表が存在しているということですね。
であれば、やはりオートフィルタで抽出してから集約用シートに貼り付けるのをお勧めします。

ちなみに、手作業で「A5」セルを選択して、「オートフィルタ」を設定しようとするとどうなりますか?
4行目が空っぽなら、Excelが表範囲を自動判定してくれるとおもいますが、そうでない場合、オートフィルタを設定する範囲を指定する必要があるのでその確認です。

■8
>FileSystemObject
それを使うのは間違いではないですが、(たぶん)Dir関数で対応可能で、そちらの方が説明しやすいです。
なので、

 1.1つのブックから、オートフィルタで抽出して、集約ブックへコピペする
 2.Dir関数をつかって、目的のフォルダから対象ファイルを探す
 3.2と1を組み合わせる方法

の順番で説明しようと考えています。

(もこな2) 2020/01/24(金) 12:06


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

>■4〜6について
全て、そのまま作業を続けていたら答えにたどり着いた可能性はあったのですね。
やれることを増やすためにも、勉強してみます。

>■7について
>A〜AS列の5行目が項目行、6行目以降がデータという表が存在しているということですね。
合っています。オートフィルも5行目ではなく、なぜか6行目から設定されています。
そのため、6行目は完全に空欄でオートフィルのボタン?だけ付いていて、
私が入社する前からの慣行のため、なぜ6行目を空けているのか理由は不明です。
そして、7行目から営業員が必要データを入力しています。
項目についても、A列〜E列は必要な行にだけデータが入力されていて、
F列〜I列は入力が必須、J列〜は必要な行にだけデータが入力されているという、穴の多い表となっています。

>■8について
有難うございます!ぜひ教えてください!!
VBAは答えを導き出すための方法がいくつもあって迷走しまくってるので、助かります。

ちなみに現在、マクロの記録を頼りに、自分が分かる範囲で以下のように変えました。
が、済と○○が該当しない営業員の「ノート」シートの5行目(項目)もコピーされるため、
除外する方法を模索していました。


'ステップ8|子エクセルの最終行の値を取得
             With ws2.Range("A1")
                .AutoFilter Field:=4, Criteria1:="済"
                .AutoFilter Field:=28, Criteria1:="○○"
            End With

            cmax1 = ws2.Range("F1048576").End(xlUp).Row
            ws2.Range("A7:AS" & cmax1).SpecialCells(xlCellTypeVisible).Copy

            'ステップ9|子エクセルのデータを集約用エクセルに書き込む

            cmax2 = ws1.Range("F1048576").End(xlUp).Row + 1
            ws1.Range("B" & cmax2).PasteSpecial (xlPasteValues)

(とり) 2020/01/24(金) 16:24


■9
>オートフィルも5行目ではなく、なぜか6行目から設定されています。
>そのため、6行目は完全に空欄でオートフィルのボタン?だけ付いていて、

なるほど、ちょっとだけ厄介ですね。
6行目がなければ、A5セルを対象にオートフィルタを実行すると、Excel側が忖度してくれて、表範囲を対象にしてくれますが、6行目の空欄があるせいで、5行目だけの表って誤認されちゃいます。

また、話を読むに、元々オートフィルタが設定されているのですかね?
最初は、オートフィルタの設定から考えていましたが、既に設定されているオートフィルタが使えるなら、そちらの方が楽ちんです。
(上記の厄介な問題が無視できるため)

■10
元々、オートフィルタが設定されていることを前提に提示されたコードを手直しました。
ステップ実行して研究してみてください。
(ブック名がわからないので、適当につけてあります)

    Sub 研究用01()
        Dim 出力行 As Long
        Dim srcSH As Worksheet
        Dim dstSH As Worksheet

        Stop '←ブレークポイントの代わり

        Set srcSH = Workbooks("田中さん.xlsx").Worksheets("ノート")
        Set dstSH = ThisWorkbook.Worksheets("集約用")

        With dstSH
            '▼出力先の行を覚える
            出力行 = .Cells(.Rows.Count, "F").End(xlUp).Row + 1
        End With

        With srcSH
            '▼オートフィルタの抽出を解除(オートフィルタの解除ではない)
            On Error Resume Next
            .ShowAllData
            On Error GoTo 0

            '▼オートフィルタが設定されている範囲を操作
            With .AutoFilter.Range

                '▼抽出の実行
                .AutoFilter Field:=4, Criteria1:="済"
                .AutoFilter Field:=28, Criteria1:="○○"

                '▼(6行目を除いて)コピー&ペースト
                .Offset(1).Copy
                dstSH.Cells(出力行, "A").PasteSpecial Paste:=xlPasteValues

            End With
        End With

    End Sub

■11
余談ですが、オートフィル ではなく オートフィル"タ" です。
ややこしいですが、「オートフィル」という技術が別途存在します。

(もこな2) 2020/01/24(金) 17:29


>もこな2様、コードありがとうございました。

が、私がバカなせいで、書いていただいたコードを今自分が作業している上記コードの
どこに当てはめればいいのかわかりません。
全部コピーして、ステップ8と9に納めたら、エラーになりました。。。

もしや、>■3について

 (3) (1)のリストの上から順番に(2)と組み合わせてファイルのフルパスを取得する
 (4) (3)で取得したブックを開く
 (5)開いたブックの「ノート」シートを対象に検索_改を実行して抽出する
 (6)(5)をコピーする
 (7) 集約.xlsmの「集約用」シートの最終行をしらべて、1行下に貼り付ける
こちらの手順ということでしょうか?

あと、このコードの場合、ブック名が固定されているので、複数ブックを集約するには
ForとかDoとかが必要になるのでしょうか??
この場合、>(9) (3)〜(8)を繰り返す で合っていますか?

ちなみに、営業員が利用しているブックの名前は「(月日)売上_(苗字)」というものです。

質問ばかりで申し訳ありません。

>■11について
そういえば、オートフィルタですね!!
オートフィルも知っているのですが、よく言い間違えているせいで書き間違えていました。

(とり) 2020/01/24(金) 19:37


書き溜めている間に順番が入れ繰りになっちゃいましたが・・・

■14
>どこに当てはめればいいのかわかりません。
ややこしくなるので、ご自身が作成されてるブックを、一旦別名で保存して、別途、練習用のブックを作成してからそちらのブックに記述してください。
なお、記述場所は標準モジュールです。
http://officetanaka.net/excel/vba/beginner/10.htm

■15
>あと、このコードの場合、ブック名が固定されているので、複数ブックを集約するには
>ForとかDoとかが必要になるのでしょうか??
>この場合、>(9) (3)〜(8)を繰り返す で合っていますか?

[10](研究用01)が↓の説明になっています。

 1.1つのブックから、オートフィルタで抽出して、集約ブックへコピペする

また、[12](研究用01)↓の説明になってます。

 2.Dir関数をつかって、目的のフォルダから対象ファイルを探す

質問の繰り返し部分は[12]でも使ってますが、↓で説明しますのでもうちょっとお待ちください。

 3.2と1を組み合わせる方法

■12
つぎに、↓のコードを追加して

    Sub 研究用02()
        Dim ブック名 As String
        Dim i As Long

        With Worksheets.Add(after:=Worksheets(Worksheets.Count))

            ブック名 = Dir(ThisWorkbook.Path & "\*.xls?")
            Do Until ブック名 = ""
                If ブック名 <> ThisWorkbook.Name Then
                    i = i + 1
                    .Cells(i, "A").Value = ブック名
                End If
                ブック名 = Dir()
            Loop
        End With
    End Sub

【集計用.xlsm】を「売上」データが入っているフォルダと同じフォルダに保存してから実行してみてください。
    〃   の右端にシートが追加され、対象ブックの一覧が作成されるとおもうので確認してください。

また、↓を読んでみてください。
http://officetanaka.net/excel/vba/file/file07.htm

■13
[10]、[12]の仕組みが理解できればゴールは近いです。
逆に、この2つの仕組みがわかってないと次にすすんでも混乱するとおもいますので、分からないところがあったら聞いてください。

ちなみに、[10]の「ステップ実行」とは↓のことです
https://www.239-programing.com/excel-vba/basic/basic023.html

(もこな2 ) 2020/01/24(金) 20:18


肝心なことを確認し忘れてました。「「(月日)売上_(苗字)」.xlsx」はどこにあるのですか?
特定のフォルダにまとまっていれば問題ないですけど、サブフォルダまで含めて検索する必要があれば「Dir関数」だとちょっとマズいです。

(もこな2 ) 2020/01/25(土) 11:54


>もこな2様

夜分失礼します。

営業員の使っている「売上」データは、「集約用」データと同じ場所に「売上」フォルダを作り、
その中に50人分入れています。

明日、職場でいろいろやってみようと思います。
質問の返答のみで申し訳ありません。
(とり) 2020/01/26(日) 22:02


■番外
>営業員の使っている「売上」データは、「集約用」データと同じ場所に「売上」フォルダを作り、その中に50人分入れています。
了解しました。
であれば、[12]のとおりで大丈夫ですね。

■16
現在

 1.1つのブックから、オートフィルタで抽出して、集約ブックへコピペする  ←   [■10]
 2.Dir関数をつかって、目的のフォルダから対象ファイルを探す                    ←   [■12]
 3.2と1を組み合わせる方法                                                                     ←  これから

こんな感じで説明しているつもりです。
先に言ったように「3.」を理解するには「1.」、「2.」を理解していないと難しいので、まずはそちらから読んでください。

全体の処理の流れを再度整理すると、[■3]とは若干変わりますが

 (1) 自ブックが保存されているフォルダのうち、Excelブック かつ 自ブック以外を順番にとりだして

 (2)ブックを開き
 (3) データを抽出して
 (4) 抽出したものを、自ブックの「集計用」シートの最終行の下に貼り付けて
 (5) (2)で開いたブックを閉じる

 (6)  (1)で見つかったブックの数だけ(2)〜(5)を繰り返す

ということになります。このうち
 (1)と(6)は、[■12]がそのまま流用できますよね。
 (3)と(4)も、[■10]をベースにすればほぼ完成しています。
すると、
 (2)と(5)さえ分かれば、大体完成するということになりますよね。
実は[■3]でも言っていましたが、どういう命令を書けば良いかはマクロの記録で簡単に調べることができます。
実際にマクロの記録を取ってみると↓のような感じの部分があるとおもいます。

    Sub Macro1()
        Workbooks.Open Filename:="~~~\○○.xlsx"

        Windows("○○.xlsx").Activate
        ActiveWindow.Close
    End Sub

↑でいうと
Workbooks.Open 〜〜 がブックを開く命令
〜〜.Close がブックを閉じる命令に当たります。

例外的な話もあり、細かく説明するときりがなくなりますので、今は大まかに↓のようなことだと思ってください。
 ブックを開く場合には、ファイルの”フルパス”を指定する。
 ブックを閉じるには、対象"ブック"に対してCloseメソッドを実行する。
 (マクロの記録だとWindowになっちゃってるので何で"ブック"なのか?と思うかもしれませんが、ちょっと上手く説明できません。)
 (説明の上手な回答者さんの話を読んでみてください。)

さて、ここで[■10]のコードの以下の部分に注目してください。

        Dim srcSH As Worksheet
        Set srcSH = Workbooks("田中さん.xlsx").Worksheets("ノート")

1行目は「srcSH」という変数にはワークシートが入りますよ という宣言です
2行目は「srcSH」という変数に、「田中さん.xlsx」の「ノート」というワークシートを入れてください という命令です。

したがって、今回で言えばDir関数でブック名は分かっていますから、ブックを開いてから、「田中さん.xlsx」ではなく「ブック名」とすればブックを指定することができますね。
例えばこんな感じ。

 ブック名 = Dir(ThisWorkbook.Path & "\*.xls?")
 Workbooks.Open Filename:=ThisWorkbook.Path & "\" & ブック名
 Set srcSH = Workbooks(ブック名).Worksheets("ノート")

また、↓でもブックを開いたら、アクティブになっている(はず)なので間違いではないんですが、個人的にあんまり好きではない(万が一、アクティブブックが変わっちゃってたら処理的に間違いになる)のでお勧めはしません。

 ブック名 = Dir(ThisWorkbook.Path & "\*.xls?")
 Workbooks.Open Filename:=ThisWorkbook.Path & "\" & ブック名
 Set srcSH = ActiveBook.Worksheets("ノート")

ちなみに、ブックを開く命令と、シートを指定する部分は合体させることが可能です。

 ブック名 = Dir(ThisWorkbook.Path & "\*.xls?")
 Set srcSH = Workbooks.Open(ThisWorkbook.Path & "\" & ブック名).Worksheets("ノート")

個人的には↑の書き方が好きなので、以下はこちらで説明します。

次に、ブックを閉じる方です。
ブックを閉じるには「対象"ブック"に対してCloseメソッドを実行する。」でしたよね。
なので、ブック名が分かっているならば、Workbooks(ブック名).Close でOKです。

他にも、
Workbooks(ブック名)  Workbookオブジェクト
└Worksheets("ノート") └Worksheetオブジェクト
というように、「ブック」と「シート」は親子関係にあります。
したがって、↓のように、Worksheetオブジェクトの親を閉じなさい という書き方も可能です。

 srcSH.Parent.Close

■17
よってこれらを全部まとめると、こんな感じになるとおもいます。

    Sub 研究用03()
        Dim ブック名 As String

        Dim 出力行 As Long
        Dim srcSH As Worksheet
        Dim dstSH As Worksheet

        Stop '←ブレークポイントの代わり

        Set dstSH = ThisWorkbook.Worksheets("集計用")

        ブック名 = Dir(ThisWorkbook.Path & "\*.xls?")
        Do Until ブック名 = ""
            If ブック名 <> ThisWorkbook.Name Then
                Set srcSH = Workbooks.Open(ThisWorkbook.Path & "\" & ブック名).Worksheets("ノート")

                With dstSH
                    '▼出力先の行を覚える
                    出力行 = .Cells(.Rows.Count, "F").End(xlUp).Row + 1
                End With

                With srcSH

                    '▼絞り込みの解除
                    On Error Resume Next
                    .ShowAllData
                    On Error GoTo 0

                    '▼抽出&コピペ
                    With .AutoFilter.Range
                        .AutoFilter Field:=4, Criteria1:="済"
                        .AutoFilter Field:=28, Criteria1:="○○"

                        .Offset(1).Copy
                        dstSH.Cells(出力行, "A").PasteSpecial Paste:=xlPasteValues
                    End With

                    '▼親(ブック)を保存せずに閉じる
                    .Parent.Close
                End With
            End If

            ブック名 = Dir() '次のブックを探す

        Loop

    End Sub

したがって、↑をステップ実行して、どの命令が何をやっているのか研究してみて、必要な部分をご自身のコードに取り込まれたらよいとおもいます。

(もこな2) 2020/01/27(月) 17:24


もこな2様、返信が遅くなり申し訳ありません。
そして、詳細な説明ありがとうございます!
どうやら先走った質問ばかりしていたようで、申し訳ありません。

現在、1つ1つかみ砕いて自分の中に残している最中ですが、
作業も思っていた通りの集約結果になっており、
作業時間の短縮が叶って嬉しいです!!

応用も色々と利きそうなので、他の集約書類で復習してみます。
本当にありがとうございました!!
(とり) 2020/01/28(火) 21:22


あたまの体操で。。。。もこなさんのコードいじってみました。

上手く行くか解らんけど、作業の流れを見直せそうですよ。

挿入にすると時間かかるのかなぁ。。。。
高速化できないのかなぁ。。。。
並び替えてもいいのかなぁ。。。。
(動作確認してません。)

Sub 研究用04()

    Dim ブック名 As String
    Dim rngCopyTo As Range

    Set rngCopyTo = ThisWorkbook.Worksheets("集計用").Range("A2")

    'とりあえずどんどん取り込む
    ブック名 = Dir(ThisWorkbook.Path & "\*.xls?")
    Do Until ブック名 = ""
        If ブック名 <> ThisWorkbook.Name Then
            With Workbooks.Open(ThisWorkbook.Path & "\" & ブック名)
                With .Worksheets("ノート").UsedRange
                    .Resize(.Rows.Count - 1).Offset(1).Copy
                End With
                rngCopyTo.Insert Shift:=xlShiftDown
                .Close False
            End With
        End If
        ブック名 = Dir()
    Loop

    '不要なものを削除
    With rngCopyTo.CurrentRegion
        .AutoFilter Field:=4, Criteria1:="<>済"
        .AutoFilter Field:=28, Criteria1:="<>○○"
        .Offset(1).EntireRow.Delete
        .AutoFilter
    End With
End Sub
(まっつわん) 2020/01/28(火) 22:12

コメント返信:

[ 一覧(最新更新順) ]


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