tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルExcelへのCSVの読み込み法について
記事No4212
投稿日: 2006/09/06(Wed) 19:47
投稿者6から2005へ
はじめまして、VB2005になって初めてVB6.0からの移行を考え、プログラムを作っています。
その中で、CSVファイルをExcelに読み込むときの方法でつまづいています、どなたか助けてください。
新しくExcelを起動し、CSVを読ませたいのですが、読み込み時にいくつか固定のカラムを文
字列モードにして読ませたいと考えています。
VB6.0では、「Excel.Application.Workbooks.OpenText(Filename:="ファイル名", _
        StartRow:=1, DataType:=1, TextQualifier:=1, _
        ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=True, _
        Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
     Array(3, 2), Array(4, 2), Array(5, 1)))」
で上手くいっていたのですが、VB2005だと、"Array”のところに問題があり、エラーが生じて
上手く動きません。(「Arrayは型です、有効な式ではありません」というエラーです)
どなたかこの問題の解決策を教えてください、よろしくお願いします。

[ツリー表示へ]
タイトルRe: ExcelへのCSVの読み込み法について
記事No4215
投稿日: 2006/09/06(Wed) 22:23
投稿者花ちゃん
> 上手く動きません。(「Arrayは型です、有効な式ではありません」というエラーです)

下記のように変更して見て下さい。
FieldInfo:=New Integer(,) {{1, 1}, {2, 1}, {3, 2}, {4, 2}, {5, 1}})

[ツリー表示へ]
タイトルRe^2: ExcelへのCSVの読み込み法について
記事No4216
投稿日: 2006/09/07(Thu) 09:29
投稿者6から2005へ
花ちゃんさん、ありがとうございます、上手く動きました。
そこでもう一つ教えてください。
VB6.0では、「FieldInfo」以下の部分を一つ一つ記載するのではなく次のようにしても動きました。
”FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 2), Array(4, 2), Array(5, 1))”
       ↓
”For C = 1 To 5
   If C = 3 Or C = 4 Then
     ary(C) = Array(C, 2)
    Else
      ary(C) = Array(C, 1)
    End If
  Next C
 FieldInfo:=ary)”
この方法だとカラムの追加や変更に簡単に対応できるので、VB2005でもこのような方法で作りたいと
考えています。VB2005でのこのような配列を使った方法をご存知でしたら教えてください
よろしくお願いします。

[ツリー表示へ]
タイトルRe^3: ExcelへのCSVの読み込み法について
記事No4218
投稿日: 2006/09/07(Thu) 10:51
投稿者花ちゃん
> この方法だとカラムの追加や変更に簡単に対応できるので、

どちらも変更する手間は対して変らないでは。(返って可読性が..。)
(どちらでも1分もあれば変更できるでしょう)

質問する前に色々自分でも試して見る事ですね。
http://hanatyan.sakura.ne.jp/dotnet/jyohou2.htm
http://www.microsoft.com/japan/msdn/net/vbnetref/vbnetref3-3.aspx

[ツリー表示へ]
タイトルRe^4: ExcelへのCSVの読み込み法について
記事No4219
投稿日: 2006/09/07(Thu) 13:38
投稿者6から2005へ
ありがとうございました。ファイルによって十数種類の読み込みパターンがあり、それらを
Selectで選択して都度記載していたのですが、カラムが約50列あるため、かなり長い列挙になり、
違いを見つけにくくなったり、全体的に見づらいものになったために新しい方法に変更した、という
経緯があります。同じことをVB2005でも、と思い、色々なサイトを参考にどちらの方法も
試行錯誤したのですが私の力では解決できず、この掲示板に書き込ませて頂きました。
片方の方法については、ご助言頂いた方法で解決しました。なのでご指摘の通り、もう少し
もう一方の方法について試してみたいと思います。
ありがとうございました。

[ツリー表示へ]
タイトルRe^3: ExcelへのCSVの読み込み法について
記事No4234
投稿日: 2006/09/09(Sat) 14:43
投稿者花ちゃん
少しは、試されたのでしょうか?
前回の設定で配列変数の中にはどのようにデータが入っているのかマウスポインタを
当てて見ると中身が見えると思うのですが。
New Integer(,) {{1, 1}, {2, 1}, {3, 2}, {4, 2}, {5, 1}})

上記は Dim fi(,) As Integer = {{1, 1}, {2, 1}, {3, 2}, {4, 2}, {5, 1}} でも同じ
です。
fi(0,0)=1     '列番号
fi(0,1)=1     '設定するフォーマットの定数値
fi(1,0)=2
fi(1,1)=1
fi(2,0)=3
fi(2,1)=2

のようにデータが格納されていたはず、従って上記のような値の配列を作ればいいだけでは。

   Dim fi(9, 1) As Integer
   For i As Integer = 1 To 10
      Select Case i
         Case 1 To 2, 5          '設定列番号
            fi(i - 1, 0) = i
            fi(i - 1, 1) = 1     '一般
         Case 3, 4
            fi(i - 1, 0) = i
            fi(i - 1, 1) = 2     'テキスト
         Case 0
            fi(i - 1, 0) = i
            fi(i - 1, 1) = 5     '日付(年月日)
         Case Else
            fi(i - 1, 0) = i
            fi(i - 1, 1) = 9     'スキップ
      End Select
   Next
   '上記以外の型が必要な場合は適当に追加して下さい。
   xlBooks.OpenText(Filename:=xlFilePath, _
                     DataType:=Excel.XlTextParsingType.xlDelimited, _
                     TextQualifier:=Excel.XlTextQualifier.xlTextQualifierDoubleQuote, _
                     Comma:=True, FieldInfo:=fi)

[ツリー表示へ]