63本目 複数シートの連結

VBA100本ノック

VBA100本ノック 63本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック63本目
ブック内には「yyyy年mm月」シートが複数あり全て同一フォーマットです。
(A1開始で空行なく連続している)
これらのシートを一つに統合したシートを作成してください。
ただし1行目は見出し行なので先頭に1回だけの出力にしてください。
※出力シートは先頭に挿入(名称任意)
「統合」と言う言葉が曖昧で良くないですね。
単純な「連結」です。
複数シートのデータを縦に連結してください。
ただし、見出し行は最初の1行目だけ出力。

解答

Sub ノック63本目()
    
    Dim ws統合 As Worksheet
    Set ws統合 = Worksheets.Add(Sheets(1))
    ws統合.Name = "統合"
    
    Dim ws As Worksheet, lastrow As Long
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name Like "####年##月" Then
            If ws統合.Range("A1") = "" Then
                ws.Range("A1").CurrentRegion.Copy ws統合.Range("A1")
            Else
                ws.Range("A1").CurrentRegion.Offset(1).Copy ws統合.Range("A" & lastrow + 1)
             End If
            lastrow = ws統合.Cells(Rows.Count, 1).End(xlUp).Row
        End If
    Next
    
End Sub

■考え方・流れ
0:00 冒頭・問題確認
1:45 シートを追加する
3:38 特定のシートだけをコピーする
5:15 データを下に追加していく

新人君
新人君

一瞬で大量のシートを
結合出来るなんてすごいですね!

ブチョ
ブチョ

俺の方が100倍すごい!

新人君
新人君

シートを追加する(先頭に)

さて!じゃあまずは…
先頭に、「統合」って名前のシートを追加するぞ!!

今日の問題はほぼほぼ40本目と同じだから…
ちょっと説明速いぞ!w
もしわかりにくかったらそっちを見るのもおススメだ!

実行結果↓

続いては…挿入したシートの名前を「統合」に変更!!
名前の変更はNamプロパティさんを変更すればOKだ!

実行結果↓

ちな、今回はエラー処理等入れてないからそこは各自いれてくれww

特定のシートだけをコピーする

よし!そしたらお次!
今回は、「YYYY年MM月」ってシートだけをコピーしたいって条件付きだったな!!
その条件分岐を入れちゃうぞ!

Like演算子さんが今回も大活躍!!

ま、これさえできりゃ…
あとは表範囲を統合シートへコピーするコードを入れておこう!

実行結果↓
ループが回るごとに統合シートのA1セルに貼り付けられてるな!

データを下に追加していく

よし!最後に!!
データを貼り付ける範囲を、今ある最終行の一つ下に変更していくぞ!!!!!

あ、それともう一つ…
1シート目以外は、2行目以降をコピーしないといけないからそこも注意だ!

じゃ、とりま最終行「lastrow」を定義して…(棒)

まずは見出しを含んでコピーするかどうかの分岐から!!

A1セルが空白かどうかで判断でいいかな!

ほんで…
2回目以降のコピー元は…Offsetさんで2行目以降をコピーしてあげて…

とりあえずA1セルに貼り付けてたところを変更!

実行結果↓

とま、こんなところかな!

ブチョ
ブチョ

お疲れさ麻婆豆腐!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
63本目、シートを統合する問題でした!

え?
死ぬほど簡単…(その割に色々はしょったww)
と思ったら…40本目でやってたんか…
なるほど…それでか…

今回はさすがにイージーウィンいただきたいな!!
だけど…Like演算子さんのところだけがちょっと難しかったかな?

大事なんで、覚えとこう

コメント

タイトルとURLをコピーしました