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

第9小惑星保管施設

ワープロエディタテストページ

最終更新:2025年06月18日 14:40

9metisailog

- view
管理者のみ編集可

・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`関数使用)にエラーハンドリングを追加するとこんな感じ:

```vba
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

「ワープロエディタテストページ」をウィキ内検索
LINE
シェア
Tweet
第9小惑星保管施設
記事メニュー

メニュー

  • トップページ

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

  • Geminiとの会話(抜粋)


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



リンク

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




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

更新履歴

取得中です。


ここを編集
人気記事ランキング
  1. obsidianで1字下げ
  2. Vtuber認知度
もっと見る
最近更新されたページ
  • 18時間前

    obsidianで1字下げ
  • 9日前

    フツノミタマ
  • 9日前

    トップページ
  • 10日前

    Vtuber認知度
  • 13日前

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

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

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

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

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

    素粒子と時空の話
もっと見る
人気記事ランキング
  1. obsidianで1字下げ
  2. Vtuber認知度
もっと見る
最近更新されたページ
  • 18時間前

    obsidianで1字下げ
  • 9日前

    フツノミタマ
  • 9日前

    トップページ
  • 10日前

    Vtuber認知度
  • 13日前

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

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

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

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

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

    素粒子と時空の話
もっと見る
ウィキ募集バナー
新規Wikiランキング

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

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

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

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

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

  1. 過去の行動&発言まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  2. マイティーストライクフリーダムガンダム - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  3. 魚拓まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  4. 参加者一覧 - ストグラ まとめ @ウィキ
  5. 1103環境(遊戯王) - アニヲタWiki(仮)
  6. 前作からの変更点 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  8. コレクター・ユイ - アニヲタWiki(仮)
  9. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  10. 画像倉庫 - 鹿乃つの氏 周辺注意喚起@ウィキ
もっと見る

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

2019 AtWiki, Inc.