アプリ版:「スタンプのみでお礼する」機能のリリースについて

TextFilePlatformは何種類あるのでしょうか?

おそらくはテキストデータの元ファイルの形式のことだとは思うのですが、どうもまとまった情報が手に入りません。

私がデータソースとしているのはXPのデフォルトでついてくるメモ帳の.txtデータです。これは932とあらわされるようです。ところがMSND当たりでリファレンスを見てみるとxlMacintosh等3種類しかないことになっています。ネット上で情報を見つけようとすると437というのもあるようです。

結局Platformの形式が何種類あるのかがはっきりしないと使い分けられません。一覧みたいになってあるソースをご存知の方はいらっしゃいませんか?

A 回答 (3件)

こんにちは。



Office XP(2002) のみが、その仕様が違うようですね。

Code Page を確認してください。
http://www.microsoft.com/globaldev/reference/cph …

>結局Platformの形式が何種類あるのかがはっきりしないと使い分けられません。

ただ、VBAを扱う人間としては、あまり、QueryTable オブジェクトを使うケースは多くないような気がします。QueryTable は、区切り文字が複数ある場合に使われます。Page Code は、932のみでも問題がないのではありませんか?
    • good
    • 0
この回答へのお礼

回答有難うございます。

質問の仕方が悪かったです。職場でofficeのバージョン違いが混在している為それによる混乱を避けたかったのです。全部組み終わってからやれ動きませんでは個人的にいやでした。

2002のみが違う。これが知れたら万歳です(^^)

お礼日時:2008/12/17 16:31

こんにちは。



>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を扱うレベルでは、太刀打ちできないことが多いです。事実、ここのカテゴリの同様の質問で、こちらが回答しているのにも関わらず、成功したものは、未だ、一つもみたことがありません。多くは、テキストエディタ等では、区切りコードが確認できないのが原因です。そして、見た目が、テキストファイルとそっくりだからです。

論より証拠で、一度試してみることをお勧めします。
    • good
    • 0
この回答へのお礼

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

今日一日いろいろしてみましたが確かにBinary型では今ひとつの結果しかえられませんでした。

Loop処理するにしてもやはり前回の補足でも言ったように「1行ずつ」読み込むことに抵抗がありましたが ためしに行数をそれなりに増やしてみましたが気にするような処理速度の低下などは見られませんでした。単なる食わず嫌いだったようです

お礼日時:2008/12/20 19:24

こんにちは。


あとは、

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ステートメントという表現でしたが、それは複数の「種類」に対してなのでしょうか?それとも「数」に対してなのでしょうか?

補足日時:2008/12/19 09:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!