Excel VBA質問箱 IV

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

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


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

【68810】txtファイルを連続処理したい すいか 11/4/20(水) 11:06 質問[未読]
【68811】Re:txtファイルを連続処理したい UO3 11/4/20(水) 11:48 発言[未読]
【68814】Re:txtファイルを連続処理したい すいか 11/4/20(水) 13:24 質問[未読]
【68816】Re:txtファイルを連続処理したい UO3 11/4/20(水) 15:43 発言[未読]
【68818】Re:txtファイルを連続処理したい すいか 11/4/20(水) 16:37 質問[未読]
【68820】Re:txtファイルを連続処理したい UO3 11/4/20(水) 17:13 回答[未読]
【68822】Re:txtファイルを連続処理したい すいか 11/4/20(水) 17:36 質問[未読]
【68826】Re:txtファイルを連続処理したい UO3 11/4/21(木) 6:04 発言[未読]
【68828】Re:txtファイルを連続処理したい すいか 11/4/21(木) 10:00 質問[未読]
【68829】Re:txtファイルを連続処理したい UO3 11/4/21(木) 11:11 発言[未読]
【68830】Re:txtファイルを連続処理したい すいか 11/4/21(木) 13:05 発言[未読]
【68831】Re:txtファイルを連続処理したい neptune 11/4/21(木) 14:37 発言[未読]
【68832】Re:txtファイルを連続処理したい neptune 11/4/21(木) 14:40 発言[未読]
【68837】Re:txtファイルを連続処理したい すいか 11/4/21(木) 23:43 発言[未読]
【68838】Re:txtファイルを連続処理したい すいか 11/4/22(金) 0:39 質問[未読]
【68839】Re:txtファイルを連続処理したい UO3 11/4/22(金) 5:58 発言[未読]
【68840】Re:txtファイルを連続処理したい すいか 11/4/22(金) 14:08 質問[未読]
【68841】Re:txtファイルを連続処理したい kanabun 11/4/22(金) 14:43 質問[未読]
【68843】Re:txtファイルを連続処理したい kanabun 11/4/22(金) 15:01 発言[未読]
【68845】Re:txtファイルを連続処理したい すいか 11/4/22(金) 15:31 質問[未読]
【68847】Re:txtファイルを連続処理したい neptune 11/4/22(金) 15:40 発言[未読]
【68851】Re:txtファイルを連続処理したい すいか 11/4/23(土) 6:42 質問[未読]
【68850】Re:txtファイルを連続処理したい kanabun 11/4/22(金) 18:14 発言[未読]
【68852】Re:txtファイルを連続処理したい すいか 11/4/23(土) 6:53 質問[未読]
【68854】Re:txtファイルを連続処理したい kanabun 11/4/23(土) 11:30 発言[未読]
【68872】Re:txtファイルを連続処理したい すいか 11/4/23(土) 20:33 発言[未読]
【68896】Re:txtファイルを連続処理したい neptune 11/4/24(日) 22:21 発言[未読]
【68842】Re:txtファイルを連続処理したい UO3 11/4/22(金) 14:52 発言[未読]
【68846】Re:txtファイルを連続処理したい すいか 11/4/22(金) 15:39 質問[未読]
【68849】Re:txtファイルを連続処理したい UO3 11/4/22(金) 17:34 発言[未読]
【68853】Re:txtファイルを連続処理したい すいか 11/4/23(土) 7:16 質問[未読]
【68902】Re:txtファイルを連続処理したい SK63 11/4/26(火) 8:25 発言[未読]
【68817】Re:txtファイルを連続処理したい neptune 11/4/20(水) 16:35 発言[未読]

【68810】txtファイルを連続処理したい
質問  すいか  - 11/4/20(水) 11:06 -

引用なし
パスワード
   宜しくお願い致します。

あるフォルダにテキストファイルが複数個入っており、
それを連続処理したいのですが、openするところで
「形式を認識できない」エラーになります。
(ファイル名を1個ずつ指定して使っていたものを
 改造しようとしています。1個ずつ指定のときは
 うまくいっていました)

質問1.openでエラーにならないようにするには?
質問2.セーブするか?ときかれずにテキストファイルを閉じるには?

  LOGDIR = Cells(4, 4).Value + "\"
       ↑ここにパスが入力される
  myFile = Dir(LOGDIR & "*.txt")
  LOGDIR = LOGDIR & myFile
  
  Do While myFile <> ""

  Workbooks.OpenText Filename:=LOGDIR, StartRow:=1, _
  DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
  ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
  Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 2)
   ↑ここでエラー

  (編集処理をする)

  Workbooks(myFile).Saved = True
  Workbooks(myFile).Close
   ↑この指定は、エクセルファイル用ですが、テキストファイルだと
    どうすればよいのでしょうか?
   
  '2つめ以降のファイル名を格納する
  myFile = Dir()

  Loop

素人な質問で申し訳ありませんが、宜しくお願い致します。

【68811】Re:txtファイルを連続処理したい
発言  UO3  - 11/4/20(水) 11:48 -

引用なし
パスワード
   ▼すいか さん:

こんにちは

Workbooks.OpenText Filename:=LOGDIR, StartRow:=1, _



Workbooks.OpenText Filename:=LOGDIR & myFile, StartRow:=1, _

にしてお試しください。

テキストファイルの保存については、実際に保存する操作を行い、
それをマクロ記録すれば、コードが入手できます。
ポイントは FileFormat:= ですね。

【68814】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/20(水) 13:24 -

引用なし
パスワード
   ご回答ありがとうございます。

でも、
>Workbooks.OpenText Filename:=LOGDIR & myFile, StartRow:=1, _
はうまくいきませんでした。
次のテキストファイルの名前が結合されています。

よろしくお願いします。

【68816】Re:txtファイルを連続処理したい
発言  UO3  - 11/4/20(水) 15:43 -

引用なし
パスワード
   ▼すいか さん:

>次のテキストファイルの名前が結合されています。

アップされたコードをよく読んでいませんでした。

myFile = Dir(LOGDIR & "*.txt")
LOGDIR = LOGDIR & myFile 

この LOGDIR = LOGDIR & myFile これはだめです。
これを消してください。

ところで、現在のコードで

Workbooks(myFile).Saved = True
Workbooks(myFile).Close

とありますね。
この意味はおわかりだとおもうのですが、仮に変更が加えられたとしても
変更がなかったことにして閉じるということになります。

それでいいのなら、この部分は、何もかえず、このままでOKです。

でも、きっと保存したいんですよね。

【68817】Re:txtファイルを連続処理したい
発言  neptune  - 11/4/20(水) 16:35 -

引用なし
パスワード
   ▼すいか さん:
UO3さんがマクロの記録というアドバイスしてくれていますが
やってみましたか?

マクロの記録は強力なhelp機能ですから利用しない手はありません。

【68818】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/20(水) 16:37 -

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

すみません、下記やってみたのですが、

>この LOGDIR = LOGDIR & myFile これはだめです。
>これを消してください。

消してしまうと
実行時エラー 「見つかりません」になります。
確かにLOGDIRにはフォルダ名までしかなく、ファイル名が入っていません。


>Workbooks(myFile).Saved = True
>Workbooks(myFile).Close
保存はしません。
テキストの内容をエクセルに
Sheets(LOGNAME).Move After:=Workbooks(TOOLNAME).Sheets(SHEETINS)
と持ってきています。


度々すみませんが、宜しくお願いします。

【68820】Re:txtファイルを連続処理したい
回答  UO3  - 11/4/20(水) 17:13 -

引用なし
パスワード
   ▼すいか さん:

落ち着いてくださいね。
ゆっくり、ゆっくり。

LOGDIR = LOGDIR & myFile 

これは消してください。

そのかわりに

Workbooks.OpenText Filename:=LOGDIR, StartRow:=1, _

Workbooks.OpenText Filename:=LOGDIR & myFile, StartRow:=1, _
にしてお試しください。

と申し上げましたね。


>>Workbooks(myFile).Saved = True
>>Workbooks(myFile).Close
>保存はしません。

ということなら上記2行のままでもいいですし

Workbooks(myFile).Close False の1行でもいいです。

【68822】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/20(水) 17:36 -

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

たびたびすみません<m(__)m>
説明不足でした。

>Workbooks.OpenText Filename:=LOGDIR, StartRow:=1, _
>↓
>Workbooks.OpenText Filename:=LOGDIR & myFile, StartRow:=1, _

上記でやってみましたが、やはり「形式を認識できない」という
最初に申し上げたエラーになります。。。

ほんとにすみません。。。<m(__)m>

【68826】Re:txtファイルを連続処理したい
発言  UO3  - 11/4/21(木) 6:04 -

引用なし
パスワード
   ▼すいか さん:

こちらでは、私だけがレスするような状況で、見切りをつけたんでしょうね。
でも、こちらでも、あちらでも、マルチは禁止。
この状態がかわるまで、いったん退散します。

【68828】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/21(木) 10:00 -

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

おはようございます。

すみません、
「マルチ」って何なんでしょうか?

初歩的質問なのかもしれませんが、
よろしくお願いします。

【68829】Re:txtファイルを連続処理したい
発言  UO3  - 11/4/21(木) 11:11 -

引用なし
パスワード
   ▼すいか さん:

おはようございます。
この質問箱のページの一番上に本サイトの基本方針 こちら というところが
ありますね。そこをクリックすると、マルチポストについての説明と注意点がでています。
こちらの質問箱では、「禁止はしない、でも留意してください」というスタンスで
留意点が記載されています。一方、あちらのサロンでは、「禁止」ということになっています。

実は、私も、何年か前、はじめて、VBAの質問を出した際に、マルチポストのことなど知らず
この板ふくめ、複数にアップ。幸か不幸か、その時は誰も気がつかれなかったのか
いずれからも適切なお答えをいただきました。で、後からそれを知って、冷や汗でした。

あちらで継続されるなら、こちらは、場所を移るのでクローズしますというコメントで
締めておいて、あちらには(既に皆さんから指摘コメントがアップされていますが)
あらためて、別の掲示板に同様質問出していたけど、そこは締めて、こちらに
移ってきました。よろしくお願いしますというようなコメントをアップするといいでしょうね。

もうしばらく、がまんして、こちらを継続するなら、あちらは、コメントアップして
「解決マーク」にしておかれたらいいです。

ところで、本題ですが、ファイルを連続してDIRで抽出するところまではできたわけです。

で、実際にそれを開こうとして、「形式が認識できない」というエラーになっておいるわけですね。

こちらで、かんたんなテストをしていますが、いまのところ、フォルダ内のtxtファイルは
全て読み込むことができています。

エラーになって黄色くは依頼として中断したタイミングで、コードのLOGDIRとmyFileに
カーソルを当てますと、その内容が表示されます。それを繋ぎ合わせたものを読み込もうとして
エラーになっているわけですね。

そのファイルを、マクロではなく、エクセルから手作業で開いてみてください。
開けますか?
読み込もうとしている○○○.txt が拡張子はtxtだけど、中身が違うのかも
しれません。

【68830】Re:txtファイルを連続処理したい
発言  すいか  - 11/4/21(木) 13:05 -

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

ご指摘ありがとうございます。
ご教授の通りの措置をしようと思います。

今から用事があって出てしまうので、
夜になると思いますが、取り急ぎお礼まで。
またご連絡させて下さい。

【68831】Re:txtファイルを連続処理したい
発言  neptune  - 11/4/21(木) 14:37 -

引用なし
パスワード
   ▼すいか さん:
また、横から失礼。


UO3 さんのご指摘を判り易くテストコードにするとこんな感じです。
テストはしてませんけどコンパイルエラーは出ませんでした。

これがすいか さん
Sub t2()
  Dim myfile As String
  Dim LOGDIR As String
  LOGDIR = Cells(4, 4).Value + "\"
       '↑ここにパスが入力される
  myfile = Dir(LOGDIR & "*.txt")
  LOGDIR = LOGDIR & myfile
 
  Do While myfile <> ""
    Debug.Print LOGDIR
    myfile = Dir()
  Loop

End Sub

これがUO3 さんご指摘を修正
Sub t3()
  Dim myfile As String
  Dim LOGDIR As String
  LOGDIR = Cells(4, 4).Value + "\"
       '↑ここにパスが入力される
  myfile = Dir(LOGDIR & "*.txt")
  'LOGDIR = LOGDIR & myfile 'これは不要
 
  Do While myfile <> ""
    Debug.Print LOGDIR & myfile
    myfile = Dir()
  Loop

End Sub

慣れてない事をしようとする時は、単純化したテストコードでデバッグ
すると判り易いですよ。
デバッグなしのプログラミングってないですから。。。
以下のお好きな所で勉強して下さい。
ht tp://pcdn.int21.co.jp/pcdn/vb/noriolib/vbmag/0001/debug/
ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
ht tp://www.excel-excel.com/vbachair/step1-7.html
ht tp://homepage1.nifty.com/rucio/main/technique/teq_14.htm


#何故マルチポストが嫌われるか。
マルチポスト
ht tp://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
 +
※好き嫌いの前に掲示板の運営者の定めたルールを守るのがマナー。

【68832】Re:txtファイルを連続処理したい
発言  neptune  - 11/4/21(木) 14:40 -

引用なし
パスワード
   ▼すいか さん:
連投失礼。

何故あちら側に解決マークをつけないの?

やっぱり無視かな?

【68837】Re:txtファイルを連続処理したい
発言  すいか  - 11/4/21(木) 23:43 -

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

こんばんは。
お昼はバタバタ慌しい文面で失礼致しました。
さて、「マルチ」について、詳細に手続きまでお教え頂いて、
ありがとうございました。
皆様方にはお詫び申し上げ、閉じて参りました。

>やっぱり無視かな?
いえいえ、まさか!
お昼に投稿した通り、昼間は時間がなく夜になったのです。
neptune さんの投稿も先ほど拝見致しました。

さて、マルチポストがなぜいけないのかわかりました。
言われてみれば、失礼な話ですね。
今日の午前中までに終わらせなければいけなかったので、
ちょっとアセっていたのもあって「大勢の人にきいてみよう!」
という発想でしたことだったのですが、
本当に申し訳ありませんでした。失礼致しました。
今後とも、宜しくお願い致します。

【68838】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/22(金) 0:39 -

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

本題です。
また宜しくお願い致します。

>そのファイルを、マクロではなく、エクセルから手作業で開いてみてください。
>開けますか?
>読み込もうとしている○○○.txt が拡張子はtxtだけど、中身が違うのかも
>しれません。

開く。。。というか、「形式が認識できません」のウィンドウが出たときに、
OKを選ぶと、テキストの内容が別のブックに読み込まれて?来ます。
closeしようとすると、実行エラーになるので、開いてないってことですよね?


本来読みたいファイルでなく、自分でメモ帳で手作りしたデータだと
うまくいきますね。。
メモ帳で見えても、テキストじゃないってことなんですね。
文字コードとかは関係あるものなんでしょうか?

【68839】Re:txtファイルを連続処理したい
発言  UO3  - 11/4/22(金) 5:58 -

引用なし
パスワード
   ▼すいか さん:

おはようございます。
こちらのテストで読み込んでいるのは
・メモ帳で作ったファイル
・エクセルからタブ区切りテキストで保存したファイル
・エクセルからUnicodeテキストとして保存したファイル
・たとえば、私の環境でインストールしてあるVB関連のフォルダ
 D:\VB2010\Microsoft Visual Basic 2010 Express - JPN\Logs
 ここにおさめられているテキストデータ(ログであったり、ReadMeであったり)

そちらのファイルは、何で作成されたものなんでしょうか?

提案です。
現在  Workbooks.OpenText で読み込んでいますが、これを
Workbooks.Open LOGDIR & myFile だけのコードで、(みなしの)ブックとして
読み込むとどうなりますか?

【68840】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/22(金) 14:08 -

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

何度もありがとうございます。

>Workbooks.Open LOGDIR & myFile
は、現象変わりませんでした。

>そちらのファイルは、何で作成されたものなんでしょうか?
「何で」ということは決まっていません。
いろんな会社のいろんな人が、それぞれが機械的に出力されたものを
テキストに変換して(どうやって変換しているのかは不明です)、
私はそれをまとめて編集する。。というものです。
「テキストで」という決めしかありません。

100個くらい処理対象のファイルがあって、昨日まで先頭3つの
ファイルでテストをしていました。
ファイルの問題では?とのアドバイスで、今日はいろいろかいつまんで
20個くらいでテストしてみました。
そしたら、エラーにならないファイルもいました!!
「やっぱりファイルによって」ということなんですよね。
それをすべて見分ける?力はエクセルにはなく「認識できない」
になってしまうんですよね?

【68841】Re:txtファイルを連続処理したい
質問  kanabun  - 11/4/22(金) 14:43 -

引用なし
パスワード
   ▼すいか さん:
よこからすみません

確認というか、質問です。

◆質問1
読み込むテキストファイルの拡張子はすべて *.txt でよろしいのですか?

◆質問2
> Workbooks.OpenText Filename:=LOGDIR, StartRow:=1, _
>   DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
>   ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
>   Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 2)
>    ↑ここでエラー
↑そのコードでは 文の区切りとして考えられる記号
Tab/ Semicolon/ Comma/ Space/ Other の「すべてがFalse」と
なっていますが、 一行のなかに区切りはないのですか?
(すべて一行が一列に収まる形式のテキストファイルなのですか?)

>20個くらいでテストしてみました。
>そしたら、エラーにならないファイルもいました!!
>「やっぱりファイルによって」ということなんですよね。

◆質問3 「形式を認識できない」エラーになるファイルを「メモ帳」など
   他のテキストエディタで開くことはできますか?
また、UO3さんのご質問
> 読み込もうとしている○○○.txt が拡張子はtxtだけど、中身が違うのかも
> しれません。
に関連しますけど、
メモ帳などで開いてみたとき、テキストに特徴はないですか?

【68842】Re:txtファイルを連続処理したい
発言  UO3  - 11/4/22(金) 14:52 -

引用なし
パスワード
   ▼すいか さん:

う〜ん・・・お役に立てず申し訳ありませんね。

エラートラップをかけましょうか。
読み込めないファイルがあれば、そこでメッセージを出して、そのファイルに関する
処理をスキップ。
でも、本当の問題解決にはなりませんけどね。

Sub Test()
  Dim LOGDIR As String
  Dim myFile As String
  
  LOGDIR = Cells(4, 4).Value + "\"
  myFile = Dir(LOGDIR & "*.txt")
 
  Do While myFile <> ""
    
    On Error Resume Next
    Workbooks.OpenText Filename:=LOGDIR & myFile, StartRow:=1, _
      DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
      ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
      Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 2)
    If Err.Number <> 0 Then
      MsgBox LOGDIR & myFile & "が読み込めません。処理をスキップします"
    Else

      '(編集処理をする)
      Workbooks(myFile).Close savechanges:=False
    
    End If
    On Error GoTo 0
    
  '2つめ以降のファイル名を格納する
  myFile = Dir()

  Loop

End Sub

【68843】Re:txtファイルを連続処理したい
発言  kanabun  - 11/4/22(金) 15:01 -

引用なし
パスワード
   >▼すいか さん:

>また、UO3さんのご質問
>> 読み込もうとしている○○○.txt が拡張子はtxtだけど、中身が違うのかも
>> しれません。
>に関連しますけど、
>メモ帳などで開いてみたとき、テキストに特徴はないですか?

Excelは文字コードが Unicode (UTF-7 や UTF-8)のテキストファイルを
読み込むことはできません。
ht tp://support.microsoft.com/kb/821863/ja


【68845】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/22(金) 15:31 -

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

ありがとうございます。

>◆質問1
>読み込むテキストファイルの拡張子はすべて *.txt でよろしいのですか?
はい、そうです。

>◆質問2
>一行のなかに区切りはないのですか?
>(すべて一行が一列に収まる形式のテキストファイルなのですか?)
はい、ずらーっと文字が並んで、改行
1行1列で問題ありません。

>◆質問3 「形式を認識できない」エラーになるファイルを「メモ帳」など
>   他のテキストエディタで開くことはできますか?
>メモ帳などで開いてみたとき、テキストに特徴はないですか?
はい、普通に開きます。
特に特徴はないと思います。。。私は。
漢字や英数字が1行に混じってます。

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

【68846】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/22(金) 15:39 -

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

とんでもないです。
こちらこそ、えらく引っ張ってしまって申し訳ありません。

スキップしないことはできないんでしょうか?
「認識できないよ、OK押せば読み込むよ」エラーウィンドウで
手動でOKボタンを押すと、一応それなりのものが
出来上がります。

エラーをなくす
という方針で質問させて頂いてましたが(単に自分のコーディングが
おかしいんだと思っていたので)、
エラーウィンドウが出たらOKボタンを「自動で」押す
というコーディングはないんでしょうか?
(あのウィンドウ、エクセルが出してるのか、ウィンドウズが
 出してるのかわかりませんが、そういったものを制御することは
 できないのでしょうか?)

【68847】Re:txtファイルを連続処理したい
発言  neptune  - 11/4/22(金) 15:40 -

引用なし
パスワード
   ▼すいか さん:
・VBAを用いない通常の操作では正常に開けますか?
・開けるなら先のアドバイスのマクロの記録は取ってみましたか?
・開けないならtextファイル作成に使用しているソフト、O/Sはなんですか?

【68849】Re:txtファイルを連続処理したい
発言  UO3  - 11/4/22(金) 17:34 -

引用なし
パスワード
   ▼すいか さん:

>スキップしないことはできないんでしょうか?
>「認識できないよ、OK押せば読み込むよ」エラーウィンドウで
>手動でOKボタンを押すと、一応それなりのものが
>出来上がります。
>

おそらくできないというか、困難だろうと推測します。
こちらで再現すれば、それをもとに試行錯誤して、すいかさんの
希望の制御の方法が発見できるかもしれませんが、いかんせん
手元に「武器がない状態」でVBAと戦わなきゃいけませんので。

エラートラップは、VBA側の処理中にエラーが発生しても、
その内容をエラーコードに保管して、中断することなく、アプリケーションで
指定したところに制御をかえす、次の行であったり、指定したとび先であったり。

おそらく、おっしゃっている、エラーウィンドウはWorkbooks.OpenText の中で
表示しているんだろうと思います。
で、エラートラップによってここをバイパスするということは、(それができたとして)
エラーウィンドウを表示せずにアプリケーション側に戻ってきますので、そこでメッセージだして
さぁ、今からOKボタンを押そうと思っても、いまさらWorkbooks.OpenText の中には
帰れないわけです・・・・

幸いなことにneptuneさんやkanabunさんといった超エキスパートにお出ましいただきましたので
原因が特定できれば、必ず解決策の提示をいただけると思います。

もしかしたら、kanabunさんからWorkbooks.OpenTextやWorkbooks.Openではない方法で
ファイルを読み込む方式のアドバイスもあるかもしれません。
私も期待してフォローします。

【68850】Re:txtファイルを連続処理したい
発言  kanabun  - 11/4/22(金) 18:14 -

引用なし
パスワード
   ▼すいか さん:

>>◆質問1
>>読み込むテキストファイルの拡張子はすべて *.txt でよろしいのですか?
>はい、そうです。
>
>>◆質問2
>はい、ずらーっと文字が並んで、改行
>1行1列で問題ありません。
>
>>◆質問3
>>メモ帳などで開いてみたとき、テキストに特徴はないですか?
>はい、普通に開きます。
>特に特徴はないと思います。。。私は。
>漢字や英数字が1行に混じってます。

う〜〜ん、そうなると分からないですね〜〜


もともと、
>(ファイル名を1個ずつ指定して使っていたものを
> 改造しようとしています。1個ずつ指定のときは
> うまくいっていました)

なんだから、パスの(テキストファイル名の)指定方法が(2つ目から)
正しくなかった。のが
→ これまでのやり取りで 修正された 
 →→コードは修正された。

→ なのに、エラーで OpenTextできないテキストファイルがある
ということは、一部のファイルがExcelが開けない形式のテキスト
ファイルからだからか?
→ところが、UTF-8などの文字セットのファイルでもないらしい。
→ ファイルに問題はない ??

堂々巡りですね〜〜

何がいけないんでしょう。

【68851】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/23(土) 6:42 -

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

遅くなってすみません。

マクロの記録、取ってるんですが、
元のコードと一緒です。
というか、これを元々作った人は、マクロの記録で
作ったのかなーと思いました。。わかりませんけど。

テキストを開いて、エラーウィンドウが出て、OKを
押して、別ブックにテキストの内容が出て、それを
元ブックに貼り付ける。。。
というところまで記録しました。
OK押すところはコードなかったです。

【68852】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/23(土) 6:53 -

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

遅くなってすみません。

> →ところが、UTF-8などの文字セットのファイルでもないらしい。
テキストファイルの文字コードが何か?
というのは調べられるものでしょうか?
(お教え頂いたページには、そこまで見つけられませんでした。)

【68853】Re:txtファイルを連続処理したい
質問  すいか  - 11/4/23(土) 7:16 -

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

遅くなってすみません。

>こちらで再現すれば、。。。
はい、ファイルをお見せできないのが非常に申し訳ないです。。

----------------

なんか、いろいろ後出しみたいで申し訳ないんですが、
自分のPCの設定
とか関係あります?

以前、エクセルのマクロを動かすのに、
私のPCでは途中でエラーになるけど、他の人(Aさんとします)
のPCだと最後まで動く。。
ということがありました。
(今回のマクロは他の人(Aさんではない)のPCでも、
 私と同じ状態です)
Aさん:PC超詳しい。もういない。
Bさん:PC詳しくない。

あと、ついでに言いますと、
F8押してテストしてる時はOKなのに、
ボタン押して本稼動?するとエラーになる
ってこと、ないですか?
そんなはずない!とは我ながら思うんですが、
でも気のせいではなく、そういうことがあるんです。
もちろん原因がわからないのでしばらくほっとくと、
3日後にはボタンを押しても普通に動いたり。。

今回のマクロで言えば、エラーが出てもOK押しまくりで、
流してみたんです。でも、日本語が化ける。
あれ?新現象だ。。とは思ったものの、放置。
翌日再度同じように流してみると、化けない。。。

-------------

もはやVBAの世界でないものが影響している
気がしてきてます。。

皆さま、本当にすみません。<m(__)m>

【68854】Re:txtファイルを連続処理したい
発言  kanabun  - 11/4/23(土) 11:30 -

引用なし
パスワード
   ▼すいか さん:

>> →ところが、UTF-8などの文字セットのファイルでもないらしい。
>テキストファイルの文字コードが何か?
>というのは調べられるものでしょうか?
>(お教え頂いたページには、そこまで見つけられませんでした。)

ぼくも検索してみたんですが、あまり使い勝手の良いものはみつかりません
でした。
そこで、すべてのテキストファイルを、文字コードが「シフトJIS」だと
仮定してともかくワークシートにインポートしてみたら、どうか?
と思い、以下のプロシージャを作ってみました。

新規Bookを作成し、その標準モジュールに 以下のコードをコピペし、
Sheet1 の[A1]セルに 読み込むテキストファイルのあるフォルダ名を
書き入れて、実行してみてください。

'----------------------------------------------- 標準モジュール
Option Explicit

Sub ImportAllText()
  Dim myPath As String
  Dim f As String
  Dim Filename As String
  Dim io As Integer
  Dim buf() As Byte
  Dim i As Long
  Dim nbyte As Long, v
  
  With ThisWorkbook.Worksheets(1)
    .Columns.ColumnWidth = 28
    myPath = .Cells(1).Value  '読み込むフォルダ
    If Len(myPath) < 2 Then Exit Sub
    If Right$(myPath, 1) <> "\" Then myPath = myPath & "\"
    .UsedRange.Clear
    .Cells(1).Value = myPath
    
    f = Dir$(myPath & "*.txt")
    io = FreeFile()
    Do While Len(f) > 0
      i = i + 1
      .Cells(2, i).Value = f
      Filename = myPath & f
      Open Filename For Binary As io
      nbyte = LOF(io)
      If nbyte > 2 Then
        ReDim buf(1 To nbyte)
        Get io, 1, buf
        v = Split(StrConv(buf, vbUnicode), vbCrLf)
        If UBound(v) = 0 Then
          v = Split(StrConv(buf, vbUnicode), vbLf)
        End If
        If UBound(v) > 0 Then
          .Cells(3, i).Resize(UBound(v)).Value _
           = Application.Transpose(v)
        End If
      End If
      Close io
      
      f = Dir$()
    Loop
  End With
  MsgBox i & "個のファイルを読み込みました", vbInformation
End Sub

エラー処理はしていないので、途中でエラーになったら、
エラーメッセージの内容と エラーになったコード行とを確認してください。
また、エラーになったテキストファイルをメモ帳で開いて
 ・ 開けるか?
 ・ 文字化けしていないか?
を確認してください。

【68872】Re:txtファイルを連続処理したい
発言  すいか  - 11/4/23(土) 20:33 -

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

早々にありがとうございます。

申し訳ないのですが、マクロが入ったファイル等々、
問題のテキストファイルも会社にあります。
持ち出しはロックがかけられており持ち出せませんので、
月曜日に頂いたコードを実行させて頂こうと思います。

またご連絡させて下さい。
宜しくお願い致します。

【68896】Re:txtファイルを連続処理したい
発言  neptune  - 11/4/24(日) 22:21 -

引用なし
パスワード
   ▼すいか さん:
一応こちらも試してもらえますか?
新規userformにcommandbuttonを1個、textboxを4個配置して下さい。

以下をコピペ、コマンドボタンをクリック。

Shift-JISでもunicodeでもtextbox1,textbox2の両方に正しく表示されます。
utf-8,7ではtextbox3,textbox4のどちらかにに正しく表示されます。
2つずつ正しく表示されますが、どちらかは判断できませんが、
これではないというのが判断できます。

・・・・文字コード判定はかなり難しいので簡易な方法でお茶を濁しました。^ ^;
後はkanabun さんのコードで出力されたものと併せて考えれば
だいたいの判断できるのではないかと思います。

取り敢えず、win7 XL2007で動作はしました。

Option Explicit

Private Sub CommandButton1_Click()
  Call SearchChar
End Sub


Private Sub SearchChar()
  Const c1 As String = "Shift_JIS"  'Shift-JIS
  Const c2 As String = "ISO-2022-JP" 'UNICODE
  Const c3 As String = "EUC-JP"    'EUC-JP
  Const c4 As String = "UTF-8"    'UTF-8
  Const c5 As String = "UTF-7"    'UTF-7
  Dim sPath As String
  
  sPath = Application.GetOpenFilename("Text Files (*.txt), *.txt", 0, "文字コードテスト")
  
  Me.TextBox1.Text = SearchCharCode(sPath, c1)  'Shift-JIS
  Me.TextBox2.Text = SearchCharCode(sPath, c2)  'UNICODE
  Me.TextBox3.Text = SearchCharCode(sPath, c3)  'EUC-JP
  Me.TextBox4.Text = SearchCharCode(sPath, c4)  'UTF-8
  Me.TextBox5.Text = SearchCharCode(sPath, c5)  'UTF-7
  
End Sub

Private Function SearchCharCode(pPath As String, pChar As String) As String
  Dim ad As Object
  Dim buf As String
  
  Set ad = CreateObject("ADODB.Stream")
  
  With ad
    .Charset = pChar
    .Open
    .LoadFromFile pPath
    buf = .ReadText(-2)
    .Close
  End With
  Set ad = Nothing
  
  SearchCharCode = buf
End Function

【68902】Re:txtファイルを連続処理したい
発言  SK63  - 11/4/26(火) 8:25 -

引用なし
パスワード
   ▼すいか さん:
>▼UO3 さん:

こんにちは、横からですが、、、、
現状のPCはWindows??バージョン  excel とかは
どの様に鳴っているのでしょうか??途中経過を見ていないので
わかりませんですが、、、、

エラー処理はエラー番号を出してSELECTすると
処理を分岐できます、Er.numberだったような、、、
ちょっとあやふやですが、

読みないものは別の処理に渡すとかあるかもですけど、、、
ヒントが見つかる可能性ですが下のを調べてみると、、
Dim srRead As New System.IO.StreamReader _
    (sr, System.Text.Encoding.GetEncoding(932))
    S_gamen = srRead.ReadToEnd()
    srRead.Close()

ただし、基本的には、ファイル形式は統一されていることが重要です
道はあるはずですが、、その辺りの使用もわかるとよいのですが。


>なんか、いろいろ後出しみたいで申し訳ないんですが、
>自分のPCの設定
>とか関係あります?
>
>以前、エクセルのマクロを動かすのに、
>私のPCでは途中でエラーになるけど、他の人(Aさんとします)
>のPCだと最後まで動く。。
>ということがありました。
>(今回のマクロは他の人(Aさんではない)のPCでも、
> 私と同じ状態です)
>Aさん:PC超詳しい。もういない。
>Bさん:PC詳しくない。
>
>あと、ついでに言いますと、
>F8押してテストしてる時はOKなのに、
>ボタン押して本稼動?するとエラーになる
>ってこと、ないですか?
>そんなはずない!とは我ながら思うんですが、
>でも気のせいではなく、そういうことがあるんです。
>もちろん原因がわからないのでしばらくほっとくと、
>3日後にはボタンを押しても普通に動いたり。。
>
>今回のマクロで言えば、エラーが出てもOK押しまくりで、
>流してみたんです。でも、日本語が化ける。
>あれ?新現象だ。。とは思ったものの、放置。
>翌日再度同じように流してみると、化けない。。。
>
>-------------
>
>もはやVBAの世界でないものが影響している
>気がしてきてます。。
>
>皆さま、本当にすみません。<m(__)m>

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