dポイントプレゼントキャンペーン実施中!

Workbooks.OpenTextメソッドで FieldInfo:=をArray関数のネスト
にしているのを見かけますが意味(使い方のイメージ)がわかりません 教えて頂けると助かります

A 回答 (3件)

こんにちは。


#1のka_na_deです。
前回紹介した解説で分かりましたか?

ちょっと説明します。

(1)区切り文字ファイル(DataType:=xlDelimitedの場合)
 例えば、FieldInfo:=Array(Array(1, 2), Array(2,1), Array(3,3))
 とした場合は、
  1列目:テキスト(文字列)
  2列目:一般(標準)
  3列目:MDY (月日年) 形式の日付
 として、指定されます。これなら簡単です。
 しかし、VBAのヘルプには、
 「列の指定はどのような順番で行ってもかまいません。
  指定されなかった列は標準形式と解釈されます。」
 とあるので、分かりにくくなっています。上記は
 FieldInfo:=Array(Array(3,3),Array(1, 2))
 でも良いということです。
  しかし、現実にはこのように引数FieldInfoのArray関数を
 省略してしまうと、データが正常に取り込めないという不具合に
 直面してしまう。そうです。


(2)固定長フィールドファイル(DataType:=xlFixedWidthの場合)
 例えば、FieldInfo:=Array(Array(0, 2), Array(5, 5), Array(13, 1)
とした場合は、
  0~4文字目:テキスト(文字列)
  5~12文字目:YMD (年月日) 形式の日付
  13文字以降:一般(標準)
 として、指定されます。

尚、参考ページにもありますが、
<FieldInfoのArray関数のニ番目の要素に指定する数値と変換方法>
数値   変換方法
1    一般(標準)
2    テキスト(文字列)
3    MDY (月日年) 形式の日付
4    DMY (日月年) 形式の日付
5    YMD (年月日) 形式の日付
6    MYD (月年日) 形式の日付
7    DYM (日年月) 形式の日付
8    YDM (年日月) 形式の日付
9    EMD (台湾年月日) 形式の日付
10    スキップ列(削除列)
    • good
    • 0
この回答へのお礼

ありがとうございます
まだまだ、勉強不足なので
わかるようがんばってみます

お礼日時:2007/09/01 18:32

こんばんは。



>FieldInfo:=をArray関数のネストにしているのを見かけますが

それは、人為的に書くことは、あまりないのではありませんか?記録マクロで出来上がったものを流用しているに過ぎないような気がします。仮に、そういうコードを使っている人でさえも、現実に、そのようなコードで書くとは思えません。ただ、QueryTable やOpenText メソッドは、複合のデリミタ(Delimiter)で切り分けるときには、とても便利なメソッドですので、Open ...For Input As # のステートメントよりも便利なときがあります。

なお、配列の中の配列という理屈は、Array関数の中は、もともと、Variant 型なので、その中に、何を入れようとも可能だと思うのです。そして、列+書式設定の命令というのは、ひとつの約束ごとには違いないのですが、それにネストをするというのも、やはりOpenText メソッドの約束ごとのひとつだと思っています。実際、それ以上の構造や仕組みは考えたことがありません。出てくる機会も少ないからです。
    • good
    • 0
この回答へのお礼

ありがとうございます
まだまだ、勉強不足なので
わかるようがんばってみます

お礼日時:2007/09/01 18:31

こんにちは。



ここが分かりやすいのではないでしょうか?
ずっと読み進めると解説されています。

ちなみに私は実践したことがありません。


スキルアップ講座第12回(DataType:=xlDelimitedの場合)
http://www.moug.net/skillup/nksw/nksw12-01.htm

スキルアップ講座第13回(DataType:=xlFixedWidthの場合)
http://www.moug.net/skillup/nksw/nksw13-01.htm
    • good
    • 0
この回答へのお礼

ありがとうございます
まだまだ、勉強不足なので
わかるようがんばってみます

お礼日時:2007/09/01 18:32

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

このQ&Aを見た人はこんなQ&Aも見ています