• ベストアンサー

エクセルVBAでファイルを連続して処理する方法は

エクセルVBAで、エクセルファイルを開いた状態で特定処理を行う仕組みを作りました。 ただ、複数のファイルを処理したいのですが、いちいちファイルを開いてから処理しなければならないため効率が今ひとつです。 ファイル名称をテーブル化するなどして、一気に連続して処理するようにしたいのですが、どのように行えばいいでしょうか。 また、処理したいのは、更新日付が一定日以降のエクセルファイルです。 更新日付と対象ファイルのフォルダーを指定すれば、更新日がそれ以降のファイルを検索し、それが順次処理されていくようなVBAをつくりたいと考えています。 部分的にでもよいので、どなたか分かる方、教えてください。 ちなみにエクセルのバージョンは2000です。 よろしくお願いします。

  • touha
  • お礼率100% (48/48)

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

> 選択フォルダのサブフォルダをのものも含むようにはできないでしょうか。 再帰処理すればできますよ。 Microsoft Scripting Runtime を参照してから、次のコードを試してみて 下さい。 取り急ぎで書いたので、エラーがあるかもしれませんが。。。 まあ、環境によっては使えませんし、推奨はできないのですが、FileSearch を使ってもサブフォルダを含めた検索はできます。調べればサンプルはすぐ でてくると思いますよ。 ご参考までに。 Private mDateFilter As Date Sub フォルダ内のXLSファイル順次処理()   Dim fso As FileSystemObject   Dim sDir As String      ' // 日付のフィルタ条件設定 例)10日前の 0:00 以降更新のファイルを対象とする場合   mDateFilter = DateAdd("d", -10, Date) + TimeValue("00:00:00")   ' // 対象ファイルのあるフォルダを指定   sDir = BrowseForFolder()   If Len(sDir) = 0 Then     Exit Sub   End If   Set fso = CreateObject("Scripting.FileSystemObject")      Dim fld As Folder   Dim iRes As Integer      If fso.FolderExists(sDir) Then     Set fld = fso.GetFolder(sDir)     iRes = 0     If fld.SubFolders.Count > 0 Then       iRes = MsgBox("サブフォルダも検索しますか?", _              vbYesNoCancel Or vbInformation)     End If     Select Case iRes       Case vbYes:  Call FindFiles(fld, True)       Case vbNo, 0: Call FindFiles(fld, False)       Case Else:  ' // User Cancel     End Select   End If      Set fld = Nothing   Set fso = Nothing End Sub ' // XLS ファイルを検索するサブプロシージャ Private Sub FindFiles( _   ByRef fld As Folder, _   ByVal fCheckSubfolders As Boolean _ )   ' // ファイルへの処理   Dim f   As Object   For Each f In fld.Files     If f.Name Like "*.xls" And f.Name <> ThisWorkbook.Name Then       If f.DateLastModified >= mDateFilter Then         ' // 処理例         Call MainProc(f)       End If     End If   Next   ' // サブフォルダ検索オプション   Dim subFolder As folder   If fCheckSubfolders Then     ' // 再帰呼び出し     For Each subFolder In fld.SubFolders       Call FindFiles(subFolder, True)     Next   End If End Sub ' // メイン処理 -- FindFiles から順次呼び出されます Sub MainProc(ByRef f As file)   ' // ここにご自分で書いたプロシージャを   ' // とりあえず、セルにでも書き出してみます   Dim i As Long   i = Cells(Rows.Count, "A").End(xlUp).Row + 1   Cells(i, "A").Value = f.Name   Cells(i, "B").Value = f.DateLastModified End Sub ' // フォルダ選択ダイアログ Private Function BrowseForFolder() As String   Const BIF_RETURNONLYFSDIRS = &H1   Dim fld As Object   Set fld = CreateObject("Shell.Application") _        .BrowseForFolder(0&, "選択します", BIF_RETURNONLYFSDIRS)   If Not fld Is Nothing Then     BrowseForFolder = fld.Self.Path   End If   Set fld = Nothing End Function

touha
質問者

お礼

ご回答ありがとうございました。 >Microsoft Scripting Runtime を参照してから、次のコードを試してみて >下さい。 「参照設定」でMicrosoft Scripting Runtimeをチェックすることで、 動作することができました。 勉強不足ですみませんでした。 すばらしいプログラムを大変ありがとうございました。

touha
質問者

補足

ご回答本当にありがとうございます。 ただ実行してみたのですが、 Private Sub FindFiles( _ ByRef fld As folder, _ ByVal fCheckSubfolders As Boolean _ ) のところで、「コンパイルエラー ユーザ定義型は定義されていません」 とメッセージが出て、止まってしまいました。 知識不足で、よくわかりません。 本当に度々すみません。 先ほどのまではきちんと動いていたのですが。。。

その他の回答 (8)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.9

#2・#7です。KenKenSPさんが、親切に書かれているので、当方はさわりだけ解説させていただきます。 >Call searchSubFolder(FSO.GetFolder(folderName)) 以上までで、指定フォルダーの下位のフォルダーにあるファイルも含め全てのファイルのリストが出来ています。正確にはリストではなくて、File System Objectの、Fileオブジェクトの集合ですが。 >For i = 1 To fileList.Count >With fileList(i) >Debug.Print .Path; >Debug.Print .DateLastModified >End With >Next ここで、個々のFileオブジェクトにアクセスしています。ここではiで指定していますが、#6の様に、For Eachでアクセスする方法もあります。 #6の下記の部分に相当します。下記での、fld.Filesが、当方のfileListに、fがfileList(i)に相当する訳です。 For Each f In fld.Files     If f.Name Like "*.xls" And f.Name <> ThisWorkbook.Name Then       If f.DateLastModified >= mDateFilter Then         ' // 処理例         Call MainProc(f)       End If     End If   Next ご参考まで。

touha
質問者

お礼

ご回答ありがとうございました。 KenKenSPさんが提供してくださったプログラムが動かせるようになりました。 「参照設定」というものがわかっていませんでした。。。 上記のご回答大変ありがとうございます。 ひとつひとつ確認してみます。 長らくご面倒をおかけし、すみませんでした。 解決できて本当に助かりました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

> 「コンパイルエラー ユーザ定義型は定義されていません」 ↓ これが必要です。ちゃんと書いてありますよ。 > Microsoft Scripting Runtime を参照してから 参照設定のことですが、キーワードは提示してますから、知らない 言葉がでてきたら Web 検索なりをして下さい。なるべく専門用語 を使わない文書を心がけていますが、プログラムの世界においては 全てを解説することは不可能です。 > 次処理されていくようなVBAをつくりたいと考えています。 アーリーバインド(参照設定しておくこと)に切り替えたのは、 これまでの質問者・回答者のやり取りの流れからみて、ご質問主に とって FileSystemObject について理解の手助けになり、また改造 するとき少しでも容易になるようにと考えてのことです。   ※ コーディング時に入力候補がでてくる     fso. まで入力すると次につづく候補がポップアップ     されます。     つまり、FileSystemObject に関するキーワードの     リストが得られます。 せっかくの機会ですから、全てを頼らず、ご自分で調べることを して、理解を深めて下さい。

touha
質問者

お礼

本当にいろいろありがとうございました。 やっとわかりました。 「参照設定」というところで、「Microsoft Scripting Runtime」を チェックすればいいんですね。 これで、きちんと動きました! すみません。動かないときは何かパニックになってしまっていました。 ありがとうございました。助かりました。

touha
質問者

補足

ご回答ありがとうございます。 >↓ これが必要です。ちゃんと書いてありますよ。 >> Microsoft Scripting Runtime を参照してから すみません。「Microsoft Scripting Runtime」はGOOGLEで 検索してみたのですが、わけがわからなかったので、とりあえず動かしてみました。 >せっかくの機会ですから、全てを頼らず、ご自分で調べることを >して、理解を深めて下さい。 仰る通りです。。。反省します。 もう少し勉強してみます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.7

#2です。 平日は夜しかアクセスできないので、対応が遅れて済みません。皆さん、バグ修正ありがとうございます。 照れ隠しに、再帰版を作成していたら、またまたKenKenSPさんに先を越されてしまいましたが、参照設定不要版です。検索していません、総当たりです。当方の7500位ファイルがあるフォルダーで、ファイルリスト取得自体は数秒(遅いCeleron)ですが、Debug.Printの方で時間がかかっています。 Dim fileList As Collection Dim FSO As Object Sub searchFolder() Dim folderName As String Dim i As Long folderName = "C:\Documents and Settings\?????\My Documents" Set FSO = CreateObject("Scripting.FileSystemObject") Set fileList = New Collection Call searchSubFolder(FSO.GetFolder(folderName)) For i = 1 To fileList.Count With fileList(i) Debug.Print .Path; Debug.Print .DateLastModified End With Next Set FSO = Nothing End Sub Private Sub searchSubFolder(parentFolder As Object) Dim subFolder As Object Dim myFile As Object For Each subFolder In parentFolder.SubFolders Call searchSubFolder(subFolder) Next subFolder For Each myFile In parentFolder.Files fileList.Add Item:=myFile Next myFile Set parentFolder = Nothing End Sub

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html
touha
質問者

お礼

ご回答ありがとうございました。 KenKenSPさんが提供してくださったプログラムが動かせるようになりました。 すみません。動かなくなって、どうすることもできなくて、 慌ててしました。 「参照設定」というものがわかっていませんでした。。。 もっと勉強します。 本当にありがとうございました。 助かりました。

touha
質問者

補足

本当にみなさんありがとうございます(泣)。 親切が、心に染みます。 でも、もう少しお願いを聞いていただけると。。。 上記のプログラムですが、「更新日付の検索」部分を入れていただき、 「ファイルをオープンする場所(できれば記述も)」と、「私がつくっているファイル単位の処理部分を挿入する場所」を教えていただけると、大変助かります。 これでなんとかなるかも。。。 手がかかってすみません。。。 お願いできますでしょうか。。。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

#2と同じですが・・・ 指定フォルダ(fp)と比較する日付(d_day)から対象とするエクセルファイルを選別しています。 '***~'***の間に、対象ファイルへの処理(ワークブックオープンから保存までの一連の処理)を記載すれば、連続して処理できます。 下の例では、現在開いているシートにファイル名と更新日付のリストをのA1から順に記入しています。実際には、そのかわりに処理内容を記述しておけばリストを作成する必要はなくなります。 (エクセル2007から拡張子が変わったようですが、2000とのことなのでOKでしょう) Sub test() Dim fs, fl, f, i fp = "D:\data\5 WEBツール\TESTrandom" '←対象とするフォルダのパス d_day = #7/30/2008# '←比較する日付 i = 1 Set fs = CreateObject("Scripting.FileSystemObject") Set fl = fs.GetFolder(fp) For Each f In fl.Files   If (fs.GetExtensionName(f.Path) = "xls") And _      (f.DateLastModified >= d_day) Then '***エクセルファイルに対する処理を記載する     Cells(i, 1).Value = f.Name     Cells(i, 2).Value = Format(f.DateLastModified, "yyyy/mm/dd")     i = i + 1 '*** ここまで   End If  Next  fs = Null  fl = Null End Sub

touha
質問者

お礼

ご回答ありがとうございました。 他の方法でなんとか解決できました。 大変ありがとうござました。 いろいろな方法があることがわかりました。 勉強になりました。

touha
質問者

補足

ご回答ありがとうございます。 みなさんに助けていただいて恐縮です。 恐縮ついでで、サブフォルダまで参照できるようになると素晴らしいなあと思います(汗)。 いや、本当に、もし気が向いたらお願いします。。。 とてもシンプルにつくってあって素晴らしいと思います。 本当にありがとうございます!

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

#3 です。ほとんど #2 ご回答のままですが、一例です。 ※ 部において f.Path でフルパスが得られますから、   Set wb = Workbooks.Open(f.Path) などとしてブックを開き、後はご自分で書いたコードを呼び出す なりして下さい。 Sub Sample()   Dim sDir   As String   Dim dtmFilter As Date   ' // フィルタリング条件 例)本日より10日前の 0:00 以降   dtmFilter = DateAdd("d", -10, Date) + TimeValue("00:00:00")   ' // 対象ファイルのあるフォルダを指定   sDir = BrowseForFolder()   If Len(sDir) = 0 Then     Exit Sub   End If   ' // フォルダ内のファイル順次処理   Dim fso  As Object ' FileSystemObject   Dim f   As Object ' File   Dim i   As Long   Set fso = CreateObject("Scripting.FileSystemObject")   i = 1   If fso.FolderExists(sDir) Then     For Each f In fso.GetFolder(sDir).Files       ' // ファイル名でフィルタ       If f.Name Like "*.xls" And f.Name <> ThisWorkbook.Name Then         ' // 更新日付けでフィルタ         If f.DateLastModified >= dtmFilter Then           ' // 処理例 ------------------------※           Cells(i, "A").Value = f.Path           i = i + 1         End If       End If     Next   End If   Set fso = Nothing End Sub ' // フォルダ選択ダイアログ Private Function BrowseForFolder() As String   Const BIF_RETURNONLYFSDIRS = &H1   Dim fld As Object   Set fld = CreateObject("Shell.Application") _        .BrowseForFolder(0&, "選択します", BIF_RETURNONLYFSDIRS)   If Not fld Is Nothing Then     BrowseForFolder = fld.Self.Path   End If   Set fld = Nothing End Function

touha
質問者

お礼

ご回答大変ありがとうございます。 サブフォルダの参照方法も後で教えていただき大変ありがとうございました。

touha
質問者

補足

ご回答大変ありがとうございます。 試してみたら、できているような感じがします。よく確認してみます。 本当に感謝いたします。 ただ、ひとつだけ確認なのですが、フォルダー選択を行った場合、 処理対象のファイルを、選択フォルダのサブフォルダをのものも含むようには できないでしょうか。 勉強不足ですみません。ご確認のほどお願いします。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。横レス失礼します。 > For Each myFile In fileList Files コレクションの For Each ループですから、 > modifiedDate = FSO.GetFile(myFile.Name).DateLastModified    ↓  modifiedDate = myFile.DateLastModified と書いた方が良いと思います。 エラーの原因ですけども、FileSystemObject の   ・Name で得られるもの  例)test.xls   ・Path で得られるもの  例)C:\sample\test.xls という点を押さえてください。Name で GetFile した場合は、 フルパスではありませんから、カレントフォルダなどでないと > 実行時エラー’53’ ファイルが見つかりません となりますよね。修正すれば、  modifiedDate = FSO.GetFile(myFile.Path).DateLastModified となります。

touha
質問者

お礼

ご回答ありがとうございます。 > 実行時エラー’53’ ファイルが見つかりません この問題解決しました。 大変ありがとうございました!!!

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

あるフォルダー中の全ファイルの更新日を取得して、シリアル値に変換するのを試しにやってみました。これだと、検索では無くて、総当たりで拡張子と、更新日付を調べる事になるので、フォルダー中に多量のファイルがあると時間がかかって不適当かも。ご参考まで。 Sub test() Dim FSO Dim fileList As Object Dim myFile As Object Dim modifiedDate As String Dim modifiedDateSerial As Double Set FSO = CreateObject("Scripting.FileSystemObject") Set fileList = FSO.GetFolder("C:\Documents and Settings\?????\My Documents").Files For Each myFile In fileList Debug.Print FSO.GetExtensionName(myFile) modifiedDate = FSO.GetFile(myFile.Name).DateLastModified modifiedDateSerial = DateValue(modifiedDate) + TimeValue(modifiedDate) Debug.Print Format(modifiedDateSerial, "ggge""年""m""月""d""日""") Next Set FSO = Nothing End Sub

参考URL:
http://officetanaka.net/excel/vba/filesystemobject/file.htm
touha
質問者

お礼

ご回答ありがとうございました。 「実行時エラー’53’ ファイルが見つかりません」 の件、後のご回答で解決しました。 ありがとうございました。

touha
質問者

補足

ご回答ありがとうございました。 ただ、実行してみたのですが、うまくいかないのです。 基本的な知識がないからだと思います。すみません。 ("C:\Documents and Settings\?????\My Documents") のところは、自分の該当フォルダーに変更しました。 それで実行したところ、 modifiedDate = FSO.GetFile(myFile.Name).DateLastModified の行で、「実行時エラー’53’ ファイルが見つかりません」 というメッセージが出て止まってしまいます。 (該当のフォルダには複数のファイルが存在しています。  エクセルのファイルもあります)いろいろ試してみたのですがわかりませんでした。 すみませんが教えていただけると助かります。お手数ですがよろしくお願いします。

noname#187541
noname#187541
回答No.1

こんばんは。 開くファイルをリスト化できるのであれば「ファイルを開く」こと自体もマクロで行うようにすればいいと思います。 この場合は、処理を開始するために処理するファイルと別のファイルで処理をするようにすればいいでしょう。 処理用のファイルのシートに開くファイルのリストを作り、そのリストを基に処理を繰り返すようにします。

touha
質問者

お礼

ご回答ありがとうございました。 後で沢山の人に教えていただきながら、なんとか解決することができました。 あまりにも知識がなくてご迷惑をおかけしすぎて、恐縮です。 でも動いてよかった。 最初にご回答いただき、大変うれしかったです。 ありがとうございました。

touha
質問者

補足

ご回答ありがとうございます。 >開くファイルをリスト化できるのであれば「ファイルを開く」こと自体もマクロで行うようにすればいいと思います。 これはなんとなくわかります。 >この場合は、処理を開始するために処理するファイルと別のファイルで処理をするようにすればいいでしょう。 これもわかるような気がします。 >処理用のファイルのシートに開くファイルのリストを作り、そのリストを基に処理を繰り返すようにします。 これってどうやってやるのでしょう??? ファイルのリストができたとして、順々に処理するのって結構難しそう。また、リストの終了時にうまく処理から抜けて、処理全体を終了するのってどうやるのでしょう??? すみませんが、教えて欲しいです。。。

関連するQ&A

  • エクセルVBAで、元になるファイルをコピーし、ファイル名を連続した日付

    エクセルVBAで、元になるファイルをコピーし、ファイル名を連続した日付としたいのですが、 ボタン一つで、ファイル名を、2010.1.1請求書.xls~2010.1.31請求書.xlsとして、 2010.1.1請求書のシート1のA1セルに、その日付2010.1.1を入力保存し、ファイルを連続作成する コードはどのようになるのでしょうか?  VBA初心者です。ご教授お願いします。

  • エクセル_VBA

    エクセルVBAで一定の時間でデータの処理(自動更新)ができる方法があれば教えてください。

  • エクセルVBAでの自動ファイル保存

    エクセルVBAを使い入力したシート(ファイル)を、一定のデータが 入力された時点で指定した場所に例えば作成日をファイル名にして自動 的に保存していくようにしたいのですが、プログラムはどのようにすればいいのでしょうか? 実現させたいプログラムは、このような感じにしたいです。 1.VBAで指定シートにデータ入力→2.データ数10個で自動的に日付をファイル名にして自動的に保存→3.更に、データ10個追加された時点で前に作成されたファイルを自動で更新→4.データの入力完了で更に自動で更新 2~4のプログラムをご教授お願いします。

  • Excel VBAについて

    Excel VBAについて ExcelのセルA1に日付データ(yyyy/mm/dd hh:mm)が入っています。 このエクセルファイルを開いている間、セルA1の日付(時分)が更新されたらマクロを実行するようにしたいのですが、どのようにしたらよいのでしょうか。 セルA1の日付データが更新されるタイミングは決まっていません。 セルA1の日付データが更新されたらマクロ実行というのが難しいのであれば、 10秒おきにマクロを実行というようなことができないでしょうか。 ご教授願います。

  • ACCESS(VBA)でエクセルファイルを開く時

    VBAでエクセルファイルを開いて処理していますが 一つのエクセルファイルを開いている時に(これは手操作) VBAからエクセルファイルを開くと 一瞬、開いたような反応を示すのですが すご、閉じてしまい 用を足しません こんな時、VBAで今開こうとするエクセルファイルを 優先的に開けたら、と思いますが むりでしょうか? よろしくお願いします

  • excel VBA 新しいエクセルファイルの作り方

    エクセルのVBAについて、 特定のエクセルファイル(Aとします。)の情報を 下記の場所にあるエクセルファイル原紙に "C:¥Users¥Desktop¥原紙.xlsx" 書き写して、同じ場所に 新しいエクセルファイルを作成したいです。 エクセルファイルAの C3の左から4文字を原紙のN12 C3の右から4文字を原紙のP12 D3を原紙のD12 E3を原紙のL12 F3には日付(例 2023/3/12)となっていて、 月だけを取り出して原紙のB12 日だけを取り出して原紙のC12 にしたいです。 尚、エクセルファイルAのデータは1行だけではないので、 上記を最終行までループしたいです。 ループ後に名前を付けて保存で "C:¥Users¥Desktop¥20230312.xlsx" のように、その日付名前で保存したいです。 また、日付毎にエクセルのファイルをわけたいのですが、 ここのやり方が全く思いつかず、困っています。 エクセルのファイルAの情報で F3から↓が 3/12 3/14 3/12 となっていた場合に3/12で一回ファイルを保存して、 3/14で新しく原紙ファイルを開いて、保存して 既に保存されている日付の場合は、そのエクセルファイルを 開いて("C:¥Users¥Desktop¥20230312.xlsx") 記入していくようにしたいです。 説明が難しく、複雑ですが どなたかご教授頂けないでしょうか。 初めからどのように書いたらいいか教えていただけると幸いです。 お手数をおかけしますが、回答よろしくお願いいたします。

  • access VBA でテキストファイルの編集をしたい

    既に退社した前任者の代から受注データを本社のサーバからダウンロードしてエクセルで加工するファイルがあるのですが、日々更新されるのも不都合が出てきましたのでなんとかアクセスのデータに日々蓄積したくなりました。 毎日日付を含む名前のファイルがアップされFTPで○月○日のファイルを受信するのですが、バッチファイルとテキストファイルをを使ってFTPの受信をしていました。 1、VBAでテキストファイルの日付を変更する。(任意の日付) 2、VBAからバッチファイルを実行し、先に変更した日付のファイルを受信する。 これをアクセスで同じことをしたいです。 フォームにテキストボックスを作って、そこに日付を入れるようにして、VBAでテキストファイルの日付をテキストボックスにある日付に変更して、それから・・・まだ工程はあるのですが、まずテキストファイルが変更できないと先へ進めません。 エクセルのVBAは少しは判るのですが、accessVBAは初心者です。 よろしくお願いします

  • Excel VBAの連続印刷について。

    Excel VBAをこれから始めてみようとしている超初心者です。 手始めとして、以下の処理をさせてやろうかと思っていたのですが いきなり挫折しまいました。。 ◎Sheet1から順番に最終シートまでを連続印刷。 ◎最終シートまで印刷されたら処理終了で、Sheet1を表示させる。 ・データによってシート数は変動する。最終がSheet50の時もあれば  Sheet300の時もあり。 ・シート名は「Sheet」+半角数字で、連続している。 シート名を変数にして、1ずつ加えていって…と考えながら、色々と 繰り返し処理についてもネットで調べてみたのですが、結局頭の中で 行き詰ってしまいました。 非常に簡単な処理だとは思うのですが、どのような書き方があるのか ご教示頂ければ助かります。 宜しくお願いします。

  • Excelファイル連続置換vba

    Excelで複数の文字列を一気に置換するvbaを教えていただけないでしょうか。 Book2の置換リストをBook1のSheet1に完全一致で置換したいのです。 Book1.xlsx:元ファイル Book2.xlsx:置換リスト ※下記のような配列 A列 B列 1 01_1 2 02_2 3 03_3 4 04_4 以上です。 よろしくお願いいたします。

  • EXCEL 2003のVBAでテキストファイルの取り込み方

    EXCEL 2003のVBAでテキストファイルの取り込み方 EXCEL 2003のVBAでテキストファイルのみをとりこむものを組もうと思います。 - 読み込むテキストファイル名は一定の決まりがあります。AAxxxx.txt あるいは ZZxxx.txt といった感じで先頭文字はAAまたはZZで中のxxxは数字の可変(日付)です。 - Directoryはどこに入るか決まりがありません。(このマクロを使用するユーザーがどこのDirectoryにテキストファイルを保存しているかわからないため) FILEN = Application.GetOpenFilename If FILEN = False Then Exit Sub End If Workbooks.OpenText Filename:=FILEN でやると、Directoryの問題は解決しますが、テキストファイル名を絞り込めません いい方法をご教示いただければ助かります。

専門家に質問してみよう