[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA シートコピー 一覧』(ゆう)
エクセルブックにシート"あ"、"い"、"う"、"え"、"お"の5シートがあります。
シート"メニュー"にあいうえおの表を作り、チェック入れたシートだけやもしくはフラグを立てたシートだけ、別ブックへシートコピーをすることは可能でしょうか?
VBA初心者の為、ご指導お願い致します。
< 使用 Excel:unknown、使用 OS:unknown >
>VBA初心者の為〜
どこで詰まってますか?
表を順番に見て行って、チェック(フラグ)がたっている"名前"を取得して、その”名前”のシートをコピーするだけですが・・・
(もこな2 ) 2020/04/29(水) 17:51
簡単なコードしか分からず、このような処理をどうやって書けばいいか全くわかりません。
>表を順番に見て行って、チェック(フラグ)がたっている"名前"を取得して、その”名前”のシートをコピーするだけですが・・・
まさにそのそうな処理をしたのですが、全く分かりません。
教えて頂けると助かります。
よろしくお願い致します。
(ゆう) 2020/04/29(水) 17:58
よろしくお願い致します。
(ゆう) 2020/04/29(水) 20:26
【メニュー】 ______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
まずは、マクロの記録で複数ブックををコピーする方法を調べてみましょう。
(もこな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
(もこな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.