Tips

VBA実践演習問題 #その4

VBA実践演習問題 #その4

 

よく目にするアカウント登録フォームを題材にして、VBAで実現できることを体験すると共に、基本的な記述方法について学んでいきましょう。

※Excelファイルダウンロード
登録フォーム

ご使用は自己責任で宜しくお願い致します。
それほど複雑なフォーマットではないので、不安な方はご自身で作成してください。

 icon-hand-o-right 前回の演習解説

前回最後に出題した演習の解答例です。


Sub practice3_1()

    Dim fname As String
    Dim lname As String
    Dim mf As String
    Dim pass As String
    Dim repass As String
    Dim chkerr As Boolean
    
    lname = Range("D3").Value
    fname = Range("G3").Value
    mf = Range("D6").Value
    pass = Range("D9").Value
    repass = Range("D12").Value
        
    Range("B1").Value = ""
    Range("B7").Value = ""
    
    If lname = "" Or fname = "" Then
        Range("B1").Value = "※入力されていません"
        Range("B1").Font.Color = vbRed
        chkerr = True
    End If
    
    If pass <> repass Then
        Range("B7").Value = "※パスワードが一致しません"
        Range("B7").Font.Color = vbRed
        chkerr = True
    End If
    
    If pass = "" Or repass = "" Then
        Range("B7").Value = "※入力されていません"
        Range("B7").Font.Color = vbRed
        chkerr = True
    End If
    
    If chkerr = True Then
        Exit Sub
    End If
    
    MsgBox "氏名:" & lname & " " & fname & vbCrLf & "性別:" & mf
End Sub

単純に、氏名のチェックを行っているIfステートメントを流用すればすぐに出来てしまうかと思います。順番は「※パスワードが一致しません」のIfステートメントの後に記述するのがミソです。順番が逆になると、どちらか一方に入力されていた場合のアラートが「※パスワードが一致しません」になってしまいます。

 icon-hand-o-right パスワードに入力ポリシーを実装してみよう!

■ 問題

パスワードが8文字よりも短い場合、「※パスワードは8文字以上で入力してください」とアラート表示するようにマクロを修正しましょう。

※その他の項目に関しては、今回は使用しません。

解答はこちら

まずは解答例を見てみましょう。

解答例


Sub practice4_1()

    Dim fname As String
    Dim lname As String
    Dim mf As String
    Dim pass As String
    Dim repass As String
    Dim chkerr As Boolean
    
    lname = Range("D3").Value
    fname = Range("G3").Value
    mf = Range("D6").Value
    pass = Range("D9").Value
    repass = Range("D12").Value
        
    Range("B1").Value = ""
    Range("B7").Value = ""
    
    If lname = "" Or fname = "" Then
        Range("B1").Value = "※入力されていません"
        Range("B1").Font.Color = vbRed
        chkerr = True
    End If
    
    If Len(pass) < 8 Then
        Range("B7").Value = "※パスワードは8文字以上で入力してください"
        Range("B7").Font.Color = vbRed
        chkerr = True
    End If
    
    If pass <> repass Then
        Range("B7").Value = "※パスワードが一致しません"
        Range("B7").Font.Color = vbRed
        chkerr = True
    End If
    
    If pass = "" Or repass = "" Then
        Range("B7").Value = "※入力されていません"
        Range("B7").Font.Color = vbRed
        chkerr = True
    End If
    
    If chkerr = True Then
        Exit Sub
    End If
    
    MsgBox "氏名:" & lname & " " & fname & vbCrLf & "性別:" & mf
End Sub

今回の問題も、以前の入力チェックの流用で実装できます。問題となるのは、文字数をどうやって取得するか、という点ですが、Len関数を使用すると簡単に文字数を取得することができます。記述の順番にも気を付けてくださいね。プログラムは上から順番に実行されていきますので、パスワードのチェックを行う3つのIfステートメントの複数に合致すると、一番最後に実行された値に上書きされます(今回は同一のセルに値を出力するので)。優先度が高いものを下に書いてあげると良いですね。

■ 演習

全ての項目が正常値だった場合に、下図のようにメッセージボックスを出力するようマクロを修正しましょう。

 

excel_VBAを学んで業務効率化!

excel-vba入門 連載

Recent News

Recent Tips

Tag Search