凡人も語りたい

VBAに関すことや日々考えている事柄について投稿しようと思っています。

VBA 100本ノックNo6~10

Sub ノック6本目()
    Dim ws As Worksheet: Set ws = Worksheets("Sheet6")
    Dim i As Long
    For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row
        If ws.Cells(i, 1).Value Like "*-*" Then
            ws.Cells(i, 4).Value = ""
        Else
            ws.Cells(i, 4).Formula = "=B" & i & " * C" & i
        End If
    Next
End Sub

Sub ノック7本目()
    Dim ws As Worksheet: Set ws = Worksheets("Sheet7")
    Dim i As Long
    For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row
        Dim stDate As String
        stDate = ws.Cells(i, 1).Value
        If IsDate(stDate) Then
            Dim dDate As Date
            dDate = DateValue(stDate)
            ws.Cells(i, 2).NumberFormatLocal = "mmdd"
            ws.Cells(i, 2).Value = DateSerial(Year(dDate), Month(dDate) + 1, 1) - 1
        End If
    Next
End Sub

Sub ノック8本目()
    Dim arr As Variant: arr = Worksheets("成績表").Range("a1").CurrentRegion
    Dim i As Long, j As Long, Goukei() As Long
    For i = 2 To UBound(arr, 1)
        ReDim Goukei(0)
        For j = 2 To 6
            If arr(i, j) >= 50 Then
                Goukei(0) = Goukei(0) + arr(i, j)
            End If
        Next
        If Goukei(0) >= 350 Then
            Worksheets("成績表").Cells(i, 7).Value = "合"
        End If
    Next
End Sub

Sub ノック9本目()
    Dim ws As Worksheet
    For Each ws In Worksheets
        If ws.Name = "合格者" Then
            Call Pass(ws)
            Exit Sub
        End If
    Next ws
    Dim newws As Worksheet: Set newws = Worksheets.Add
    newws.Name = "合格者"
    Call Pass(newws)
End Sub

Sub Pass(ws As Worksheet)
    Dim cnt As Long, i As Long
    Dim arr1() As String
    ReDim arr1(1 To 1) As String
    With Worksheets("成績表")
        For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            If .Cells(i, 7).Value = "合" Then
                cnt = cnt + 1
                ReDim Preserve arr1(1 To cnt)
                arr1(cnt) = .Cells(i, 1).Value
            End If
        Next
    End With
    ws.Cells(1, 1).Value = "合格者名"
    Dim j As Long
    For j = 1 To UBound(arr1)
        ws.Cells(j + 1, 1).Value = arr1(j)
    Next
End Sub

Sub ノック10本目()
    Dim ws As Worksheet: Set ws = Worksheets("受注")
    Dim i As Long
    For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row
        If ws.Cells(i, 4).Value Like "*削除*" Or ws.Cells(i, 4).Value Like "*不要*" Then ws.Rows(i).Delete
    Next
End Sub

振り返りと反省

所要時間2時間30分… 想定より結構かかってしまった…

ここら辺に手間取ってしまい、いろいろ調べながら解決。
NumberFormatLocalを使うところを最初Format関数で処理しようとしてうまくいかなかった。ここら辺のニュアンスの違いはしっかりと理解したい(´・ω・`)
Likeはだいぶ使い方がなじんだので、今後使っていきたい。