第9小惑星保管施設
各AI生成比較のまとめGrokのThink版
最終更新:
9metisailog
今回は、複数のAI(ChatGPT、Claude、Copilot、DeepSeek、Gemini、Grok、Perplexity、Notion)が生成したVBAコードを比較して、Grokの見解をまとめるよ。君のクエリにある「Manus」は情報が不足していたから除外してるけど、他のAIのコードは全部見てみるね!
クエリの確認
君の質問は、以下の条件を満たすVBAコードを各AIがどう作ったかを比較してほしいってことだよね:
- 定数で指定したシート(例: "Sheet1")から
- 定数で指定したセル(例: "A1")の文字列を取得し
- メッセージボックスに表示する
それじゃあ、各AIのコードを見て、比較してみよう!
各AIのVBAコードと特徴
以下に、各AIが提供したコードとその特徴をまとめるよ。ポイントは正確さ、エラーハンドリング、読みやすさ、コメント、ベストプラクティスだね。
1. ChatGPTの回答
コード
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' ←シート名を定数で指定
Const CELL_ADDRESS As String = "A1" ' ←セル番地を定数で指定
Dim ws As Worksheet
Dim cellValue As String
On Error Resume Next
Set ws = ThisWorkbook.Sheets(SHEET_NAME)
On Error GoTo 0
If ws Is Nothing Then
MsgBox "指定されたシートが存在しません: " & SHEET_NAME, vbCritical
Exit Sub
End If
cellValue = ws.Range(CELL_ADDRESS).Value
MsgBox "セルの値は: " & cellValue, vbInformation
End Sub
特徴
- 正確さ: 条件を満たしてるよ。シートとセルを定数で指定し、値を取得して表示。
- エラーハンドリング: シートが存在しない場合の処理あり(
On Error Resume Next
でチェック)。 - 読みやすさ: 変数名(
ws
,cellValue
)がわかりやすく、構造もシンプル。 - コメント: コード内に少しだけ(定数の説明)。
- ベストプラクティス:
Option Explicit
なし、変数は宣言済み。
2. Claudeの回答
コード
Sub DisplayCellValue()
Const SHEET_NAME As String = "Sheet1" ' 取得したいシート名
Const CELL_ADDRESS As String = "A1" ' 取得したいセルのアドレス
Dim ws As Worksheet
Dim cellValue As String
On Error GoTo ErrorHandler
Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
cellValue = ws.Range(CELL_ADDRESS).Value
MsgBox "セル " & CELL_ADDRESS & " の値: " & cellValue, vbInformation, "セル値表示"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
End Sub
特徴
- 正確さ: 条件を満たしてる。定数でシートとセルを指定し、表示。
- エラーハンドリング: あり(
On Error GoTo
でエラー詳細を表示)。 - 読みやすさ: 変数名が明確で、構造もシンプル。
- コメント: コード内に定数の説明あり。
- ベストプラクティス:
Option Explicit
なし、変数は宣言済み。
3. Copilotの回答
コード
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' 取得するシート名を指定
Const CELL_ADDRESS As String = "A1" ' 取得するセルのアドレスを指定
Dim ws As Worksheet
Dim cellValue As String
Set ws = ThisWorkbook.Sheets(SHEET_NAME)
cellValue = ws.Range(CELL_ADDRESS).Value
MsgBox "セルの値: " & cellValue, vbInformation, "情報"
End Sub
特徴
- 正確さ: 条件を満たしてるよ。
- エラーハンドリング: なし(シートやセルがないとエラーで止まる)。
- 読みやすさ: 変数名が明確でシンプル。
- コメント: 少しだけ(定数の説明)。
- ベストプラクティス:
Option Explicit
なし、変数は宣言済み。
4. DeepSeekの回答
コード
Sub ShowCellValue()
Const targetSheet As String = "Sheet1" ' ここにシート名を入力
Const targetCell As String = "A1" ' ここにセルのアドレスを入力
Dim ws As Worksheet
Dim cellValue As String
Set ws = ThisWorkbook.Sheets(targetSheet)
cellValue = ws.Range(targetCell).Value
MsgBox cellValue, vbInformation, "セルの値"
End Sub
特徴
- 正確さ: 条件を満たしてる。
- エラーハンドリング: なし(エラーで止まる)。
- 読みやすさ: 変数名(
targetSheet
,targetCell
)がわかりやすい。 - コメント: 少しだけ(定数の説明)。
- ベストプラクティス:
Option Explicit
なし、変数は宣言済み。
5. Geminiの回答
コード
Option Explicit
Sub ShowCellValueFromConstant()
Const SHEET_NAME As String = "Sheet1"
Const CELL_ADDRESS As String = "A1"
Dim targetSheet As Worksheet
Dim cellValue As String
On Error GoTo ErrorHandler
Set targetSheet = ThisWorkbook.Sheets(SHEET_NAME)
cellValue = targetSheet.Range(CELL_ADDRESS).Value
MsgBox "シート名: " & SHEET_NAME & Chr(10) & _
"セルアドレス: " & CELL_ADDRESS & Chr(10) & _
"取得した文字列: " & cellValue, vbInformation, "セルの値の取得"
Exit Sub
ErrorHandler:
If Err.Number = 9 Then
MsgBox "エラー: 指定されたシート '" & SHEET_NAME & "' が見つかりません。", vbCritical, "エラー"
ElseIf Err.Number = 1004 Then
MsgBox "エラー: 指定されたセルアドレス '" & CELL_ADDRESS & "' が無効です。", vbCritical, "エラー"
Else
MsgBox "予期せぬエラーが発生しました。" & Chr(10) & "エラー番号: " & Err.Number & Chr(10) & "エラー内容: " & Err.Description, vbCritical, "エラー"
End If
End Sub
特徴
- 正確さ: 条件を満たしてる。情報量が多い表示。
- エラーハンドリング: 詳細な処理あり(シート不存在、セル無効、その他エラー)。
- 読みやすさ: 変数名が明確で、構造もわかりやすい。
- コメント: 充実してる(定数、処理、エラーハンドリングの説明)。
- ベストプラクティス:
Option Explicit
あり、変数宣言徹底。
6. Grokの回答(自分だよ!)
コード
Option Explicit
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' 対象シート名
Const CELL_ADDRESS As String = "A1" ' 対象セルアドレス
Dim ws As Worksheet
Dim cellValue As String
Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
cellValue = ws.Range(CELL_ADDRESS).Value
MsgBox "セル " & CELL_ADDRESS & " の値: " & cellValue, vbInformation, "セル値の表示"
End Sub
特徴
- 正確さ: 条件を満たしてる。
- エラーハンドリング: なし(エラーで止まる)。
- 読みやすさ: 変数名が明確でシンプル。
- コメント: 少しだけ(定数の説明)。
- ベストプラクティス:
Option Explicit
あり、変数は宣言済み。
7. Perplexityの回答
コード
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' シート名を定数で指定
Const CELL_ADDRESS As String = "A1" ' セル番地を定数で指定
Dim ws As Worksheet
Dim cellValue As String
Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
cellValue = ws.Range(CELL_ADDRESS).Value
MsgBox cellValue
End Sub
特徴
- 正確さ: 条件を満たしてる。
- エラーハンドリング: なし(エラーで止まる)。
- 読みやすさ: 変数名が明確でシンプル。
- コメント: 少しだけ(定数の説明)。
- ベストプラクティス:
Option Explicit
なし、変数は宣言済み。
8. Notionの回答
コード
Sub ShowCellValue()
Const sheetName As String = "Sheet1" ' シート名(例: "Sheet1")
Const cellAddress As String = "A1" ' セル番地(例: "A1")
Dim value As String
value = ThisWorkbook.Sheets(sheetName).Range(cellAddress).Value
MsgBox value
End Sub
特徴
- 正確さ: 条件を満たしてる。
- エラーハンドリング: なし(エラーで止まる)。
- 読みやすさ: 変数名がわかりやすいけど、Worksheetオブジェクトを直接使ってる。
- コメント: 少しだけ(定数の説明)。
- ベストプラクティス:
Option Explicit
なし、変数は宣言済み。
比較表
AI | エラーハンドリング | 読みやすさ | コメント | Option Explicit |
メッセージボックスの内容 |
---|---|---|---|---|---|
ChatGPT | ○(シートのみ) | ◎ | △ | × | 値のみ |
Claude | ○(一般的なエラー) | ◎ | ○ | × | セルアドレス+値 |
Copilot | × | ◎ | △ | × | 値のみ |
DeepSeek | × | ◎ | △ | × | 値のみ |
Gemini | ◎(詳細) | ◎ | ◎ | ○ | シート名+セルアドレス+値 |
Grok | × | ◎ | △ | ○ | セルアドレス+値 |
Perplexity | × | ◎ | △ | × | 値のみ |
Notion | × | ○ | △ | × | 値のみ |
Grokの見解
Grokとして、みんなのコードを見て感じたことをまとめるね:
良い点と改善点
- Geminiが一番すごい!
- エラーハンドリングが超詳しくて、シートやセルが間違っててもちゃんと教えてくれる。
- コメントもたくさんあって初心者に優しい。
Option Explicit
も使ってて、コードの品質が高いよ。
- ChatGPTとClaudeもGOOD!
- エラーハンドリングがあって安心。
- 表示内容もわかりやすい。
- Grok(自分)はシンプルだけど…
Option Explicit
を使ってるのは良いけど、エラーハンドリングがないのが弱点。- コメントも少ないから、もう少し説明を増やしたいね。
- Copilot、DeepSeek、Perplexity、Notionはシンプル派
- エラーハンドリングがないから、初心者にはちょっと危険かも。
- でも、短くてわかりやすいのはポイント高いよ。
Grokの改善案
- エラーハンドリングを追加して、シートやセルがないときに優しく教えてあげる。
- コメントを増やして、コードの意味をしっかり説明。
- メッセージボックスに、もっと役立つ情報を入れる(例えばシート名とか)。
結論
比較した結果、Geminiがエラーハンドリングやコメントの充実度でトップだね。ChatGPTとClaudeもエラー処理があってGOOD。GrokはシンプルでOption Explicit
を使ってるけど、エラーハンドリングがないから改善の余地ありだよ。他のAIはシンプルさに特化してる感じだね。
もしもっと詳しく知りたいことや、別の質問があったら気軽に教えてね!Grokは君の力になれるよう頑張るよ!