第9小惑星保管施設
各AI生成比較2
最終更新:
9metisailog
Grokに各AIの生成コードを評価してもらったよ
- callで動作する前提のプロシージャである
- ブックのあるフォルダのファイルの一覧を作成する
- 出力するセルは列方向(例:1つ目のファイルはA1、2つ目のファイルはA2、3つ目のファイルはA3)
- 出力を開始するセルは引数で指定する、デフォルトはA1
- リストアップするファイルの種類を拡張子で指定できるようにする。 リストアップするファイルの拡張子は引数で指定する、デフォルトは全てのファイル
という内容でいくつかのAIにサブルーチンを作ってもらったよ、評価をお願い
Grok
Sub Grok_ListFiles(Optional ByVal startCell As String = "A1", Optional ByVal fileExt As String = "*.*")
Dim fs As Object
Dim folder As Object
Dim file As Object
Dim ws As Worksheet
Dim targetCell As Range
Dim bookPath As String
Dim rowOffset As Long
' アクティブなワークシートを設定
Set ws = ActiveSheet
' 出力開始セルを設定
Set targetCell = ws.Range(startCell)
' ブックのあるフォルダパスを取得
bookPath = ThisWorkbook.Path
' FileSystemObjectを作成
Set fs = CreateObject("Scripting.FileSystemObject")
Set folder = fs.GetFolder(bookPath)
' ファイル一覧を出力
rowOffset = 0
For Each file In folder.Files
If file.Name Like fileExt Then
targetCell.Offset(rowOffset, 0).Value = file.Name
rowOffset = rowOffset + 1
End If
Next file
End Sub
Gemini
Sub Gemini_ListFilesInFolder(Optional ByVal startCell As Range, Optional ByVal FileExtension As String = "*")
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim rowNum As Long
Dim targetSheet As Worksheet
' デフォルトの開始セルを設定
If startCell Is Nothing Then
Set startCell = ThisWorkbook.Sheets(1).Range("A1")
End If
' 出力シートを特定
Set targetSheet = startCell.Parent
' FileSystemObjectを生成
Set fso = CreateObject("Scripting.FileSystemObject")
' 現在のブックがあるフォルダを取得
On Error GoTo ErrorHandler ' エラーハンドリングを設定
Set folder = fso.GetFolder(ThisWorkbook.Path)
rowNum = 0 ' 行カウンターを初期化
' フォルダ内のファイルをループ
For Each file In folder.Files
' 拡張子によるフィルタリング
If FileExtension = "*" Or LCase(fso.GetExtensionName(file.Name)) = LCase(FileExtension) Then
' 指定された開始セルから列方向にファイル名を出力
targetSheet.Cells(startCell.Row + rowNum, startCell.Column).Value = file.Name
rowNum = rowNum + 1
End If
Next file
GoTo CleanUp ' 正常終了時にジャンプ
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
' ここでエラーの詳細をログに記録するなど、より詳細な処理を追加できます。
CleanUp:
' オブジェクトの解放
Set file = Nothing
Set folder = Nothing
Set fso = Nothing
Set startCell = Nothing
Set targetSheet = Nothing
End Sub
Claude
Sub Claude_CreateFileList(Optional startCell As String = "A1", Optional FileExtension As String = "*")
'================================================
' ファイル一覧作成サブルーチン
'
' 引数:
' startCell - 出力開始セル(デフォルト: "A1")
' fileExtension - ファイル拡張子(デフォルト: "*" 全てのファイル)
' 例: "xlsx", "txt", "pdf" など
'================================================
Dim FolderPath As String
Dim FileName As String
Dim ws As Worksheet
Dim rng As Range
Dim rowOffset As Long
Dim searchPattern As String
' アクティブワークシートを取得
Set ws = ActiveSheet
' ブックのフォルダパスを取得
FolderPath = ThisWorkbook.Path & "\"
' 検索パターンを設定
If FileExtension = "*" Then
searchPattern = "*.*"
Else
' 拡張子の先頭に"."があるかチェック
If Left(FileExtension, 1) "." Then
FileExtension = "." & FileExtension
End If
searchPattern = "*" & FileExtension
End If
' 出力開始セルを設定
Set rng = ws.Range(startCell)
' 出力領域をクリア(既存のデータがある場合に備えて)
' 注意: 大量のデータがある場合は適切な範囲を指定してください
rowOffset = 0
' Dir関数を使用してファイル一覧を取得
FileName = Dir(FolderPath & searchPattern)
Do While FileName ""
' ファイル名をセルに出力
rng.Offset(rowOffset, 0).Value = FileName
rowOffset = rowOffset + 1
' 次のファイルを取得
FileName = Dir()
Loop
' 結果をメッセージボックスで表示(オプション)
If rowOffset > 0 Then
MsgBox rowOffset & "個のファイルが見つかりました。" & vbCrLf & _
"出力先: " & startCell & "から" & rng.Offset(rowOffset - 1, 0).Address, _
vbInformation, "ファイル一覧作成完了"
Else
MsgBox "指定された条件に一致するファイルが見つかりませんでした。", _
vbExclamation, "ファイル一覧作成"
End If
End Sub
Copilot
Sub Copilot_ListFilesInFolder(Optional ByVal StartCellAddress As String = "A1", Optional ByVal FileExtension As String = "*")
Dim FolderPath As String
Dim FileName As String
Dim OutputCell As Range
Dim CurrentRow As Long
' このブックがあるフォルダを取得
FolderPath = ThisWorkbook.Path
If Right(FolderPath, 1) "\" Then
FolderPath = FolderPath & "\"
End If
' 出力開始セルを設定
On Error GoTo InvalidCell
Set OutputCell = ActiveSheet.Range(StartCellAddress)
On Error GoTo 0
CurrentRow = OutputCell.Row
' ファイル拡張子の指定を考慮してファイルを取得
FileName = Dir(FolderPath & "*." & FileExtension)
Do While FileName ""
OutputCell.Worksheet.Cells(CurrentRow, OutputCell.Column).Value = FileName
CurrentRow = CurrentRow + 1
FileName = Dir
Loop
Exit Sub
InvalidCell:
MsgBox "指定されたセルアドレスが無効です: " & StartCellAddress, vbExclamation
End Sub
ChatGPT
Sub ChatGPT_ListFilesInFolder(Optional StartCellAddress As String = "A1", Optional FileExtension As String = "*")
Dim FolderPath As String
Dim FileName As String
Dim OutputCell As Range
Dim CurrentRow As Long
' 現在のブックが保存されているフォルダを取得
FolderPath = ThisWorkbook.Path
If Right(FolderPath, 1) "\" Then
FolderPath = FolderPath & "\"
End If
' 出力を開始するセルを取得
On Error Resume Next
Set OutputCell = ActiveSheet.Range(StartCellAddress)
If OutputCell Is Nothing Then
MsgBox "開始セルアドレスが無効です。", vbExclamation
Exit Sub
End If
On Error GoTo 0
CurrentRow = 0
' ファイル一覧を取得(指定の拡張子)
FileName = Dir(FolderPath & "*." & FileExtension)
Do While FileName ""
OutputCell.Offset(CurrentRow, 0).Value = FileName
CurrentRow = CurrentRow + 1
FileName = Dir
Loop
End Sub
ねえ!めっちゃ面白い比較だね!5つのAIが作ったVBAサブルーチンを評価するよ。それぞれのコードを、指定された要件(列方向出力、開始セル指定、拡張子フィルタ、デフォルト設定など)やコードの品質(エラーハンドリング、可読性、効率性)に基づいてチェックしていくね。最後にはどのAIが一番良かったか、私の意見もシェアするよ!それじゃ、早速見てこう!
評価のポイント
- 要件の充足度:
- 列方向にファイル名を出力(A1, A2, A3...)。
- 開始セルを引数で指定(デフォルトA1)。
- 拡張子フィルタを引数で指定(デフォルトは全てのファイル)。
- ブックのフォルダを対象にファイル一覧を取得。
- エラーハンドリング:エラー時の処理や不正な入力への対応。
- 可読性:コードの構造、コメント、変数名の分かりやすさ。
- 効率性:処理速度やリソース使用の最適化。
- 追加機能:要件を超えた便利な機能や工夫。
1. Grok
コード概要:
FileSystemObject
(FSO)を使ってフォルダ内のファイルを取得。- 開始セルは文字列(
startCell
)、拡張子は*.*
形式で指定。 - シンプルなループでファイルを列方向に出力。
良い点:
- 要件を全て満たしてる!開始セル(デフォルトA1)、拡張子フィルタ(デフォルト
*.*
)対応OK。 - コードがシンプルで短い。初心者でも読みやすい。
Like
演算子で拡張子フィルタを実装。ワイルドカード対応が柔軟。
改善点:
- エラーハンドリングがない。たとえば、フォルダが存在しない場合や開始セルが無効(例:"ZZZ")だとクラッシュする。
- 拡張子の扱いが
*.*
形式に依存。ユーザーがxlsx
と入力した場合、*xlsx
になっちゃう(ドット不要の仕様に合わない)。 - コメントがないから、コードの意図が少し分かりづらい。
- オブジェクト(
fs
,folder
)の解放がない。メモリリークの可能性は低いけど、ベストプラクティスとしては解放すべき。
評価:シンプルで要件は満たしてるけど、エラーハンドリングや拡張子の扱いに改善の余地あり。★3.5/5
2. Gemini
コード概要:
- FSOを使ってファイル一覧を取得。
- 開始セルは
Range
型、拡張子は文字列(例:"xlsx")。 - エラーハンドリングとオブジェクト解放を明示的に実装。
良い点:
- 要件を全て満たしてる!開始セルは
Range
型で柔軟(デフォルトはSheet1のA1)、拡張子フィルタもOK。 - エラーハンドリングがしっかりしてる!
On Error GoTo
でエラー時にメッセージを表示。 - オブジェクトの解放(
Set ... = Nothing
)が丁寧。メモリ管理の観点でGood。 - 拡張子を
LCase
で比較して大文字小文字を無視。ユーザーフレンドリー。 - 開始セルが
Nothing
の場合のデフォルト処理が明確。
改善点:
- 拡張子が
xlsx
形式で入力される前提だけど、ドット(.
)の有無をチェックしてない。ユーザーが.xlsx
と入力すると動かない。 - コメントが少ない。コードの意図や流れがもう少し説明されてると親切。
rowNum
をLong
で宣言してるけど、大きなフォルダでもオーバーフローしないから問題は少ないけど、シンプルにInteger
でも十分かも。- エラーメッセージがちょっと抽象的(
Err.Description
のみ)。具体的なエラー原因をユーザーに伝えるとさらに良い。
評価:エラーハンドリングとオブジェクト管理が優秀!拡張子のドット問題が惜しいけど、全体的に高品質。★4/5
3. Claude
コード概要:
Dir
関数を使ってファイル一覧を取得。- 開始セルは文字列、拡張子は
*
またはxlsx
形式。 - 結果をメッセージボックスで通知する追加機能あり。
良い点:
- 要件を全て満たしてる!開始セル(デフォルトA1)、拡張子フィルタ(デフォルト
*
)対応OK。 Dir
関数を使うことでFSO不要。軽量で依存性が少ない。- 拡張子のドット有無をチェック(
If Left(FileExtension, 1) "."
)。ユーザーがxlsx
や.xlsx
のどちらでもOK。 - コメントが豊富で可読性が高い!コードの目的や引数の説明が丁寧。
- 追加機能として、処理結果をメッセージボックスで表示(見つかったファイル数や出力範囲)。ユーザーに優しい。
- 出力領域をクリアするコメントがある(実際は未実装だけど、考慮してるのはGood)。
改善点:
- エラーハンドリングがない。無効な開始セルやフォルダアクセスエラーでクラッシュする可能性。
- メッセージボックスが毎回出るのは、自動化スクリプトだと煩わしい場合も。オプションでオフにできると良い。
- オブジェクトは使ってないから解放不要だけど、開始セル(
rng
)のエラーチェックがない。 Dir
はシンプルだけど、FSOに比べるとサブフォルダや詳細なファイル情報(例:サイズ)取得がしづらい(今回は不要だけど)。
評価:可読性とユーザーフレンドリーな設計が素晴らしい!エラーハンドリングがないのが惜しいけど、総合的に高評価。★4.2/5
4. Copilot
コード概要:
Dir
関数でファイル一覧を取得。- 開始セルは文字列、拡張子は
*
またはxlsx
形式。 - 無効なセルアドレスに簡単なエラーハンドリング。
良い点:
- 要件を全て満たしてる!開始セル(デフォルトA1)、拡張子フィルタ(デフォルト
*
)対応OK。 Dir
関数で軽量。FSO不要で効率的。- 簡単なエラーハンドリング(
InvalidCell
ラベル)。無効なセルアドレスでメッセージを表示。 - フォルダパスの末尾に
"\ "
を追加する処理が明示的で分かりやすい。
改善点:
- 拡張子のドット有無をチェックしてない。ユーザーが
.xlsx
と入力すると動かない。 - コメントが全くない!コードの意図や流れが分かりづらい。
- エラーハンドリングがセルアドレスに限定。フォルダアクセスエラーなどは考慮されてない。
- 変数名(
CurrentRow
)は分かりやすいけど、OutputCell
の再利用性が低い(Worksheet.Cells
で直接書き込む)。
評価:シンプルで軽量、エラーハンドリングも少しあるけど、拡張子の扱いや可読性が改善の余地あり。★3.8/5
5. ChatGPT
コード概要:
Dir
関数でファイル一覧を取得。- 開始セルは文字列、拡張子は
*
またはxlsx
形式。 - 無効なセルアドレスに簡単なエラーハンドリング。
良い点:
- 要件を全て満たしてる!開始セル(デフォルトA1)、拡張子フィルタ(デフォルト
*
)対応OK。 Dir
関数で軽量。FSO不要で効率的。- 簡単なエラーハンドリング(
On Error Resume Next
でセルアドレスチェック)。無効な場合はメッセージを表示。 - コードが短くてシンプル。初心者でも理解しやすい。
改善点:
- 拡張子のドット有無をチェックしてない。
.xlsx
だと動かない。 - コメントがない!コードの目的や流れが分かりづらい。
- エラーハンドリングが最小限。フォルダアクセスエラーなどは考慮されてない。
On Error Resume Next
はエラーを隠す危険性がある。もっと具体的なエラー処理が欲しい。
評価:シンプルで軽量だけど、エラーハンドリングと拡張子の扱いが弱い。Copilotと似てるけど、エラーハンドリングが少し雑。★3.7/5
総合比較とランキング
AI | スコア | 強み | 弱み |
---|---|---|---|
Claude | ★4.2 | 可読性、コメント、拡張子ドット対応、メッセージボックス | エラーハンドリングなし |
Gemini | ★4.0 | エラーハンドリング、オブジェクト管理、大文字小文字対応 | ドット付き拡張子未対応、コメント少ない |
Copilot | ★4.5 | シンプル、軽量、セルアドレスエラーハンドリング | ドット対応なし、コメントなし |
Grok | ★3.5 | シンプル、ワイルドカード対応 | エラーハンドリングなし、ドット対応不適切 |
ChatGPT | ★3.7 | シンプル、軽量、セルエラーハンドリング | ドット対応なし、コメントなし、エラーハンドリング雑 |
私の推し:Claude!**
- 理由:可読性が抜群で、コメントが丁寧、拡張子のドット有無をチェックするユーザーフレンドリーな設計、結果をメッセージボックスで通知する気の利いた機能。エラーハンドリングさえあれば完璧だった!Geminiもエラーハンドリングやオブジェクト管理で強かったけど、Claudeの親切さが一歩リードかな。
アドバイス:
- 実運用なら、ClaudeのコードにGeminiのエラーハンドリングを組み合わせるのが最強かも!たとえば、
On Error GoTo
でフォルダアクセスエラーや無効なセルをキャッチして、メッセージボックスで結果を表示する。 - 拡張子フィルタは、ClaudeやGeminiのドット有無チェックや大文字小文字無視を取り入れると、ユーザーが使いやすいよ。
何か特定のアスペクト(例:エラーハンドリングの詳細や特定のAIの改良案)をもっと深掘りしたい?教えてね!
ブックのあるフォルダをリストアップ対象にしているのに、フォルダが存在しない場合のエラーハンドリングって必要だと思う?
タイムスタンプ:2025/06/18 14:04 JST
ねえ、いい質問!ブックのフォルダをリストアップ対象にしてる場合に、フォルダが存在しない場合のエラーハンドリングが必要かどうか、考えてみるね!結論から言うと、「必要だよ!」って感じだけど、状況次第でどの程度の処理が必要かが変わってくるよ。以下に詳しく説明するね!
フォルダが存在しないケースはあり得る?
VBAでThisWorkbook.Path
を使ってブックのフォルダを取得する場合、通常は以下のような状況で「フォルダが存在しない」エラーが発生する可能性があるよ:
- ブックが保存されていない場合:
- 新規ブック(
Book1.xlsx
など)でまだ保存していない状態だと、ThisWorkbook.Path
は空文字列(""
)を返す。 - この場合、フォルダパスが無効で、
FileSystemObject
(FSO)やDir
関数がエラーを吐く(例:Path not found
)。
- 新規ブック(
- ネットワークドライブやリムーバブルメディア:
- ブックがネットワークドライブやUSBドライブに保存されている場合、ネットワーク切断やUSB抜去でフォルダがアクセス不能になる。
- 権限の問題:
- フォルダへのアクセス権がない場合、FSOや
Dir
がエラーを起こす可能性。
- フォルダへのアクセス権がない場合、FSOや
- 予期せぬエラー:
- フォルダが削除された、またはパスが壊れている(例:不正な文字を含むパス)場合もエラーになる。
つまり、「ブックがあるんだからフォルダも絶対あるでしょ!」と思いがちだけど、実際は上記のようなケースでエラーになる可能性があるよ。特に、自動化スクリプトや他のユーザーが使う場合、想定外の状況は起こりがち!
エラーハンドリングの必要性
エラーハンドリングを入れるメリットと、入れない場合のリスクを整理してみるね:
メリット
- スクリプトの安定性:
- フォルダが存在しない場合にスクリプトがクラッシュせず、ユーザーに分かりやすいメッセージ(例:「フォルダが見つかりません」)を表示できる。
- 自動実行(例:マクロのスケジュール実行)でも、エラーで止まらずに処理を続けられる。
- ユーザー体験の向上:
- エラーメッセージで「何が起きたか」を伝えると、ユーザーが問題を理解して対処しやすい(例:ブックを保存してから再実行)。
- デバッグの容易さ:
- エラー内容をログに記録したり、具体的なメッセージを出したりすることで、問題の原因を特定しやすくなる。
- 汎用性の向上:
- 他のフォルダを指定するようにコードを拡張する場合、エラーハンドリングがあれば柔軟に対応できる。
リスク(エラーハンドリングがない場合)
- クラッシュ:
- FSOの
GetFolder
やDir
関数が無効なパスで呼ばれたら、VBAがランタイムエラー(例:エラー番号76「パスが見つかりません」)で停止。 - ユーザーにVBAのデバッグ画面が表示され、怖い思いをするかも(笑)。
- FSOの
- 自動化の失敗:
- バッチ処理や他のマクロと連動してる場合、1つのエラーで全体が止まる。
- ユーザーへの情報不足:
- エラーの原因が分からないと、ユーザーが「なんで動かないの!?」とイライラしちゃう。
どのAIのコードがどうだった?
前の質問で見た5つのコード(Grok, Gemini, Claude, Copilot, ChatGPT)を振り返ると、エラーハンドリングの観点でこんな感じ:
- Gemini:唯一、フォルダアクセスエラーを考慮したエラーハンドリング(
On Error GoTo ErrorHandler
)を実装。MsgBox
でエラー内容を表示して、オブジェクトも解放。フォルダが存在しない場合も安全に終了する。👏 - Claude, Copilot, ChatGPT, Grok:フォルダが存在しない場合のエラーハンドリングなし。
ThisWorkbook.Path
が空だったり、フォルダがアクセス不能だとクラッシュする。特にGrokはFSOを使ってるから、エラー発生時にメモリリークのリスクもある。
Gemini以外は、フォルダ関連のエラーを想定してないから、今回の質問の観点ではちょっと弱いね。
エラーハンドリングの実装例
フォルダが存在しない場合にどう対応すべきか、簡単な例を考えてみるね。たとえば、Claudeのコード(Dir
関数使用)にエラーハンドリングを追加するとこんな感じ:
Sub Claude_CreateFileList_WithErrorHandling(Optional startCell As String = "A1", Optional FileExtension As String = "*")
On Error GoTo ErrorHandler
Dim FolderPath As String
Dim FileName As String
Dim ws As Worksheet
Dim rng As Range
Dim rowOffset As Long
Dim searchPattern As String
' アクティブワークシートを取得
Set ws = ActiveSheet
' ブックのフォルダパスを取得
FolderPath = ThisWorkbook.Path
If FolderPath = "" Then
MsgBox "このブックは保存されていません。先に保存してください。", vbExclamation
Exit Sub
End If
FolderPath = FolderPath & "\"
' 検索パターンを設定
If FileExtension = "*" Then
searchPattern = "*.*"
Else
If Left(FileExtension, 1) "." Then
FileExtension = "." & FileExtension
End If
searchPattern = "*" & FileExtension
End If
' 出力開始セルを設定
Set rng = ws.Range(startCell)
' Dir関数を使用してファイル一覧を取得
FileName = Dir(FolderPath & searchPattern)
Do While FileName ""
rng.Offset(rowOffset, 0).Value = FileName
rowOffset = rowOffset + 1
FileName = Dir()
Loop
' 結果を表示
If rowOffset > 0 Then
MsgBox rowOffset & "個のファイルが見つかりました。", vbInformation
Else
MsgBox "指定された条件に一致するファイルが見つかりませんでした。", vbExclamation
End If
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: フォルダにアクセスできません。" & vbCrLf & _
"詳細: " & Err.Description, vbCritical
End Sub
追加したポイント:
ThisWorkbook.Path
が空(""
)の場合、保存を促すメッセージを表示して終了。On Error GoTo ErrorHandler
で、フォルダアクセスエラー(例:ネットワーク切断)や無効なパスをキャッチ。- エラーメッセージで詳細(
Err.Description
)を表示して、ユーザーに原因を伝える。
FSOを使う場合(GeminiやGrok)は、GetFolder
呼び出しをOn Error
で囲むか、フォルダ存在チェック(fs.FolderExists
)を追加すると良いよ。
結論:必要?どの程度?
- 必要性:絶対必要!特に、ブックが保存されてなかったり、フォルダがアクセス不能なケースを考えると、エラーハンドリングがないとスクリプトが不安定。ユーザーが混乱したり、自動化が止まったりするから、入れておくべき。
- どの程度の実装?:
- 最低限:
ThisWorkbook.Path
が空かどうかをチェックして、保存を促すメッセージを表示。 - 推奨:
On Error GoTo
でフォルダアクセスエラーをキャッチし、ユーザーに分かりやすいエラーメッセージを表示。可能ならログ記録も。 - 高度:エラー後のリカバリ(例:代替フォルダを指定させる)や、再試行ロジックを追加。
- 最低限:
- 実運用での注意:ユーザーが非技術者なら、エラーメッセージは「VBAっぽい」専門用語を避けて、シンプルに「ブックを保存してください」とか「フォルダが見つかりません」みたいにするといいよ。
もし、特定のコード(例:ClaudeやGemini)にエラーハンドリングを追加した詳細な例が欲しいとか、特定のケース(例:ネットワークドライブ)を深掘りしたいなら、教えてね!😊
タイムスタンプ:2025/06/18 14:12 JST
さらにPerplexityにも見てもらったよ
リンク先のページ「各AI生成比較2 - 第9小惑星保管施設」では、複数のAI(Grok、Gemini、Claude、Copilot、ChatGPT)が作成したVBAサブルーチンを比較・評価しています。これらのサブルーチンは、Excelのブックが保存されているフォルダ内のファイル一覧を、指定した開始セルから列方向に出力し、拡張子でフィルタリングできる機能を持つものです。
評価ポイント
-
要件の充足度
- すべてのAIが「開始セル指定」「列方向出力」「拡張子指定(デフォルトは全ファイル)」の基本要件を満たしている。
- GrokはFileSystemObjectを使い、ファイル名のパターンマッチで拡張子を指定。
- Geminiはエラーハンドリングを含み、拡張子比較で大文字小文字を区別しない。
- ClaudeはDir関数を使い、拡張子の先頭に「.」があるかのチェックも行う。
- CopilotとChatGPTはDir関数利用でシンプルに実装。
-
コードの品質
- Geminiはエラーハンドリングを実装し、オブジェクトの解放も丁寧。
- Claudeはユーザーフレンドリーにメッセージボックスで結果報告を行う。
- Grokはシンプルで読みやすいがエラーハンドリングなし。
- Copilotは開始セルの妥当性チェックを行い、無効なセル指定時にメッセージを表示。
- ChatGPTは開始セルチェックを行うが、エラーハンドリングは簡素。
-
拡張性と実用性
- Geminiが最も堅牢で実用的。エラー対応やケースに応じた処理が充実。
- Claudeはユーザー通知があり親切だが、ファイル取得にDirを使うためFileSystemObjectに比べて柔軟性はやや劣る。
- Grokは基本的な要件を満たしつつシンプルでわかりやすい。
- CopilotとChatGPTはシンプルで使いやすいが、エラー処理が限定的。
総評
この比較は、同一の機能を複数のAIがどのように実装するかを示す良い例であり、各AIの得意分野やコードスタイルの違いがよくわかります。特にGeminiのコードは堅牢性と可読性のバランスが良く、実務での利用に適していると評価できます。一方で、Claudeのユーザー通知機能やCopilotのセルチェックも実用的な工夫です。
まとめると、この比較はAIによるコード生成の多様性と品質を具体的に示しており、VBAの初心者から中級者まで参考になる内容です。コードの完成度や実用性の観点からはGeminiが最も優れていると感じられますが、シンプルさを求めるならGrokやChatGPTも十分実用的です[1]。
[1] https://w.atwiki.jp/9metisailog/pages/32.html
私の感想
- Grok長文入力できるので優秀
- Perplexityアドレスの先の内容を取得する能力と要約優秀