Excel VBA質問箱 IV

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

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


6787 / 13646 ツリー ←次へ | 前へ→

【42960】複数のテキストファイルを読み込んで特定の行だけ表示させるには ターキー 06/9/28(木) 0:46 質問[未読]
【42962】Re:複数のテキストファイルを読み込んで... ハチ 06/9/28(木) 9:24 発言[未読]
【42996】Re:複数のテキストファイルを読み込んで... ターキー 06/9/28(木) 21:29 お礼[未読]
【42965】Re:複数のテキストファイルを読み込んで特... だるま 06/9/28(木) 10:14 回答[未読]
【42998】Re:複数のテキストファイルを読み込んで特... ターキー 06/9/28(木) 21:34 お礼[未読]
【43010】Re:複数のテキストファイルを読み込んで特... だるま 06/9/29(金) 9:02 回答[未読]
【43040】Re:複数のテキストファイルを読み込んで特... ターキー 06/9/30(土) 0:22 お礼[未読]
【43059】Re:複数のテキストファイルを読み込んで特... ターキー 06/10/1(日) 2:30 質問[未読]
【43098】Re:複数のテキストファイルを読み込んで特... ハチ 06/10/2(月) 11:30 発言[未読]
【43120】Re:複数のテキストファイルを読み込んで特... ターキー 06/10/2(月) 22:10 お礼[未読]
【43111】Re:複数のテキストファイルを読み込んで特... だるま 06/10/2(月) 16:00 回答[未読]
【43122】Re:複数のテキストファイルを読み込んで特... ターキー 06/10/2(月) 22:25 質問[未読]
【43140】Re:複数のテキストファイルを読み込んで特... りん@昼休憩 06/10/3(火) 12:25 回答[未読]
【43153】Re:複数のテキストファイルを読み込んで特... ターキー 06/10/3(火) 21:31 お礼[未読]
【43154】Re:複数のテキストファイルを読み込んで特... ターキー 06/10/3(火) 21:37 お礼[未読]

【42960】複数のテキストファイルを読み込んで特定...
質問  ターキー  - 06/9/28(木) 0:46 -

引用なし
パスワード
   まったくの初心者ですがよろしくお願いします。

例えば「横浜」のフォルダ内に複数(多くて50個くらい)のテキストファイルがあります。1つのテキストファイルには150行程度のデータが入っています。
このデータの中から必要な部分を抜き出してエクセルの1つのシートに表示させたいのです。
必要な部分は・・・ 1.テキストファイルの1行目すべて
          2.1列目が「D」(1文字だけです)になっている行すべて
区切り文字は「カンマ」「スペース」の2個を選択します。

過去ログ等を参照していろいろ試してみましたが、テキストファイルに拡張子がなかったためテキストファイルを読み込みするところからつまずいてしまいました。

どのようにすればよいかアドバイスお願いします。

【42962】Re:複数のテキストファイルを読み込んで...
発言  ハチ  - 06/9/28(木) 9:24 -

引用なし
パスワード
   ▼ターキー さん:
>まったくの初心者ですがよろしくお願いします。
>
>例えば「横浜」のフォルダ内に複数(多くて50個くらい)のテキストファイルがあります。1つのテキストファイルには150行程度のデータが入っています。
>このデータの中から必要な部分を抜き出してエクセルの1つのシートに表示させたいのです。
>必要な部分は・・・ 1.テキストファイルの1行目すべて
>          2.1列目が「D」(1文字だけです)になっている行すべて
>区切り文字は「カンマ」「スペース」の2個を選択します。
>
>過去ログ等を参照していろいろ試してみましたが、テキストファイルに拡張子がなかったためテキストファイルを読み込みするところからつまずいてしまいました。
>
>どのようにすればよいかアドバイスお願いします。

「フォルダ内の全ファイルに実行する」
「テキストファイルの1行目 And 1カラム目が"D"の行を抜き出す」
と内容は複数あると思いますけど、どのあたりがわからないのか わかりません。

"いろいろ試してみたこと"をUPして質問するべきだと思います。

【42965】Re:複数のテキストファイルを読み込んで...
回答  だるま WEB  - 06/9/28(木) 10:14 -

引用なし
パスワード
   こんな感じでいかがでしょうか。^d^

Sub ReadTextFile()
  Dim myPath As String
  Dim Fname As String
  Dim N As Integer
  Dim D As String
  Dim rngDest As Range
  
  Set rngDest = Workbooks.Add.Worksheets(1).Range("A1")
  
  myPath = ThisWorkbook.Path & "\横浜\"
  Fname = Dir(myPath & "*.*")
  
  Do Until Fname = ""
    N = FreeFile
    Open myPath & Fname For Input As #N
    Line Input #N, D
    rngDest.Value = D
    Set rngDest = rngDest.Offset(1)
    
    Do Until EOF(N)
      Line Input #N, D
      If Left$(D, 1) = "D" Then
        rngDest.Value = D
        Set rngDest = rngDest.Offset(1)
      End If
    Loop
    
    Close #N
    Fname = Dir()
  Loop
  
  rngDest.Offset(-1).CurrentRegion.TextToColumns , xlDelimited, comma:=True, Space:=True
  
End Sub

なお、このコードは
>1列目が「D」(1文字だけです)になっている行すべて
ではなく一行の一文字目が「D」の行を抽出しています。

【42996】Re:複数のテキストファイルを読み込んで...
お礼  ターキー  - 06/9/28(木) 21:29 -

引用なし
パスワード
   早速のお返事ありがとうございます。
ハチさんのいうとおり、いろんなものが不足しておりました。。

これはフォルダ内の全テキストファイルに対して実行します。
また、テキストファイルの 1.1列目が「D」のもの and 2.1行目の全データ
が必要となります。

フォルダ内の全テキストファイルに向けて過去ログなどから似たようなものを
探して実行しようとしましたが、どれも拡張子を指定しているものばかりで、
(使用するテキストファイルには拡張子がありません・・。)
どのように加工すればよいのかがわかりませんでした。
まずそのところでつまづいてしまい、ぜんぜん先に進めない状況でした。

【42998】Re:複数のテキストファイルを読み込んで...
お礼  ターキー  - 06/9/28(木) 21:34 -

引用なし
パスワード
   だるまさん ご回答ありがとうございます。。
早速実行させていただきました!・・が、下記のところでエラー1004が出てしまいます。

  rngDest.Offset(-1).CurrentRegion.TextToColumns , xlDelimited, comma:=True, Space:=True

なにぶん、まだ勉強が足りずどのように対処してよいものかわかりません。
今一度ご教授ください!

【43010】Re:複数のテキストファイルを読み込んで...
回答  だるま WEB  - 06/9/29(金) 9:02 -

引用なし
パスワード
   >myPath = ThisWorkbook.Path & "\横浜\"
ここを実際のパスに変更しましたか。このままの場合はこのマクロブックと同じフォルダ
内の「横浜」フォルダの中ということになります。^d^


>下記のところでエラー1004が出てしまいます。
>
>>  rngDest.Offset(-1).CurrentRegion.TextToColumns , xlDelimited, comma:=True, Space:=True

ここは、1列内に読み込んだデータを列に分解する所です。エラーで停止した時、データ
は読み込まれた状態ですか。(多分読み込まれていないような気がします。)

【43040】Re:複数のテキストファイルを読み込んで...
お礼  ターキー  - 06/9/30(土) 0:22 -

引用なし
パスワード
   だるまさん
ご回答ありがとうございます!
たしかにエラーが出たときはデータが読み込まれていませんでした。
パスを変えなければいけなかったんですね・・・。
てっきりマクロブックを「横浜」フォルダ内で実行かと勘違いしてました・・。

今度は無事にデータを読んでくれました!・・が今度は文字化けしてしまいます。
これって対処方法ありますか??

ほんとにいつもスミマセン・・。どうぞよろしくお願いします。

【43059】Re:複数のテキストファイルを読み込んで...
質問  ターキー  - 06/10/1(日) 2:30 -

引用なし
パスワード
   だるまさん
すみません。文字化けはテキストファイルの文字コードをUnicode→ANSIで保存しなおすことで解決できました。

1つ1つテキストファイルを開いて文字コードをANSIにして保存しなおす作業も
大変なので、最初からANSIで読み込むことって可能でしょうか?

重ね重ねの質問ですが、ぜひよろしくお願いします。

【43098】Re:複数のテキストファイルを読み込んで...
発言  ハチ  - 06/10/2(月) 11:30 -

引用なし
パスワード
   ▼ターキー さん:
>だるまさん
>すみません。文字化けはテキストファイルの文字コードをUnicode→ANSIで保存しなおすことで解決できました。
>
>1つ1つテキストファイルを開いて文字コードをANSIにして保存しなおす作業も
>大変なので、最初からANSIで読み込むことって可能でしょうか?
>
>重ね重ねの質問ですが、ぜひよろしくお願いします。

Openステートメントではなく
Scripting.FileSystemObjectのOpenTextFileで開けば、指定できます。
"OpenTextFile"でネット検索すれば、サンプルもきっとあります。

【43111】Re:複数のテキストファイルを読み込んで...
回答  だるま WEB  - 06/10/2(月) 16:00 -

引用なし
パスワード
   >すみません。文字化けはテキストファイルの文字コードをUnicode→ANSIで保存しなおすことで解決できました。
>
>1つ1つテキストファイルを開いて文字コードをANSIにして保存しなおす作業も
>大変なので、最初からANSIで読み込むことって可能でしょうか?

Unicodeテキストをそのまま読み込む、ということですね。
では、こんな感じでどうでしょうか。^d^

Sub ReadTextFile2()
  Dim myPath As String
  Dim Fname As String
  Dim N As Integer
  Dim D As String
  Dim VV As Variant
  Dim rngDest As Range
  Dim i As Integer
  
  Set rngDest = Workbooks.Add.Worksheets(1).Range("A1")
 
  myPath = ThisWorkbook.Path & "\横浜\"
  Fname = Dir(myPath & "*.*")
 
  Do Until Fname = ""
    N = FreeFile
    Open myPath & Fname For Binary Access Read As #N
    D = InputB(LOF(N), N)
    Close #N
    VV = Split(D, vbCrLf)
    
    rngDest.Value = VV(0)
    Set rngDest = rngDest.Offset(1)
    
    For i = 1 To UBound(VV)
      If Left$(VV(i), 1) = "D" Then
        rngDest.Value = VV(i)
        Set rngDest = rngDest.Offset(1)
      End If
    Next
  
    Fname = Dir()
  Loop
 
  rngDest.Offset(-1).CurrentRegion.TextToColumns , xlDelimited, comma:=True, Space:=True
 
End Sub

【43120】Re:複数のテキストファイルを読み込んで...
お礼  ターキー  - 06/10/2(月) 22:10 -

引用なし
パスワード
   ▼ハチ さん:
ありがとうございます!
いろいろと参考になるサンプルを見つけることができました。
VBAって奥が深いです。。

【43122】Re:複数のテキストファイルを読み込んで...
質問  ターキー  - 06/10/2(月) 22:25 -

引用なし
パスワード
   ▼だるま さん:
ありがとうございます!
完璧に動作しました!
本当に感動です!!

だるまさんのコードをベースにちょこちょこいじりながら
仕事に役立てています。
そこで最後(となる予定)の質問です

>myPath = ThisWorkbook.Path & "\横浜\

この行の「横浜」フォルダの部分をこのマクロブックのあるフォルダ内から
選択させたいのです。

現在、このコードの入っているマクロブック名は「VBA1」、
「VBA1」の入っているフォルダ名は「VBX」といいます。
普段はこの「VBX」フォルダに「横浜」なり「名古屋」といった
テキストファイルの入ったフォルダを入れて、
このコードを走らせています。
その際に毎回コードをいじらなければいけません。

これを「VBX」フォルダの中のフォルダ名一覧を表示させて、
その中から選択できるようにしたいのです。

本当に重ね重ねの質問になりますが、ぜひともよろしくお願いします。m(__)m

【43140】Re:複数のテキストファイルを読み込んで...
回答  りん@昼休憩  - 06/10/3(火) 12:25 -

引用なし
パスワード
   ターキー さん、こんにちわ。

>この行の「横浜」フォルダの部分をこのマクロブックのあるフォルダ内から
>選択させたいのです。

フォルダを選択する方法の一つです。

Function FGet(wbp As Variant) As String
  'ダイアログを出してフォルダを選択し、その名前を返す関数
  Dim Shl As Object, Fol As Object
  Set Shl = CreateObject("Shell.Application")
  Set Fol = Shl.BrowseForFolder(0, "フォルダを選択して下さい", 0, wbp)
  '
  If Fol Is Nothing Then
   FGet = ""
  Else
   FGet = Fol.Items.Item.Path
  End If
  Set Fol = Nothing: Set Shl = Nothing
End Function
'↓関数を呼び出す例
Sub test()
  Dim pdat As String
  pdat = FGet(Application.ThisWorkbook.Path)
  If pdat = "" Then
    MsgBox pdat, vbExclamation, "中断"
  Else
    MsgBox pdat, vbInformation, "選択したフォルダ"
  End If
End Sub

こんな感じです。

【43153】Re:複数のテキストファイルを読み込んで...
お礼  ターキー  - 06/10/3(火) 21:31 -

引用なし
パスワード
   ▼りん@昼休憩 さん

昼休憩中にスミマセン(^^;)
早速試しました!そして思い通りに動かすことが出来ました!
感謝感謝です!

【43154】Re:複数のテキストファイルを読み込んで...
お礼  ターキー  - 06/10/3(火) 21:37 -

引用なし
パスワード
   ハチさん、だるまさん、りん@昼休憩中さん

皆さんのおかげですべてが無事解決いたしました。
初心者の私にとても丁寧に教えていただき、ありがとうございました!!

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