エクセルのマクロ(VBA?)で、あるフォルダ内のファイル名を取得する(拡張子が.txtのもだけ)関数があれば教えてほしいのですが・・・

このQ&Aに関連する最新のQ&A

A 回答 (2件)

どもども 田吾作7です



Dim wkPath As String
Dim wkFile As String

wkPath = "c:\*.txt" ' パスを設定
wkFile = Dir(wkPath) ' 最初のファイル取得

Do While wkFile <> "" ' 取得できなくなるまでループ
Debug.Print wkFile ' 出力
wkFile = Dir ' 次のファイル名を取得
Loop

こんな感じ

でわでわ

この回答への補足

ありがとうございます。できました。
ついでに取得したファイル名をソート(五十音順)して、何か処理等するには、配列に入れて、配列をソートするようなことをすればよいのでしょうか?そのほか何か良い方法はあるのでしょうか?
よろしくお願いします。

補足日時:2001/07/13 16:01
    • good
    • 0

どもども田吾作7です。



ソートですか?たぶん文字コードでソートされた順番で取得してると思いますよ。。


別の質問で
>f_name = "d:\" + Trim(Str(i)) + ".txt"
としていましたね?

これで取得すると[1.txt],[10.txt],[2.txt],・・・[9.txt]となるはずです。
もしかして[1.txt],[2.txt],・・・[10.txt]としたいのですか?

これを回避するためには、桁を揃えるようにしましょう。
f_name = "d:\" + format(i,"00) + ".txt"

とすると、ファイル名は今までとちょっと変わってしまいますが
[01.txt],[02.txt],[03.txt],・・・[10.txt]
という順番に取得可能だと思います。

でわでわ
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Qフォルダ内の全フォルダ名を取得したい。

おはようございます。ちょっと教えてほしいことがあります。
VB6にて、あるフォルダ内にある複数のフォルダあります。
フォルダ名を全権取得したいのですが、全くできません。
フォルダ内のフォルダ名はどのように取得できるのでしょうか?
よろしくお願いします。

Aベストアンサー

大変失礼いたしました。

No2の方のご指摘の通り、ループ内で再度ディレクトリ名を取得する必要があります。 

あとはフォルダを識別するたにGetAttrを使う必要もあるかも。

(No2の方の意見を尊重して)
下記のソースをご覧ください。

参考URL:http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips068.htm

Qサーバ内のフォルダ名と各フォルダのサイズを取得

VBS初心者ですが、上司に依頼されて、次の目的のVBSを
作成することとなりましたので、皆様の知恵をお貸し下さい。

1、業務サーバー内に50前後のフォルダが存在する。
2、そのサーバ内のフォルダ名とサイズ(MB表示)を取得する。
3、最終的には、取得したフォルダ名とサイズをcsvで出力する。

現在は、月一でサーバー内の各フォルダのプロパティからサイズを取得して、
エクセルで管理をしているのですが、毎月のようにフォルダが10個単位で増減しているため、
作業に取られる時間が馬鹿にならないので、VBSにて一覧取得をできないか
と相談されました。
私のスキルでは、各フォルダ毎のファイル名とサイズを取得することは
出来るのですが、出来れば、一度の操作で全部の作業を終わらせたいので、
皆様のお力をお貸し下さい。

Aベストアンサー

追伸。
http://www.vector.co.jp/soft/cmt/win95/util/se030005.html
↑社内でフリーウェアの使用が認められていれば、このようなソフトは?
上記リンクは適当なフォルダに解凍して実行ファイルを開けば即座に実行されますし
(インストール不要なのでFDに入れておいて他PCでの作業も簡単)
ネットワーク対応、CSV出力対応なので楽チンです (^^ゞ

Qエクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(

エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(A1:X365)の値を取得し、コピー元のエクセルファイル名のシートに貼付ける方法を教えて頂けないでしょうか?できればコピー元のエクセルファイルは開かずに実行させたいです。エクセルは2003を使っています。

Aベストアンサー

 おはようございます。DOUGLAS_ です。

>「A1:X365」という読み込み範囲を指定する
>SQL文 の書き方が分かりませんでしたので、・・・
 前回答の 参照URL に書いてありました。  (;^_^A

 前回答の下記2点を訂正していただければ結構です。

1)
myRS.Open "select * from [Sheet1$]", myCon

myRS.Open "select * from [Sheet1$A1:X356]", myCon
に差し替え。

2)
Range(Range("Y1"), Cells(1, Columns.Count)).EntireColumn.ClearContents
Range(Range("A366"), Cells(Rows.Count, 1)).EntireRow.ClearContents
の2行を削除。


 なお、ご存じかとは存じますが、「参照設定」というのは、Visual Basic Editor(VBE)で
1)[ツール(T)] - [参照設定(R)...] で、[参照設定 - VBProject] ダイアログ を開きます。
2)[参照可能なライブラリ ファイル(A):] の下の一覧の中から「Microsoft ActiveX Data Objects 2.x Library」というような文字列の書かれた項目の前の チェックボックス を オン にします。
 私の環境では「2.x」の部分が「2.0」・「2.1」・「2.5」・「2.6」・「2.7」・「2.8」と 6通り ありましたので、番号の一番大きな「2.8」に参照設定しました。
3)最後に [OK] を クリック して、[参照設定 - VBProject] ダイアログ を閉じます。

 なお、私の書いた マクロ は、マクロ が書かれた ブック には、何も変化はありません。
 新規ブック を開いて、そこに データ を読み込み、別名で保存するようにしてあります。

>最終的に私がやりたいことは60ある同一フォームのエクセルファイルの、
>A1からX365に入力された数値を
>それぞれのセル位置ごとにマスターのファイルで合計を出したい
とのことですが、「60ある同一フォームのエクセルファイル」は、同じ フォルダ に入っていることが要件です。

 VBA の知識がおありでしたら、私の書いた マクロ を適当に手直ししてくだされば、複数の フォルダ からの読み込みもできるようになります。
 では、ご健闘をお祈りします。  <(_ _)>

 おはようございます。DOUGLAS_ です。

>「A1:X365」という読み込み範囲を指定する
>SQL文 の書き方が分かりませんでしたので、・・・
 前回答の 参照URL に書いてありました。  (;^_^A

 前回答の下記2点を訂正していただければ結構です。

1)
myRS.Open "select * from [Sheet1$]", myCon

myRS.Open "select * from [Sheet1$A1:X356]", myCon
に差し替え。

2)
Range(Range("Y1"), Cells(1, Columns.Count)).EntireColumn.ClearContents
Range(Range("A366"), Cells(Rows.Count, 1)).EntireRow...続きを読む

Qフォルダ内のファイルに順番にマクロ実行(VBA)

こんにちは。
いつもこのサイトにはお世話になっています。

 いま、WORDマクロで、あるプログラムを作成したのですが、現在の状態だと、ファイルにマクロを実行させたい場合、そのファイルを開いてマクロを実行するしかありません。
 そうではなくて、指定されたフォルダの中にあるファイルのうち、rtf拡張子で終わっているものに順番に自動的にマクロを実行するというようなプログラムは書けないのでしょうか。
 プログラムのなかに、ファイルのパスを指定してそのファイルに実行する方法は分かったのですが、フォルダだけ指定しておいて(というよりユーザにテキストボックスで指定させて)、そのフォルダに入っているrtfファイルすべてにマクロを実行する方法はありますでしょうか?
 
 もしありましたら教えていただいたいと思い投稿しました。よろしくお願いします。

Aベストアンサー

ある指定したフォルダ内の、ファイル名が全て捉えられれば良いのでしょう。
そうであれば下記を参考に。誤解していたら済みません。
Sub test02()
Const sPATH = "c:\My Documents\" 'ファイルの保管場所
Dim sFILENAME As String 'ファイル名
sFILENAME = Dir(sPATH & "*.doc") 'ファイルのパスと種類を指定
While sFILENAME <> "" '空文字以外の場合ループ
MsgBox "ファイル名 " & sFILENAME
sFILENAME = Dir() '引数無しのDir関数を呼び出すと次のファイル名を返す
Wend
End Sub

Qexcel vba 他ファイルマクロ処理中断、自己ファイルマクロ処理後、再度他ファイルマクロ継続方法

excel vbaで、他のEXCELファイルのマクロの処理を中断して、自己ファイルのマクロを処理後、再度他のEXCELファイルのマクロを継続して再度処理を行わせるにはどうすれば良いですか。教えて下さい

他のEXCELファイルとして、フリーソフトを利用しています。
そのソフトは、モジュールにロックが掛ってるので、その中のマクロなどを編集することはできません。(ロック解除などは考えていません。)
そのソフトを起動して、データファイル入力画面で、データファイルを入力して、処理をして、処理結果を保存することを、入力データファイルを変えながら、繰り返し行いたいです。
そこで、処理マクロを作成しています。その手順とVBAを説明します。

1)フリーソフト(違法なものではありません。)を開き、
2)そのフリーソフトのシート内のボタンを、VBAで、マウスカーソルを移動させて、マウスのキー操作で、「押す」「離す」を行い、
3)ファイルの初期化の問合せの警告が出るので、キー操作で、「Y」を押し、
4)データファイルの名称をクリップボードにコピーし
5)EXCELのカレントフォルダを、データファイルのあるフォルダに変えて
6)DoEventsとして、フリーソフトのデータファイル入力画面を開いています。
この時、画面のポインタは、データ入力画面のファイル名入力欄にあり、
この後、データファイル名をクリップボードから入力したいので、
キー操作で、「crtl+v」としたいのですが
フリーソフトのマクロが起動中で、作成している処理マクロに制御が移らないためと思いますが
入力できません。(人手での入力は可能ですが)、自動化したいので、どの様にすれば良いか教えて下さい。
マクロは長いので、抜粋して記載します。

sub a()
(宣言文省略します。)
Workbooks.Open freesoft
Dim mPSet As Long
mPSet = SetCursorPos(b,c)
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
keybd_event VK_Y, 0, fKEYDOWN, 0
keybd_event VK_Y, 0, fKEYUP, 0
Application.CutCopyMode = False
Dim d As New DataObject
With d
.SetText e
.PutInClipboard
End With
ChDrive f
ChDir g
DoEvents
(ここで、止まります。)
With d
.GetFromClipboard
.GetText
End With
keybd_event VK_RETURN, 0, fKEYDOWN, 0
keybd_event VK_RETURN, 0, fKEYUP, 0
DoEvents
Dim mPSet2 As Long
mPSet2 = SetCursorPos(h, i)
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
Workbooks(freesoft).SaveAs FileFormat:=xlNormal, Filename:=k
Workbooks(k).Close
End sub

excel vbaで、他のEXCELファイルのマクロの処理を中断して、自己ファイルのマクロを処理後、再度他のEXCELファイルのマクロを継続して再度処理を行わせるにはどうすれば良いですか。教えて下さい

他のEXCELファイルとして、フリーソフトを利用しています。
そのソフトは、モジュールにロックが掛ってるので、その中のマクロなどを編集することはできません。(ロック解除などは考えていません。)
そのソフトを起動して、データファイル入力画面で、データファイルを入力して、処理をして、処理結果を保...続きを読む

Aベストアンサー

フリーソフトに関する詳細が分からないのですが、たぶん、MsgBox、InputBox、または、モーダルのUserFormが表示されたタイミングで、動作待ちになっているものと思われます。動作待ちになるトリガーは、Workbooks.Open freesoftでしょうか?(Open直後にUserFormが表示される?)

であれば、次のように、Shell関数でブックを開くようにすれば良いと思います。
Dim FreeSoft
FreeSoft = Shell("Excel " & "C:\xxxxx\フリーソフト.xlsm",1)
MsgBox "フリーソフトが開くまでの時間稼ぎ!!"
AppActivate FreeSoft

その後は、SendKeysステートメントでフリーソフトを操作することになります。たぶん、mouse_eventやkeybd_event も使えると思います。
ただし、Workbooks(freesoft).SaveAs 等は使えなくなるので、SendKeysによるキーボード操作で保存動作を行う必要があります。


このカテゴリの人気Q&Aランキング

おすすめ情報