TextFilePlatformは何種類あるのでしょうか?
おそらくはテキストデータの元ファイルの形式のことだとは思うのですが、どうもまとまった情報が手に入りません。
私がデータソースとしているのはXPのデフォルトでついてくるメモ帳の.txtデータです。これは932とあらわされるようです。ところがMSND当たりでリファレンスを見てみるとxlMacintosh等3種類しかないことになっています。ネット上で情報を見つけようとすると437というのもあるようです。
結局Platformの形式が何種類あるのかがはっきりしないと使い分けられません。一覧みたいになってあるソースをご存知の方はいらっしゃいませんか?
No.1ベストアンサー
- 回答日時:
こんにちは。
Office XP(2002) のみが、その仕様が違うようですね。
Code Page を確認してください。
http://www.microsoft.com/globaldev/reference/cph …
>結局Platformの形式が何種類あるのかがはっきりしないと使い分けられません。
ただ、VBAを扱う人間としては、あまり、QueryTable オブジェクトを使うケースは多くないような気がします。QueryTable は、区切り文字が複数ある場合に使われます。Page Code は、932のみでも問題がないのではありませんか?
回答有難うございます。
質問の仕方が悪かったです。職場でofficeのバージョン違いが混在している為それによる混乱を避けたかったのです。全部組み終わってからやれ動きませんでは個人的にいやでした。
2002のみが違う。これが知れたら万歳です(^^)
No.3
- 回答日時:
こんにちは。
>QueryTableで読み込みたい.txtファイルは「|」が区切り文字になっており1行に9列になっており、日ごとにその内容が更新されその行数は平均で30~です。
Openステートメントのメリットは、行を選べることと、内容を加工できることが挙げられます。
'-------------------------------------------
'Open ステートメントの基本的なサンプル
'ただし、コードとしては、十分なエラー対策がなされていません。
'実務では、簡易的に、適当な部分(Uboundより前)On Error Resume Next を入れておきます。
'標準モジュール
Sub TextImportTest()
Dim Fname As String 'ファイル名
Dim rw As Long '書き出しの最初の行
Dim j As Long
Dim u As Integer '配列の上限
Dim TextLine As String
Dim LineBuf As Variant 'ラインバッファ
Dim FNo As Integer 'ファイルNo
Fname = Application.GetOpenFilename("Text ファイル(*.txt),*.txt")
If Fname = "False" Then
Exit Sub
End If
rw = 1
FNo = FreeFile()
Open Fname For Input As #FNo 'ファイルインポート
Do Until EOF(FNo)
Line Input #FNo, TextLine
LineBuf = Split(TextLine, "|") '配列の取り出し,区切り文字は、「|」
u = UBound(LineBuf)
If u >= 0 Then 'ここは、本来は無意味(ここで、いろいろなチェックができます)
ActiveSheet.Cells(rw + j, 1).Resize(, u + 1).Value = LineBuf
End If
j = j + 1
Loop
Close #FNo
End Sub
>QueryTableよりもコード量が減るのでしょうか?
減ると断言はしませんが、概ね、書式指定などしなければ、減るはずです。しかし、コード量とは違った問題がQueryTable にあります。インポートした列全体にかかわってくるので、Table を残した場所は、加工がしづらいということです。また、複数のファイルに対しては、あまり簡単とは言えません。
>それは複数の「種類」に対してなのでしょうか?それとも「数」に対してなのでしょうか?
QueryTable では、インポートファイルに対して、改行コードや「,(カンマ)」や「 (スペース)」が、同時指定できますが、Open ステートメントでは、ワークシートの Substitute 関数やVBAのReplace 関数を使って、ひとつの区切り文字に統一してから、Split で別けなくてはならないという違いがあります。しかし、入ってくるデータを、事前に加工したりすることも可能なのです。Open ステートメントは、旧VBのスタイルですが、こういうスタイル自体は残っていくようです。
余談になりますが、OpenステートメントのBinary 型のインポートは、滅多に使われません。Binaryエディタで、ファイルの内容を確認したりし、かなり高度な技術が必要になることがあり、一般のVBAを扱うレベルでは、太刀打ちできないことが多いです。事実、ここのカテゴリの同様の質問で、こちらが回答しているのにも関わらず、成功したものは、未だ、一つもみたことがありません。多くは、テキストエディタ等では、区切りコードが確認できないのが原因です。そして、見た目が、テキストファイルとそっくりだからです。
論より証拠で、一度試してみることをお勧めします。
ご返答ありがとうございました。
今日一日いろいろしてみましたが確かにBinary型では今ひとつの結果しかえられませんでした。
Loop処理するにしてもやはり前回の補足でも言ったように「1行ずつ」読み込むことに抵抗がありましたが ためしに行数をそれなりに増やしてみましたが気にするような処理速度の低下などは見られませんでした。単なる食わず嫌いだったようです
No.2
- 回答日時:
こんにちは。
あとは、
Dim PCode As Integer
If Val(Application.Version) = 10 Then
PCode = 932
Else
PCode = xlWindows
End If
'実際のQueryTable のコード
のようにして区分けすればよいのではありませんか?
むろん、そのテキストのフォーマットの種類を区分けする必要性がないとは言えないのですが、xlMacintoshのようには、改行コードなどは離れてはいないので、当面は、こんな感じでするのがよいと思います。
#1で述べたとおり、私自身は、簡易的にしか、QueryTableは使いません。本格的な開発は、やはりOpen ステートメントですね。
この回答への補足
閉じるのを忘れていたら目からうろこです(笑)
Openステートメントの存在自体知りませんでした。OpenというとOpenメソッドくらいだとばかり思っていましたから。
いろいろ見てみましたが、あんまり個人的には楽ではないような気がします。私がQueryTableで読み込みたい.txtファイルは「|」が区切り文字になっており1行に9列になっており、日ごとにその内容が更新されその行数は平均で30~です。
これを毎朝読み込んでその行数分のシートフォーマットを自動コピーして印刷するというモジュールを組んでいます。Openステートメントだと区切り文字が指定できず結局シートに読み込んでから手動で区切る処理をしなければならず、Bynaryモードが理解できていないのか1行しか読み込めないので行数分コードを書かなければならなくなりそうでした。
QueryTableよりもコード量が減るのでしょうか?#1では複数の区切り文字でなければOpenステートメントという表現でしたが、それは複数の「種類」に対してなのでしょうか?それとも「数」に対してなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) ダウンロードしたファイルの「種類」が「Windowsmediaplayer」に変わってしまい、開くこ 2 2023/07/03 21:45
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- 教えて!goo 「質問する」って何ですか? 分からない事や知りたい事ですよね? 質問の「質」って誰が決めるの? 2 2022/06/04 20:41
- Android(アンドロイド) スマホの新端末へのデータ移行について iPhoneの旧端末から新端末へのデータ移行はすごいですね。 1 2022/05/30 14:25
- CPU・メモリ・マザーボード PC購入時、CPUの品質(?)はどこまで考慮すべきでしょうか。 10 2022/06/04 11:27
- その他(ビジネス・キャリア) 労働者の「職種や業界に適性がある(ない)」「会社に適性がある(ない)」どう切り分けますか? 1 2022/09/02 00:12
- 事務・総務 帳票類やデータがありません。法人成り。 解体業の会社で現場作業員 兼 事務員として勤めているのですが 3 2023/06/02 13:27
- システム メールのcsv添付ファイルの種類を テキスト形式からカンマ区切り形式に 変更する方法はありますか? 4 2023/03/09 20:33
- 電気工事士 来月から電気管理技術者のお仕事を始める者です。東京電力パワーグリッドへ情報提供の依頼をする方法がTE 1 2022/06/27 06:48
- Access(アクセス) Accessのリンクテーブルのパスを相対パスにする方法について教えて頂きたいです 1 2023/02/08 13:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Access】クエリで抽出...
-
VBA 複数のCSVファイルを一度...
-
Excelのデータ(数字)をテキス...
-
SQLSever 一括インポートについて
-
notepad++ で作成した文書を cs...
-
Excelでhtml形式のテキストを表...
-
アクセス2007でのインポートエ...
-
Wordの文章をExcelに内容ごとに...
-
アクセス(ACCESS) インポート...
-
ダブルクォーテーション囲いカ...
-
メモ帳のデータをエクセルに貼...
-
秀丸で数字に3桁ごとにカンマを...
-
多数のeml形式ファイルを1つの...
-
VBAのQueryTableオブジェクトの...
-
[VBA]csvファイルを開いて保存...
-
【AccessVBA】ダイアログで複数...
-
CSVファイルを固定長のテキスト...
-
AccessのマクロでCSVファイルを...
-
複数のメールファイルを1つの...
-
複数のエクセルファイルをアク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Access】クエリで抽出...
-
Excelのデータ(数字)をテキス...
-
Wordの文章をExcelに内容ごとに...
-
SQLSever 一括インポートについて
-
複数eml形式のBecky!への一括イ...
-
アクセス(ACCESS) インポート...
-
Excelでhtml形式のテキストを表...
-
ダブルクォーテーション囲いカ...
-
ACCESS CSV形式でエクスポート...
-
多数のeml形式ファイルを1つの...
-
アクセスで小数点以下1桁まで...
-
エクセル2000で65536行を超える...
-
【AccessVBA】ダイアログで複数...
-
mdbをテキストに変換するツール...
-
notepad++ で作成した文書を cs...
-
複数のエクセルファイルをアク...
-
Accessのテーブルにデー...
-
アクセス2007でのインポートエ...
-
VBA 複数のCSVファイルを一度...
-
CSVファイルを固定長のテキスト...
おすすめ情報