こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2010 VBAでテキストファイル読込

 初めて質問させていただきます。
 Excel2010のVBAで下記のようなマクロを組み、テキストファイルを読込したところ、データの一部が誤変換されてしまいます。
 誤変換内容
 11/12/29 →2029/11/12

 マクロを使用せず、Excelから直接テキストファイルウィサードを使って読み込んだ場合には、正しく「2011/12/29」となります。
 (お恥ずかしい話ですが、Excelシートのセルに直接「11/12/29」と打ち込むと自動的に「2011/12/29」に変換されることを今回初めて知りました。)

 同一項目には「11/12/29」形式と「20111229」形式が混在しており、「11/12/29は2011/12/29」、「20111229はそのまま」セルに格納するよう依頼されています。

 従って、Array(1, 2)で文字列やArray(1, 5)でYMD形式の日付へ同一項目のデータを固定することはできなくなっております。

 テキストデータは「カンマ区切り」の35項目です。
 データはネットワーク内の他のPCドライブに保存されています。
 因みに「 Workbooks.OpenText Filename:=」以下は、Excelのマクロ記録で取得したものです。

 お忙しいところ恐縮ですが、よろしくお願いいたします。

【作成したマクロ】
Sub 読込()
With CreateObject("WScript.Shell")
.currentdirectory = "\\コンピューター名\c\フォルダ名\"
End With

Const cnsTITLE = "テキストファイル読み込み処理"
Const cnsFILTER = "全てのファイル (*.*),*.*"

Set xlAPP = Application
xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _
Title:=cnsTITLE)
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub

Workbooks.OpenText Filename:=strFILENAME, Origin:=932, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array( _
29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1)) _
, TrailingMinusNumbers:=True

End Sub

投稿日時 - 2011-12-21 16:41:50

QNo.7202124

困ってます

質問者が選んだベストアンサー

Workbooks.OpenText にパラメータ Local:=True を加えてみてください。
多分、これで上手くいと思います。

投稿日時 - 2011-12-21 17:09:42

補足

 会社にてマクロ修正、無事希望通りの出力ができました。

 ありがとうございました。

投稿日時 - 2011-12-22 08:51:34

お礼

早速回答いただきありがとうございます。
現在帰宅したため、明日会社にて修正してみます。

投稿日時 - 2011-12-21 18:10:18

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

コードばかり書いて、読者に忙しい中読み解かせて、肝心の何がしたいのかズバリ書いてないのでは。
もっと疑問点を絞り、ヅバリそこだけ聞いて、回答により自分で自分の場合に当てはめてコードを作ってみよ。
ーー
日付列をどうかしたいのか。2種の入力があるということか。それをエクセルの日付シリアル値(これも判らなければWEBッ照会すること)でセルにセットしたいということか。
このテキストファイルはどういう形式か?セパレーターは?CSVやスペース区切りやPRN形式などがあり、項目の
囲いもダブルコーテーションや文字列だけとか、数値も含めて全部とかある。
ーー
テキストファイルを読んでエクセルシートにセットするにしてはコードが長すぎると思う。
CSV形式ならSplit関数で分けて列の各セルにセットすれば仕舞い。コードは10行程度と思う。
日付列を細工するのを除いて。
> CreateObject("WScript.Shell")
なども、わざわざShellを起動せず、CurDirなど使えないかと思う。

投稿日時 - 2011-12-21 18:09:23

お礼

 お忙しい中、早速の回答ありがとうございます。

 マクロの作成では、VBA解説サイト等からのコピーとマクロ記録を利用しているため、コードが長くなってしまったと思われます。(所謂継ぎ接ぎです)

 形式については、知識不足で申し訳ありませんが、拡張子が「.txt」、カンマ区切り、ということしかお伝えできません。(メモ帳で開いた結果ですが、囲いは何もなく、数値を含め全部あります。ただし、数値は固定長のようです)

 肝心の"何をしたいか"についてですが、今まで
 1.外部から提供されたデータをコンバーターソフト(業者作成)でテキストファイルに変換
 2.Excelでテキストファイルを読み込み、加工して利用
 の2.を手作業で行っていたものを、マクロ化しようと考えました。

 私的には、「11/12/29」でも「2011/12/29」でも特に大きな問題はないと思っているのですが、担当者は「今まで通り2011/12/29でないと困る」と言われたたことが本件の始まりです。

> CreateObject("WScript.Shell")についてですが、ChDirやChDriveで試してみましたが、上手くいかず、サイト検索で解説サイトからコピーさせていただいた結果です。

 実際、Excelから直接テキストファイルを読み込むと、元データが「11/12/29」でも「2011/12/29」に変換されるのに、マクロで読み込むと「2029/11/12」になってしまい、半日デバックに費やしてしまい、今回質問させていただいた次第です。

 長文になり申し訳ありませんでした。

 取りあえず、mt2008さんの回答を明日試してみたいと思います。

 引き続きよろしくお願いいたします。

投稿日時 - 2011-12-21 18:52:30

あなたにオススメの質問