Excelで誕生日管理システム作ってみたった

## はじめに
　今回私がこの誕生日管理システムを作ろうと思った理由は、ある企業のインターンシップに参加させていただいたときに、その内容がExcel VBAを使ってシステム開発という内容でした。実際に作ってみてとても楽しかったので、今回Excel VBAでのシステムを作ってみました。
 　さらに、僕は誕生日を覚えるのがとてつもなく苦手なので、ちょうどExcelで作れるんじゃ:open_mouth:と思い作ってみました。

## Excelフォーム
![スクリーンショット 2023-12-09 232958.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637557/8baf8db0-69a8-8558-b675-5f80b45b93df.png)

　上の画像のようにフォームの入力画面を作っています。

## プログラム
```vba
Private Sub CommandButton1_Click()
    ' 登録ボタンがクリックされたときに実行されるコード

    ' シートを取得
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    
    ' 新しい名前を取得
    Dim newName As String
    newName = TextBox1.Value
    
    ' 名前が重複していないか確認
    Dim duplicateRow As Range
    Set duplicateRow = ws.Columns(1).Find(newName, LookIn:=xlValues, lookat:=xlWhole)
    
    ' 名前が重複していない場合は登録
    If duplicateRow Is Nothing Then
        Dim newBirthday As Date
        ' 新しい生年月日を入力
        If IsDate(TextBox2.Value) Then
            newBirthday = CDate(TextBox2.Value)
            ' 新しいデータをシートに書き込む
            Dim lastRow As Long
            lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
            ws.Cells(lastRow, 1).Value = newName
            ws.Cells(lastRow, 2).Value = newBirthday
            MsgBox "データが登録されました。"
        Else
            MsgBox "例を見ろドアホ!!"
        End If
    Else
        MsgBox "同じ名前があるわドアホ!!"
    End If
    
End Sub

Private Sub CommandButton2_Click()
' 表示ボタンがクリックされたときに実行されるコード

    ' シートを取得
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    
    ' 検索する名前を取得
    Dim searchName As String
    searchName = TextBox3.Value
    
    ' 名前が一致する行を検索
    Dim foundRow As Range
    Set foundRow = ws.Columns(1).Find(searchName, LookIn:=xlValues, lookat:=xlWhole)
    
    ' 名前が見つかった場合は生年月日を表示し、そうでなければメッセージを表示
    If Not foundRow Is Nothing Then
        Dim birthday As Date
        birthday = ws.Cells(foundRow.Row, 2).Value
        TextBox4.Value = Format(birthday, "yyyy年mm月dd日")
    Else
        TextBox4.Value = "名前が見つかりませんでした。"
    End If
End Sub

Private Sub CommandButton3_Click()
    ' 修正ボタンがクリックされたときに実行されるコード

    ' シートを取得
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    
    ' 検索する名前を取得
    Dim searchName As String
    searchName = TextBox3.Value
    
    ' 名前が一致する行を検索
    Dim foundRow As Range
    Set foundRow = ws.Columns(1).Find(searchName, LookIn:=xlValues, lookat:=xlWhole)
    
    ' 名前が見つかった場合は生年月日を修正
    If Not foundRow Is Nothing Then
        Dim newBirthday As Date
        ' 新しい生年月日を入力
        If IsDate(TextBox4.Value) Then
            newBirthday = CDate(TextBox4.Value)
            ' 生年月日をシートに書き込む
            ws.Cells(foundRow.Row, 2).Value = newBirthday
            MsgBox "生年月日が修正されました。"
        Else
            MsgBox "無効な生年月日です。"
        End If
    Else
        MsgBox "名前が見つかりませんでした。"
    End If

End Sub

Private Sub CommandButton4_Click()
    ' 消去ボタンがクリックされたときに実行されるコード

    ' シートを取得
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    
    ' 検索する名前を取得
    Dim searchName As String
    searchName = TextBox3.Value
    
    ' 名前が一致する行を検索
    Dim foundRow As Range
    Set foundRow = ws.Columns(1).Find(searchName, LookIn:=xlValues, lookat:=xlWhole)
    
    ' 名前が見つかった場合は行を削除
    If Not foundRow Is Nothing Then
        ' 行を削除
        foundRow.EntireRow.Delete
        MsgBox "データが削除されました。"
    Else
        MsgBox "名前が見つかりませんでした。"
    End If

End Sub
```

## 実行結果
![スクリーンショット 2023-12-09 233443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637557/1c27d9de-6fc6-edc3-71de-ec01e20dbbc1.png)
　↑このように名前と生年月日を入力します。
 <br>

![スクリーンショット 2023-12-09 233500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637557/f90c60d5-7843-ffc7-8158-309f2b8ba823.png)
　↑登録ボタンを押すとメッセージが表示され、
 <br>

![スクリーンショット 2023-12-09 233723.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637557/49055325-786e-f64f-2bb5-a7d153282fd3.png)
 ↑Excelのシートのほうにデータが保存されます。
 <br>

 ![スクリーンショット 2023-12-09 233535.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637557/1690e392-abfb-63f2-04fc-013f413811ed.png)
　↑名前を入力し表示ボタンを押すと、下のテキストボックスにその人の誕生日が表示されるというプログラムになっています。
 <br>

 さらにはプログラムを見てもらうとわかる通り、名前が重複していたらメッセージを表示したり、訂正ボタンや消去ボタンなどでデータを変えたりできるようにもなっています。

 ## 最後に
 　さすがにこのようなプログラムをインターンシップに行っただけの知識では作れないので:sweat:、いろいろ調べたりなどしてプログラムを書きました。実用的かと聞かれたらそこまでなのですが、プログラムを書いてシステムを作るということがとても楽しかったし、勉強にもなりました:thumbsup:。