atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
第9小惑星保管施設
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
第9小惑星保管施設
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
第9小惑星保管施設
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 第9小惑星保管施設
  • 各AI生成比較2

第9小惑星保管施設

各AI生成比較2

最終更新:2025年06月18日 15:31

9metisailog

- view
管理者のみ編集可

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が一番良かったか、私の意見もシェアするよ!それじゃ、早速見てこう!


評価のポイント

  1. 要件の充足度:
    • 列方向にファイル名を出力(A1, A2, A3...)。
    • 開始セルを引数で指定(デフォルトA1)。
    • 拡張子フィルタを引数で指定(デフォルトは全てのファイル)。
    • ブックのフォルダを対象にファイル一覧を取得。
  2. エラーハンドリング:エラー時の処理や不正な入力への対応。
  3. 可読性:コードの構造、コメント、変数名の分かりやすさ。
  4. 効率性:処理速度やリソース使用の最適化。
  5. 追加機能:要件を超えた便利な機能や工夫。

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を使ってブックのフォルダを取得する場合、通常は以下のような状況で「フォルダが存在しない」エラーが発生する可能性があるよ:

  1. ブックが保存されていない場合:
    • 新規ブック(Book1.xlsxなど)でまだ保存していない状態だと、ThisWorkbook.Pathは空文字列("")を返す。
    • この場合、フォルダパスが無効で、FileSystemObject(FSO)やDir関数がエラーを吐く(例:Path not found)。
  2. ネットワークドライブやリムーバブルメディア:
    • ブックがネットワークドライブやUSBドライブに保存されている場合、ネットワーク切断やUSB抜去でフォルダがアクセス不能になる。
  3. 権限の問題:
    • フォルダへのアクセス権がない場合、FSOやDirがエラーを起こす可能性。
  4. 予期せぬエラー:
    • フォルダが削除された、またはパスが壊れている(例:不正な文字を含むパス)場合もエラーになる。

つまり、「ブックがあるんだからフォルダも絶対あるでしょ!」と思いがちだけど、実際は上記のようなケースでエラーになる可能性があるよ。特に、自動化スクリプトや他のユーザーが使う場合、想定外の状況は起こりがち!


エラーハンドリングの必要性

エラーハンドリングを入れるメリットと、入れない場合のリスクを整理してみるね:

メリット

  • スクリプトの安定性:
    • フォルダが存在しない場合にスクリプトがクラッシュせず、ユーザーに分かりやすいメッセージ(例:「フォルダが見つかりません」)を表示できる。
    • 自動実行(例:マクロのスケジュール実行)でも、エラーで止まらずに処理を続けられる。
  • ユーザー体験の向上:
    • エラーメッセージで「何が起きたか」を伝えると、ユーザーが問題を理解して対処しやすい(例:ブックを保存してから再実行)。
  • デバッグの容易さ:
    • エラー内容をログに記録したり、具体的なメッセージを出したりすることで、問題の原因を特定しやすくなる。
  • 汎用性の向上:
    • 他のフォルダを指定するようにコードを拡張する場合、エラーハンドリングがあれば柔軟に対応できる。

リスク(エラーハンドリングがない場合)

  • クラッシュ:
    • FSOのGetFolderやDir関数が無効なパスで呼ばれたら、VBAがランタイムエラー(例:エラー番号76「パスが見つかりません」)で停止。
    • ユーザーにVBAのデバッグ画面が表示され、怖い思いをするかも(笑)。
  • 自動化の失敗:
    • バッチ処理や他のマクロと連動してる場合、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アドレスの先の内容を取得する能力と要約優秀

タグ:

Grok 全文 ChatGPT Claude Copilot Gemini 回答比較 Perplexity
「各AI生成比較2」をウィキ内検索
LINE
シェア
Tweet
第9小惑星保管施設
記事メニュー

メニュー

  • トップページ

  • Claudeとの会話(抜粋)
    • Claudeの仕様と使用について

  • Geminiとの会話(抜粋)


  • @ウィキに関連して
  • プラグイン紹介
  • メニュー
  • 右メニュー



リンク

  • @wiki
  • @wikiご利用ガイド




ここを編集
記事メニュー2

更新履歴

取得中です。


ここを編集
人気記事ランキング
  1. Claudeの仕様と使用について3:サマリ
  2. 睡眠不足で世界が二重に
  3. プラグイン/アーカイブ
  4. 厚生労働省のモデル就業規則のフォーマットをワードで
もっと見る
最近更新されたページ
  • 8日前

    フツノミタマ
  • 8日前

    トップページ
  • 9日前

    Vtuber認知度
  • 12日前

    厚生労働省のモデル就業規則のフォーマットをワードで
  • 16日前

    睡眠不足で世界が二重に
  • 19日前

    言語の進化と語彙の増減
  • 19日前

    RPAとPythonについてGeminiの会話を数回に分けて要約
  • 19日前

    RPAとPythonについて、Geminiの会話をGrokが要約
  • 19日前

    素粒子と時空の話
  • 28日前

    各AI生成比較
もっと見る
「ChatGPT」関連ページ
  • No Image トップページ
  • No Image 厚生労働省のモデル就業規則のフォーマットをワードで
  • No Image 各AI生成比較
人気記事ランキング
  1. Claudeの仕様と使用について3:サマリ
  2. 睡眠不足で世界が二重に
  3. プラグイン/アーカイブ
  4. 厚生労働省のモデル就業規則のフォーマットをワードで
もっと見る
最近更新されたページ
  • 8日前

    フツノミタマ
  • 8日前

    トップページ
  • 9日前

    Vtuber認知度
  • 12日前

    厚生労働省のモデル就業規則のフォーマットをワードで
  • 16日前

    睡眠不足で世界が二重に
  • 19日前

    言語の進化と語彙の増減
  • 19日前

    RPAとPythonについてGeminiの会話を数回に分けて要約
  • 19日前

    RPAとPythonについて、Geminiの会話をGrokが要約
  • 19日前

    素粒子と時空の話
  • 28日前

    各AI生成比較
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  6. ソードランページ @ 非公式wiki
  7. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  8. ドラゴンボール Sparking! ZERO 攻略Wiki
  9. 星飼いの詩@ ウィキ
  10. ヒカマーWiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 発車メロディーwiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. 英傑大戦wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. モンスター一覧_第2章 - モンスター烈伝オレカバトル2@wiki
  3. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  4. 高崎線 - 発車メロディーwiki
  5. 近藤旬子 - 馬主データベース@Wiki
  6. 地獄のデザイナーさん1 - 【トレパク】 きりつき 検証まとめwiki 【地獄のデザイナーさん】
  7. 召喚 - PATAPON(パタポン) wiki
  8. 細田守 - アニヲタWiki(仮)
  9. ステージ攻略 - パタポン2 ドンチャカ♪@うぃき
  10. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.