見出し画像

マクロVBA練習問題04

問題

エクセルの神髄さんの練習問題04(Ifの練習)を解いた。
https://excel-ubara.com/excelvba9/EXCELVBA604.html

解答(シンプル版)

Sub 練習問題04_1()
    
    With Sheet4
            
        '設定
        Dim StartRow As Long: StartRow = 2
        Dim EndRow As Long: EndRow = .Cells(Rows.Count, "A").End(xlUp).Row
        
        '処理
        Dim R As Long
        For R = StartRow To EndRow
            .Cells(R, "D").Value = .Cells(R, "B").Value \ .Cells(R, "C").Value      '箱数 = 納品数 \ 入数
            .Cells(R, "E").Value = .Cells(R, "B").Value Mod .Cells(R, "C").Value    'バラ数 = 納品数 Mod 入数
            If .Cells(R, "D").Value = 0 Then
                .Cells(R, "D").Value = "×" '箱数が0の場合、×を入力
            End If
        Next R
        
    End With
    
End Sub

上記コードで事足りるけれど、箱数が0の場合に×を再度入力するというところが二度手間になっていると感じた。
やっぱり計算式で入力された方が、後から見た人のことを考えると親切?
ということで、コードを書き直した。

解答(改良版)

Sub 練習問題04_2()
    
    With Sheet4
            
        '設定
        Dim StartRow As Long: StartRow = 2
        Dim EndRow As Long: EndRow = .Cells(Rows.Count, "A").End(xlUp).Row
        
        '処理
        Dim R As Long, 納品数 As String, 入数 As String
        For R = StartRow To EndRow
            納品数 = .Cells(R, "B").Address(0, 1)   '納品数のセル番地
            入数 = .Cells(R, "C").Address(0, 1)     '入数のセル番地
            
            '箱数が0の場合、×を入力
            If .Cells(R, "B").Value \ .Cells(R, "C").Value = 0 Then
                .Cells(R, "D").Value = "×"
            Else
                .Cells(R, "D").Formula = "=INT(" & 納品数 & "/" & 入数 & ")"    '箱数の計算式
            End If
            .Cells(R, "E").Formula = "=MOD(" & 納品数 & "," & 入数 & ")"        'バラ数の計算式
        Next R
        
    End With
    
End Sub

コードの量は多くなってしまったが、こちらの方が後から見たときに何をしているかが、自分なりにはわかりやすい気がする。

雑感

関数を使ったコードを書くなら、別にVBA使わなくてもいいんじゃない?と思ってしまった。
予め関数を入れておいたテンプレートを作っておいて、それをコピペするコードだけ書けばよいのでは?
結局のところバラバラに散らばった複数ファイルからデータをコピペして整形することが面倒なわけなので。
コードを書く手間を含めて総合的に考えてないと、自己満足で終わりそうな気がしてしまうなぁと。


いいなと思ったら応援しよう!