2016-08-26 5 views
0

私は改善を図っているプロジェクトで少し助けを求めています。私はファイルパスとファイル名のブック内の2つのセルを使用してcsvファイル(約13000ファイルのフォルダから)の最新の日付を取得するために使用している関数を持っています。それは素晴らしい作品と私​​は非常に迅速に探しているファイルを見つけることができます。excel vbaを使用してCSVで特定のデータを確認する

このツールを改善するには、csvを調べて、いくつかの数値がブック内の別のセルと一致することを確認する必要があります。私はどのようにプログラムを見て、どのようにマッチをチェックするかをプログラムに伝える方法がわかりません。数字は毎回同じ場所にあり、ブックのセルとまったく同じ形式になります。 csvはカンマも使用しません(問題がある場合)。たとえば、数字は6番目の列と2番目の行に配置されます。私は最新の日付を返す前に私のA5セルの値でそれを確認したい。一致しない場合は、直近の次の日付を確認したいなどです。現在使用している関数:

Function ReportTime(ByVal sESN As String, ByVal sFolder As String) 
    Dim FileName As String 
    Dim MostRecentFile As String 
    Dim MostRecentDate As Date 
    Dim oFSO As FileSystemObject 

If Right(sFolder, 1) <> "\" Then sFolder = sFolder & "\" 

Set oFSO = CreateObject("Scripting.FileSystemObject") 
If oFSO.FolderExists(sFolder) Then 
    FileName = Dir(sFolder & sESN & "*hdr.txt", 0) 
    If FileName <> "" Then 
     MostRecentFile = FileName 
     MostRecentDate = FileDateTime(sFolder & FileName) 
     Do While FileName <> "" 
      If FileDateTime(sFolder & FileName) > MostRecentDate Then 
       MostRecentFile = FileName 
       MostRecentDate = FileDateTime(sFolder & FileName) 
      End If 
      FileName = Dir 
      DoEvents 
     Loop 
    End If 
Else 
    MostRecentFile = "Err: folder not found." 
End If 
Set oFSO = Nothing 

ReportTime = MostRecentDate 
End Function 
+0

"csvはカンマを使用しません" - もう少し詳しく説明する必要があります。カンマではない場合は何を使用しますか? –

+0

申し訳ありませんが、単なるテキストファイルです。私は今、どのように馬鹿だと思いますか? – Mblankfield

+0

CSVファイルは必ずしもカンマを使用する必要はありません。別のデリミタ(例えば、/または|または〜)を使用することができます。多くのプログラムでは、カンマで区切られた値でなくても、同じ方法で解釈できます。少なくとも、あなたはそれをどのように解釈するかをVBAに指示することができます。私は自分のアプリケーションでこれを行う必要がありました。 – SandPiper

答えて

1

これと同じように、あなたがすでに持っているものと比べて簡単です。ここにサンプルコードがあります。それは、ファイルを1行ずつ見ています。

Sub ReadTextFile() 
    Dim fpath As String 
    Dim fline As String 
    Dim fnumb As Long 
    Dim i  As Long 
    Dim Wanted As String 

    fpath = "C:\Test\Testfile.txt" 
    fnumb = FreeFile 
    Open fpath For Input As #fnumb 
     i = 1 
     Do While Not EOF(fnumb) 
      Line Input #fnumb, fline 
      If i = 2 Then 
       Wanted = Split(fline, vbTab)(5) '<~~ here is the output 
       Exit Do 
      End If 
      i = i + 1 
     Loop 
    Close #fnumb 
End Sub 

ファイルの行番号2に集中したい場合は、あなたのファイルがある場合i = 2

は、2行目のテキストをキャッチした後、その後、たとえば、タブ区切り、あなたが使用することができたときに、ちょうどそれをキャッチsplit(fline, vbTab)(5)で列6の内容を抽出します。そうでない場合は、ファイルが固定幅ファイルの場合は、単にMID関数を使用します。

必要なものを手に入れたら、ループ全体を終了してファイル全体を処理せずに手順をすばやく終了するには、ただexit doとしてください。

hth

+0

@TimWilliamsキャッチのためにありがとう!私はいつも彼らが1か0から始まるかどうか覚えていません。:D – Rosetta

関連する問題