Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3292 / 13645 ツリー ←次へ | 前へ→

【63064】フォルダ内の指定したテキストファイルをエクセルに読み込む まい 09/10/5(月) 14:25 質問[未読]
【63065】Re:フォルダ内の指定したテキストファイル... Yuki 09/10/5(月) 14:37 発言[未読]
【63066】Re:フォルダ内の指定したテキストファイル... Yuki 09/10/5(月) 14:49 発言[未読]
【63071】Re:フォルダ内の指定したテキストファイル... Yuki 09/10/5(月) 15:41 発言[未読]
【63077】Re:フォルダ内の指定したテキストファイル... まい 09/10/5(月) 16:33 お礼[未読]
【63068】Re:フォルダ内の指定したテキストファイル... kanabun 09/10/5(月) 15:20 発言[未読]
【63069】Re:フォルダ内の指定したテキストファイル... kanabun 09/10/5(月) 15:29 発言[未読]
【63078】Re:フォルダ内の指定したテキストファイル... まい 09/10/5(月) 16:35 お礼[未読]

【63064】フォルダ内の指定したテキストファイルを...
質問  まい  - 09/10/5(月) 14:25 -

引用なし
パスワード
   以前は、指定したファイルを開く方法で投稿させてもらい、解決できたのですが、
処理内容が変わりまして、
今度は、末尾[BS]となっているファイルを順番にエクセルに読み込んでいく…という動作をさせたいと思っています。
どうしても、いまいちできずに悪戦苦闘しております

お分かりになる方、どうか、教えていただけないでしょうか?

よろしくお願いします

Cドライブの中の[Temp]フォルダの中にテキストデータが複数存在します
現在は100件くらいファイルが入っています

例えば、下記のようなテキストデータが入っているフォルダがあります
ABC_部品A_---A_PS.txt
ABC_部品A_---A_BS.txt
ABC_部品B_---A_PS.txt
ABC_部品B_---A_BS.txt
ABC_部品C_---A_PS.txt
ABC_部品C_---A_BS.txt


例えば、ファイルの末尾が[BS]となっているテキストファイルのデータを順番にエクセルに読み込む動作をさせたいのです
(上記の場合だと、3つのファイルの内容を一つのエクセルシートに読込みたい)

現在は下記のようなコードになっています
今は、指定したファイルを開いて、エクセルに読み込むというVBAになっています。

Sub txt取込()

Dim i As Integer, j As Integer
Dim Mytxt As String, Mystr As String
Dim MyRange As Range, TmpRange As Range
Dim FileName As String
Dim myPath As String
Dim strDir As String


Worksheets.Add before:=Worksheets(1)
Worksheets(1).Name = "txtData"

FileName = "部品A"
strDir = "C:\Temp\"
Mytxt = Dir(strDir & "\ABC_" & FileName & "*BS.txt")

Worksheets("txtData").Activate
Range("A1").CurrentRegion.Clear
Set MyRange = Range("A1")

Open strDir & Mytxt For Input As #1


Do Until EOF(1)
Line Input #1, Mystr
MyRange.Offset(i).Value = Mystr
i = i + 1
Loop
Close #1

Set TmpRange = Range(MyRange, MyRange.End(xlDown))

TmpRange.TextToColumns DataType:=xlDelimited, comma:=True, _
fieldinfo:=Array(Array(1, 1), Array(2, 1), Array(3, 2), Array(4, 1), Array(5, 1), Array(6, 1), _
      Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1))
     
end sub

VBA初心者ですが、よろしくお願いします

【63065】Re:フォルダ内の指定したテキストファイ...
発言  Yuki  - 09/10/5(月) 14:37 -

引用なし
パスワード
   ▼まい さん:
>以前は、指定したファイルを開く方法で投稿させてもらい、解決できたのですが、
>処理内容が変わりまして、
>今度は、末尾[BS]となっているファイルを順番にエクセルに読み込んでいく…という動作をさせたいと思っています。

>Mytxt = Dir(strDir & "\ABC_" & FileName & "*BS.txt"
を ↓
Mytxt = Dir(strDir & "*BS.txt"
だけでは駄目ですか?

【63066】Re:フォルダ内の指定したテキストファイ...
発言  Yuki  - 09/10/5(月) 14:49 -

引用なし
パスワード
   ▼まい さん:
>
>>Mytxt = Dir(strDir & "\ABC_" & FileName & "*BS.txt"
>を ↓
>Mytxt = Dir(strDir & "*BS.txt"
>だけでは駄目ですか?

不親切すぎましたね。
strDir = "C:\Temp\"
Mytxt = Dir(strDir & "*BS.txt")

Do While Mytxt <> ""
  この中で処理をします。
  Debug.Print Mytxt

  Mytxt = Dir
Loop

【63068】Re:フォルダ内の指定したテキストファイ...
発言  kanabun  - 09/10/5(月) 15:20 -

引用なし
パスワード
   ▼まい さん:こんにちは。

>今度は、末尾[BS]となっているファイルを順番にエクセルに読み込んでいく…という動作をさせたいと思っています。

Excelのバージョンはいくつでしたっけ?

Excel2002以降ですと、FileDialogを使って *BS.txt といった
ファイル名の選択が可能ですよ

Sub Try1()
  With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Clear
    .Filters.Add "テキストファイル", "*.txt;*.csv"
    .InitialFileName = "C:\Temp\*BS.txt" 'ワイルドカード付きファイル名
    .AllowMultiSelect = True
    .Title = "ファイル選択(複数選択可)"
    If .Show Then 'ダイアログ実行し、複数ファイルが選択された時
      ファイルを新規シートに書き出す .SelectedItems
    Else
      Exit Sub
    End If
  End With

End Sub

Private Sub ファイルを新規シートに書き出す(fList)
  Dim WS1 As Worksheet
  Dim myTxt
  'シートの追加
  Set WS1 = Worksheets.Add(before:=Worksheets(1))
  WS1.Name = "txtData"
  For Each myTxt In fList
  
 '以下、実際にテキストをシートに読み込む処理を記述するわけですが、
'   OpenステートメントでA列に書き出しておいて
'   あとからTextToColumnsで複数列に分割するのは
'   二重手間なので、
'  ここは 代わりに、
'
'  一般機能の [データ] - [外部データの取り込み]
'    -[テキストファイルのインポート]
'  から、テキストファイルをそのシートに
'   ・カンマ区切り
'   ・3列目のデータ型を「2(文字列)」に
'  など指定して取り込む操作のマクロ記録を参考にされたら
'  よろしいかと思います。

  Next
  
End Sub

【63069】Re:フォルダ内の指定したテキストファイ...
発言  kanabun  - 09/10/5(月) 15:29 -

引用なし
パスワード
   FileDialog とか
複数CSVファイルのワークシートへの取り込みとか...

どこかで見た質問だな? と思ったら、
↓これと内容はよく似ていますね (^^

【62965】VBAでCSVを連結してをXLSで保存

シートへの2つの取り込みかたが紹介されてるけれど、
参考になると思いますよ。

【63071】Re:フォルダ内の指定したテキストファイ...
発言  Yuki  - 09/10/5(月) 15:41 -

引用なし
パスワード
   ▼まい さん:
こんな方法もあります。

Sub txt取込()
  Dim i    As Integer
  Dim j    As Integer
  Dim Mytxt  As String
  Dim Mystr  As String
  Dim MyRange As Range
  Dim TmpRange As Range
  Dim FileName As String
  Dim myPath As String
  Dim strDir As String
  Dim V    As Variant
  Dim sht   As Worksheet
  
  Set sht = Worksheets.Add(before:=Worksheets(1))
  sht.Name = "txtData"
  
  strDir = "C:\Temp\"
  Mytxt = Dir(strDir & "*BS.txt")
  i = 1
  Do While Mytxt <> ""
    Open strDir & Mytxt For Input As #1
      Do Until EOF(1)
        Line Input #1, Mystr
        V = Split(Mystr, ",")
        sht.Cells(i, 1).Resize(, UBound(V) + 1).Value = V
        i = i + 1
      Loop
    Close #1
    Mytxt = Dir
  Loop
End Sub

【63077】Re:フォルダ内の指定したテキストファイ...
お礼  まい  - 09/10/5(月) 16:33 -

引用なし
パスワード
   ▼Yuki さん:


ありがとうございます
なんとか、解決できました。

助かりました

もう一つの方法のほうも試してみます

【63078】Re:フォルダ内の指定したテキストファイ...
お礼  まい  - 09/10/5(月) 16:35 -

引用なし
パスワード
   ▼kanabun さん:

エクセルは2000を使用しています

なんとか解決できました

アドバイスありがとうございました
教えてくださった、過去ログも確認してみます

3292 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free