[[20200429172556]] 『VBA シートコピー 一覧』(ゆう) ページの最後に飛ぶ

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

 

『VBA シートコピー 一覧』(ゆう)

エクセルブックにシート"あ"、"い"、"う"、"え"、"お"の5シートがあります。
シート"メニュー"にあいうえおの表を作り、チェック入れたシートだけやもしくはフラグを立てたシートだけ、別ブックへシートコピーをすることは可能でしょうか?

VBA初心者の為、ご指導お願い致します。

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


>表を作り、チェック入れたシートだけ〜可能でしょうか?
可能です。

>VBA初心者の為〜
どこで詰まってますか?

表を順番に見て行って、チェック(フラグ)がたっている"名前"を取得して、その”名前”のシートをコピーするだけですが・・・

(もこな2 ) 2020/04/29(水) 17:51


ありがとうございます。

簡単なコードしか分からず、このような処理をどうやって書けばいいか全くわかりません。

>表を順番に見て行って、チェック(フラグ)がたっている"名前"を取得して、その”名前”のシートをコピーするだけですが・・・

まさにそのそうな処理をしたのですが、全く分かりません。
教えて頂けると助かります。
よろしくお願い致します。
(ゆう) 2020/04/29(水) 17:58


どなたかコードを教えて頂けると助かります。

よろしくお願い致します。
(ゆう) 2020/04/29(水) 20:26


とりあえず、↓みたいに表を作って、2行目〜A最終行まで見ていったらいいんじゃないですか?
 【メニュー】
 ______A_________B________
 1  シート名   フラグ
 2    あ 
 3    い         〇
 4    う
 5    え         〇
 6    お

    Sub テキトー()
        Dim i As Long
        Stop
        With ThisWorkbook.Worksheets("メニュー")
            For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .Cells(i, "B") <> "" Then
                    ThisWorkbook.Worksheets(.Cells(i, "A").Value).Copy
                End If
            Next i
        End With

    End Sub

(もこな2 ) 2020/04/29(水) 20:48


本当にありがとうございます。

フラグが複数ある場合は、1つのブックに複数シートコピーしたいのですが、可能でしょうか?
(ゆう) 2020/04/29(水) 20:59


>フラグが複数ある場合は、1つのブックに複数シートコピーしたいのですが、可能でしょうか?
難易度あがるでしょうけど、無理ではないですね。

まずは、マクロの記録で複数ブックををコピーする方法を調べてみましょう。

(もこな2 ) 2020/04/29(水) 22:09


↑まちがえました。

 誤 複数ブック
 正 複数シート

でした。

他にも、ひとつ目のシートをコピーしたら、そのブックに追加してコピー挿入するという方法でも可能ですね。

いずれも、マクロの記録で参考になるコードは得られると思いますます。
(ただし、そのものズバリのものが完成品にはなりませんので勘違いしないようにしてください。)

(もこな2 ) 2020/04/29(水) 22:16


返信ありがとうございます。

Arrayを使うのでしょうか?

ThisWorkbook.Worksheets(Array(Cells(i, "A").Value)).Copy

に変更してみても、1つのシートしかコピーされませんでした。
使い方が間違っていますでしょうか?
(ゆう) 2020/04/29(水) 22:24


>使い方が間違っていますでしょうか?
間違ってません。

>1つのシートしかコピーされませんでした。
そりゃそうです。↓のようにひとつだけ指定してますから。

 Array(Cells(i, "A").Value))

こちらの方法を採用するなら、配列なり、コレクションを理解する必要がでてきます。
難易度があがると言ったのはそういう意味です。

一気にコピーする必要がないなら、↓の方がわかりやすいかもしれません。
>他にも、ひとつ目のシートをコピーしたら、そのブックに追加してコピー挿入するという方法でも可能ですね

(もこな2) 2020/04/30(木) 08:34


ありがとうございます。

>他にも、ひとつ目のシートをコピーしたら、そのブックに追加してコピー挿入するという方法でも可能ですね

上記の方法を考えたのですが、
Sheets("お").Copy After:=Workbooks("Book4").Sheets(1)
マクロの記録でやってみました。

出来たブックに追加コピーはこのような事でしょうか?
(ゆう) 2020/04/30(木) 23:38


>出来たブックに追加コピーはこのような事でしょうか?
ご自身はどう思われます?
自己検証すれば一発でわかるとおもいますが、「Book4」に「お」をコピーする場合しか使えないですよね?、

(もこな2 ) 2020/05/01(金) 00:30


ブックに追加していく案は、オブジェクトを理解してないと分かりづらかったかもしれません、
    Sub ブックに追加する()
        Dim i As Long
        Dim WB As Workbook
        Stop
        With ThisWorkbook.Worksheets("メニュー")
            For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .Cells(i, "B") <> "" Then
                    If WB Is Nothing Then
                        ThisWorkbook.Worksheets(.Cells(i, "A").Value).Copy
                        Set WB = Workbooks(Workbooks.Count)
                    Else
                        ThisWorkbook.Worksheets(.Cells(i, "A").Value).Copy After:=WB.Worksheets(WB.Worksheets.Count)
                    End If
                End If
            Next
        End With
    End Sub

配列を使うならこんな感じ(ほかのアプローチもあり)

    Sub 配列をつかう()
        Dim i As Long
        Dim buf As String
        Stop

        With ThisWorkbook.Worksheets("メニュー")
            For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .Cells(i, "B") <> "" Then
                    If buf = "" Then
                        buf = .Cells(i, "A").Value
                    Else
                        buf = buf & "," & .Cells(i, "A").Value
                    End If
                End If
            Next i

            If buf <> "" Then
                ThisWorkbook.Worksheets(Split(buf, ",")).Copy
            End If
        End With

    End Sub

コレクション〜はちょっと無理だったかもしれません、
(テストしてみたところコレクションに対して一括コピーができなかった)
よって別案で、作業グループを使う方法

    Sub 作業グループにしてからコピー()
        Dim i As Long
        Dim フラグ As Boolean
        Stop

        With ThisWorkbook.Worksheets("メニュー")
            For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .Cells(i, "B") <> "" Then
                    ThisWorkbook.Worksheets(.Cells(i, "A").Value).Select Not フラグ
                    フラグ = True
                End If
            Next i

            If ActiveSheet.Name <> .Name Then
                ActiveWindow.SelectedSheets.Copy
            End If

        End With    
    End Sub

(もこな2 ) 2020/05/01(金) 13:33


教えて頂きありがとうございます。
本当に助かります!

下記コードを調べて作成しましたが、どうでしょうか?

Sub 作成()

        Dim i As Long
        Dim wb As Workbook
        Set wb = Workbooks.Add

        With ThisWorkbook.Worksheets("【シート一覧】")
            For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If .Cells(i, "B") <> "" Then
                    ThisWorkbook.Worksheets(.Cells(i, "A").Value).Copy After:=wb.Sheets(Sheets.Count)
                End If
            Next i
        End With

Application.DisplayAlerts = False ' メッセージを非表示
Sheets(1).Delete
Application.DisplayAlerts = True ' メッセージを表示

End Sub

(ゆう) 2020/05/02(土) 12:50


動いてるならいいんじゃないですか?

気になる点として、
(1)

 Set wb = Workbooks.Add
↑で作られるブックは本当に1シートだけなのか?

(2)

 Sheets(1).Delete  →  wb.Sheets(1).Delete
↑のように、どのブックに属するシートを削除するのか明示したほうがよい

と思いました。

(もこな2 ) 2020/05/02(土) 13:19


ご指摘ありがとうございます。
コードを変更しました。

この度は本当にありがとうございました。
(ゆう) 2020/05/03(日) 12:59


コメント返信:

[ 一覧(最新更新順) ]


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