電子書籍の厳選無料作品が豊富!

はじめまして、エクセルのマクロでお聞きしたいことがあり
質問させていただいております。
自分で考えろと言われればそれまでですが、
まったくのど素人のためやり方を教えていただけないでしょうか

よろしくお願いいたします。

下記のようなテキストファイルが多数あるときに
すべてのテキストファイルをひとつのエクセルシートに一列目にファイル名を記入されている状態で
次々に貼り付けたいと考えております。

例として
============
ファイル名:clw○○○.txt
ファイルの中身は下記
20100410 C:▽▽
20100410 C:○○
============
============
ファイル名:clw▽▽▽.txt
ファイルの中身は下記
20100410 C:▽▽
20100410 C:○○
20100410 C:■■
============

↓(下記が完成イメージ)
一列目にファイル名を記入。
ただし、ファイルの中身の行数と同じ位置まで記入する
A B C
clw○○○ 20100410 C:▽▽
clw○○○ 20100410 C:○○
clw▽▽▽ 20100410 C:▽▽
clw▽▽▽ 20100410 C:○○
clw▽▽▽ 20100410 C:■■

以上、よろしくお願いいたします。

A 回答 (3件)

こんなかんじでしょうか


実行するとファイルオープンダイアログ
が出て、一列目にファイル名、二列目に
ファイル中のそれぞれ一行をそのまま出力します


Sub Autofileopen()

Dim OpenFileName As Variant ''ファイル名(配列)
Dim tmp As String ''ファイル一行読み込み時に使用
Dim i As Integer ''ループ変数
Const OUTPUT_WORKSHEETS_NUM = 1 ''ファイルをアウトプットするワークシート番号
Application.ScreenUpdating = False ''スクリーンの更新をしない

'''''''''''''''''''' ファイルオープン部分 '''''''''''''''''''''''''''

''ファイルオープンダイアログを表示してファイルのディレクトリを取得
''複数選択可
''OpenFileName()は1始まり OpenFileName(1), OpenFileName(2)・・・・
OpenFileName = Application.GetOpenFilename( _
FileFilter:="テキストファイル,*.txt,データファイル,*.dat,すべてのファイル,*.*", _
MultiSelect:=True)

'''ファイルが選択されたときとキャンセルのときの区別
'''ファイルが選択されたときはOpenFileNameが配列として返される
If IsArray(OpenFileName) Then
''なにもしない
Else ''ファイルが選択されなかったときはIsArray(OpenFileName)=falseとなる
MsgBox "キャンセルされました。", vbInformation
End If


''''''''ワークシートに出力部分'''''''''''''''''''''''''''''''''''

OutPutRow = 1 ''出力行はじめ
For i = 1 To UBound(OpenFileName)
n = FreeFile(0) '''''引数に0を指定すると、FreeFileは1~255の範囲のファイル番号を返す
Open OpenFileName(i) For Input As #n

Do While Not EOF(n) ''ファイル終わりまで繰り返す
Line Input #n, tmp ''一行読み込み

''''''''''''''ワークシートに出力
Worksheets(OUTPUT_WORKSHEETS_NUM).Cells(OutPutRow, 1) = Dir(OpenFileName(i))
Worksheets(OUTPUT_WORKSHEETS_NUM).Cells(OutPutRow, 2) = tmp
OutPutRow = OutPutRow + 1 ''ワークシートの出力する行数をひとつ増やす

Loop
Close #n

Next i


End Sub
    • good
    • 0

No.2の修正です


ファイルオープンダイアログでキャンセルされたときの
挙動ですが、

Else ''ファイルが選択されなかったときはIsArray(OpenFileName)=falseとなる
MsgBox "キャンセルされました。", vbInformation
End ''ここでプログラムを終了(←追加箇所)
End If

と、End を入れてプログラムを終わらせるようにしたほうがいいです。
    • good
    • 0

カテゴリが違います。


教えて!goo > デジタルライフ > ソフトウェア > MS Office
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=5 …
がよろしいかと。
    • good
    • 0

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