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演算子さんのところだけがちょっと難しかったかな?
大事なんで、覚えとこう
コメント