VBA100本ノック 38本目:1シートを複数シートに振り分け
こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
今回は、Indexで配列を一行ずつ切り取って振り分ける方式を採用。
Sub VBA_100Knock_38() ' 祝日の辞書作成。 Dim HolidayDict As Scripting.Dictionary Set HolidayDict = New Scripting.Dictionary Dim i As Long With Sheets("祝日") For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row HolidayDict(.Cells(i, 1).Value) = .Cells(i, 2).Value Next End With ' 振り分け前情報。 Dim SourceArray As Variant SourceArray = Sheets("売上").Range("A1").CurrentRegion Dim TargetSheet As Worksheet Dim TempArray As Variant Dim TargetDate As Date For i = 2 To UBound(SourceArray) ' 各レコードを切り出し。 TempArray = WorksheetFunction.Index(SourceArray, i, 0) TargetDate = TempArray(1) If HolidayDict.Exists(TargetDate) Or _ WorksheetFunction.Weekday(TargetDate, 2) >= 6 Then Set TargetSheet = Sheets("土日祝") Else Set TargetSheet = Sheets("平日") End If TargetSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 6) = TempArray Next End Sub
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。