部分的なファイル名に基づくインポート(Microsoft Excel)
Iraは、マクロを使用してExcelにインポートするテキスト区切りファイルを毎週受け取ります。ファイル名は毎週同じだったので、Iraはそれをマクロに埋め込むことができました。これにより、インポートが非常に簡単になりました。最近、ベンダーの新しいシステムは毎週ファイル名を変更し始めましたが、最初の12文字は常に同じままです。 Iraは、毎週ファイル名を変更することなく、このテキストファイルをインポートするマクロをどのようにコーディングできるのか疑問に思います。
この問題に取り組む方法はいくつかありますが、それらはすべて、マクロの大規模な再コーディングを意味する場合があります。選択する方法は、毎週どのように仕事をしたいかによって異なります。たとえば、受信ファイルが保存されているディレクトリ、ファイル名の基数12文字、およびファイル名拡張子がわかっているとします。その情報を使用して、次のように、ファイル名のサフィックスを指定するようにユーザーに求めることができます。
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sSuffix As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sSuffix = InputBox("Enter suffix for filename") sFileName = sBase & sSuffix & sExt Workbooks.Open Filename:=sFileName End Sub
もちろん、必要に応じてベースと拡張子を変更できます。この例では、CSVファイルをインポートしていることを前提としています。CSVファイルはExcelで問題なく開くはずです。
ファイルのグループをフォルダーに配置するだけで、それらすべてを開きたい場合は、ユーザー入力を取得する必要がないため、コードの実行が少し速くなります。
Sub OpenImportFiles() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = Dir(sBase & "*" & sExt) If sFileName = "" Then MsgBox "No Files Found" Else Do While sFileName > "" Workbooks.Open Filename:=sFileName sFileName = Dir Loop End If End Sub
このアプローチでは、フォルダー内のすべてのCSVファイルが開きます。別の種類のファイルを開くには、sExt変数に格納されているものを変更するだけです。覚えておくべきことの1つは、フォルダー内のすべてのCSVファイルが開かれているため、前の週のインポートファイルが開かれる可能性があることです。 (これはあなたが望むものかもしれないし、そうでないかもしれません。)
このヒントでこれまでに説明したことはすべて、ファイルを「インポート」するときに、ファイルを開いて作業できるようにすることだけを前提としています。そうではないかもしれません。マクロでインポートファイルを何らかの方法で処理し、それを使って何かを実行したい場合があります。その機能はすでに古いマクロに含まれている可能性があるため、インポートファイルの識別方法を変更するだけです。この場合、使用するコードは、このヒントですでに示したコードから適合させることができます。
テキストファイルからデータを取得してワークブックに詰め込むもう1つの方法は、このサンプルコードに示すように、OpenTextメソッドを使用することです。:
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = sBase & "*" & ".txt" Workbooks.OpenText Filename:=sFileName, Origin:= _ xlMSDOS, StartRow:=1, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:= False, Space:=False, _ Other:=False, FieldInfo:=Array(1, 1), _ TrailingMinusNumbers:=True End Sub
OpenTextメソッドの機能を完全に調べることはこのヒントの範囲を超えていますが、その結果、ベース12文字で始まるすべての区切りテキストファイルをワークブックで開く必要があります。
パラメータを変更することで、メソッドの動作を変更できます。使用する区切り文字を指定するために使用されるパラメーターに特に注意を払う必要があります。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(13472)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。