14歳の自分に衝撃の事実を告げてください

このvbaどこが間違ってるでしょうか?条件合ってる気がするのですが指定ファイルがないと出ます。
Excelファイル名
・ZAX0278A-11_4U07_MG-001486KED_20240727_OK

・C1セル;ZAX0278A-11  ・F1セル;4U07   ・A6セル以降;1486KED



Sub SearchAndListFiles()
Dim ws As Worksheet
Dim outputWs As Worksheet
Dim folderPath As String
Dim searchPattern As String
Dim fileName As String
Dim folderName As String
Dim filePath As String
Dim cell As Range
Dim searchStr As String
Dim baseFolder As String
Dim formattedCellValue As String

' シートの設定
Set ws = ThisWorkbook.Sheets("Sheet1")
Set outputWs = ThisWorkbook.Sheets("出荷時設定")

' セルの値を取得
Dim C1 As String, F1 As String
C1 = ws.Range("C1").Value
F1 = ws.Range("F1").Value

' C1に基づいて検索するフォルダーを決定
If C1 = "ZAX0278A-11" Then
folderName = "ハンファ"
ElseIf C1 = "ZAX0277A-11" Then
folderName = "汎用"
Else
MsgBox "C1セルの値が無効です。"
Exit Sub
End If

' ベースフォルダーパスを設定(必要に応じてベースパスを調整)
baseFolder = "C:\BaseFolder\" & folderName & "\"

' A列の6行目から下のセルをループ
For Each cell In ws.Range("A6:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
' A列のセル値を6桁になるように変換
formattedCellValue = Format(Mid(cell.Value, 1, Len(cell.Value) - 3), "000000") & Right(cell.Value, 3)

' 検索パターンを生成
searchPattern = "*" & C1 & "_" & F1 & "_*-" & formattedCellValue & "*OK*.xlsx"

' パターンに一致するファイルを検索
fileName = Dir(baseFolder & searchPattern)

' ファイルが見つかった場合
If fileName <> "" Then
Do While fileName <> ""
' 見つかったファイル名を「出荷時設定」シートに書き込む
outputWs.Cells(outputWs.Cells(outputWs.Rows.Count, "A").End(xlUp).Row + 1, 1).Value = fileName
' 次のファイル名を取得
fileName = Dir()
Loop
Else
MsgBox "ファイルが見つかりませんでした: " & searchPattern
End If
Next cell

MsgBox "検索が完了しました。"
End Sub

A 回答 (5件)

上があり


Trueにするかに迷い "の変換でコピペ ミスしました
良く確認する必要があるのは 私ですね
    • good
    • 0

VBAで比較処理をしているので


ファイルが見つかりませんと言う結果なら 実際にDir関数で見つけられないのでしょう

凡そ、スペースの混入、文字種の相違、半角全角なのでしょうけれど・・・
baseFolder = "C:\BaseFolder\" & folderName & "\" の書き間違いとか

ファイル名に自身があるのなら パスが架空のフォルダ名になっているとか・・(タイポなど)

フォルダパスが間違っているのかファイル名が間違っているのか、
コードが間違っているのか セルの値が間違っているのか 
どうあるべきなのかは分かりませんね

良く確認してみて・・・

フォルダパスのみを確認するには
If Dir("C:\BaseFolder\" & folderName, vbDirectory) <> "" Then
Debug.Print "なし"
Else
Debug.Print "なし"
End If
とか・・・

質問と違うところで
実際にどうなのか分からないけれど
Loop の下に Exit For は要らないの?
それともフォルダパスの取得位置を間違えているとか・・・
    • good
    • 0

No2です。


fileName = Dir(baseFolder & searchPattern)
でファイルの検索を行っているので、
見つからない場合の
MsgBox "ファイルが見つかりませんでした: " & searchPattern
の行の下に
MsgBox (baseFolder & searchPattern)
を追加して、検索内容に一致したファイルが存在するか否かを確認されてはいかがでしょうか。
    • good
    • 0

こちらで動作確認すると、


「検索が完了しました。」が表示されますので、マクロは正しく動作しています。
①Sheet1のC1,F1の内容、A6の内容の確認
②C:\BaseFolder\ハンファ の下に
ZAX0278A-11_4U07_MG-001486KED_20240727_OK.xlsx
が存在することの確認(拡張子も確認)
を行ってください。
    • good
    • 0
この回答へのお礼

返信ありがとうございます
コード前に書いてある条件はExcel名をコピーして貼り付けて、セル値もそのまま貼り付けて質問していますのでそこが間違ってることは無いと思いますがファイルが見つかりませんになるのでどこかが条件設定が間違っているのかと思っています

お礼日時:2024/08/04 10:46

こんばんは



>条件合ってる気がするのですが指定ファイルがないと出ます。
「気がする」ではなく、実際に使用している値をチェックしてみれば、直接の原因がわかるのではないでしょうか?

 MsgBox baseFolder & searchPattern
とか・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A