今回はChatGPTを使ってマクロを作ってみました。作るマクロは、以前に作成したものと同じデータを使って集計をしていきます。
【第9回Excelマクロ】複数条件のある集計【ほぼfor/if文】
ChatGPTのリンク先
まずは以下のリンクをクリックして、ChatGPTのページを開きましょう。
ChatGPTの準備
リンク先を開くと、以下のページに飛びます。
【今すぐ始める】を選択しましょう。
まずは、【ログアウトしたまま】を選択してみます。
下の画面が表示されたら、【ChatGPTにメッセージを送信する】の入力ボックスに文字を入力して使えます。
入力ボックス内では、Shift+Enterで改行できます。
ログインせずに使ってみる1
お試しで、最終行と最終列を取得するコードを聞いてみましょう。
【VBAで1行目の最終行と最終列を取得するコード】と入力して送信してみます。
すると、以下のように返答がありました。
解説もついていて、コードの書き方を忘れたときにも便利ですね。
【コードをコピーする】をクリックすると簡単にコードのコピペもできます。
ログインせずに使ってみる2
表題のとおり、以下の表の集計をしてみます。
Excel上で表の一部をコピーして貼り付け、さらに
・性別の列をオス、メスに分けて集計
・HPの列を70以下、71〜80、81以上に分けて集計するVBAのコードを作成
とメッセージを入力してみます。
すると、以下のように返答がありました。
続いて、以下のコードが返ってきました。
Sub 集計()
Dim ws As Worksheet
Dim resultWs As Worksheet
Dim lastRow As Long
Dim i As Long
Dim male70 As Long, male71to80 As Long, male81 As Long
Dim female70 As Long, female71to80 As Long, female81 As Long
' ワークシートの設定
Set ws = ThisWorkbook.Sheets(1) ' 元データのシート名
Set resultWs = ThisWorkbook.Sheets.Add ' 結果を新しいシートに表示
' データの最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 集計初期化
male70 = 0: male71to80 = 0: male81 = 0
female70 = 0: female71to80 = 0: female81 = 0
' データ集計
For i = 2 To lastRow ' 1行目はヘッダのため2行目から
Dim hp As Long
Dim gender As String
hp = ws.Cells(i, 2).Value ' HPの値を取得
gender = ws.Cells(i, 5).Value ' 性別を取得
' HPの範囲に基づいて集計
If hp <= 70 Then
If gender = "オス" Then
male70 = male70 + 1
ElseIf gender = "メス" Then
female70 = female70 + 1
End If
ElseIf hp >= 71 And hp <= 80 Then
If gender = "オス" Then
male71to80 = male71to80 + 1
ElseIf gender = "メス" Then
female71to80 = female71to80 + 1
End If
ElseIf hp >= 81 Then
If gender = "オス" Then
male81 = male81 + 1
ElseIf gender = "メス" Then
female81 = female81 + 1
End If
End If
Next i
' 結果を新しいシートに書き込む
resultWs.Cells(1, 1).Value = "性別"
resultWs.Cells(1, 2).Value = "HP 70以下"
resultWs.Cells(1, 3).Value = "HP 71~80"
resultWs.Cells(1, 4).Value = "HP 81以上"
resultWs.Cells(2, 1).Value = "オス"
resultWs.Cells(2, 2).Value = male70
resultWs.Cells(2, 3).Value = male71to80
resultWs.Cells(2, 4).Value = male81
resultWs.Cells(3, 1).Value = "メス"
resultWs.Cells(3, 2).Value = female70
resultWs.Cells(3, 3).Value = female71to80
resultWs.Cells(3, 4).Value = female81
' 結果のシートを表示
resultWs.Activate
End Sub
コードをコピペして使ってみると、集計された結果が別シートに出力されました。
ChatGPT4oについて
今度はログインして使ってみましょう。
使用に制限はありますが、ログインすることによって【ChatGPT4o】を無料で使えます。このChatGPT4oではファイルをアップロードすることでき、そのファイルのデータの解析までしてくれます。
ChatGPT4oを使ってみる
実際にChatGPT4oを使ってみましょう。
まずは、集計するデータを作ってみました。ファイルの構成は以下の通りです。
Excelファイルにシートが2つあり、
・【データ】シート→集計するデータ
・【集計結果】シート→集計結果を出力
となっています。
次にChatGPTにExcelファイルをドラッグ&ドロップします。さらに【データシートを集計し、集計結果の表に出力するマクロを作成】と入力してみます。
続いて、集計内容の提案が表示されたので【「データ」シートの集計結果を「集計結果」シートに出力するマクロを追加】と入力しました。
次に、以下の返答がありました。
コードも返ってきました。
Sub 集計処理()
Dim wsData As Worksheet, wsResult As Worksheet
Dim lastRow As Long
Dim male70 As Long, male71_80 As Long, male80 As Long
Dim female70 As Long, female71_80 As Long, female80 As Long
Dim i As Long
Dim HP As Double
Dim gender As String
' シートの指定
Set wsData = ThisWorkbook.Sheets("データ")
Set wsResult = ThisWorkbook.Sheets("集計結果")
' データシートの最終行を取得
lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
' カウントを初期化
male70 = 0: male71_80 = 0: male80 = 0
female70 = 0: female71_80 = 0: female80 = 0
' データをループして集計
For i = 2 To lastRow
HP = wsData.Cells(i, 2).Value ' HP列(2列目)
gender = wsData.Cells(i, 5).Value ' 性別列(5列目)
If gender = "オス" Then
If HP <= 70 Then
male70 = male70 + 1
ElseIf HP > 70 And HP <= 80 Then
male71_80 = male71_80 + 1
ElseIf HP > 80 Then
male80 = male80 + 1
End If
ElseIf gender = "メス" Then
If HP <= 70 Then
female70 = female70 + 1
ElseIf HP > 70 And HP <= 80 Then
female71_80 = female71_80 + 1
ElseIf HP > 80 Then
female80 = female80 + 1
End If
End If
Next i
' 集計結果シートに出力
wsResult.Cells(2, 2).Value = male70
wsResult.Cells(2, 3).Value = male71_80
wsResult.Cells(2, 4).Value = male80
wsResult.Cells(3, 2).Value = female70
wsResult.Cells(3, 3).Value = female71_80
wsResult.Cells(3, 4).Value = female80
MsgBox "集計が完了しました!", vbInformation
End Sub
コードを実行してみると、集計結果は正しいものの、下図のように出力がズレていました。
出力部分のコードを見てみると以下のようになっていたので、修正を加えます。
' 集計結果シートに出力
wsResult.Cells(2, 2).Value = male70
wsResult.Cells(2, 3).Value = male71_80
wsResult.Cells(2, 4).Value = male80
wsResult.Cells(3, 2).Value = female70
wsResult.Cells(3, 3).Value = female71_80
wsResult.Cells(3, 4).Value = female80
↓
' 集計結果シートに出力
wsResult.Cells(3, 2).Value = male70
wsResult.Cells(3, 3).Value = male71_80
wsResult.Cells(3, 4).Value = male80
wsResult.Cells(4, 2).Value = female70
wsResult.Cells(4, 3).Value = female71_80
wsResult.Cells(4, 4).Value = female80
集計結果シートも直した後、再度実行することで以下の通りになりました。
その後、ちょうどChatGPT4oの制限に達したようで以下の返答がありました。
それ以降はファイルをアップロードすることはできなくなりました。
最後に
初めてChatGPTを使ってみましたが、コードの書き方を忘れたときや、そもそもどういった処理をしたら良いか分からない…といったときにも使えてとても便利ですね。
ChatGPTが返してくれた集計のコードを見てみると、配列を使わずに変数を使って集計をしていますね。集計方法へのアプローチの仕方もこのChatGPTで勉強ができますね。
変数名を考えるのも苦手なので、名前のつけ方も参考になります。
また、日を改めて同様の内容を聞いてみると、集計結果がmsgboxで出力されるようになっていたり、今度は配列を使って集計をしてみたりと様々な返答がありました。一方で、コード自体が間違っていてエラーが起こることもありました。やはりコードのチェックも必要ですね。
実際に使ってみるとChatGPTの便利さがよりわかると思うので、ぜひ使ってみましょう。
