VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/07/05(Tue) 08:19
投稿者ガッ
Eメール
URL
タイトルRe: 動的二次元配列

> CSV形式のファイルからデータを読込み、Excelに帳票出力させようとしています。
>
> こちらの掲示板の過去ログを参考にさせていただいたところ(記事No.3670)、
> Excelに出力するデータを二次元配列に格納して、一気に出力すると高速に
> 処理できる、とのことでしたので、CSVファイルから読込んだデータを一度、
> 二次元配列に格納しようとしています。
>
> CSVファイルの行数が何行あるかわからないため、一行読込むたびに二次元配列を
> 再定義したらよいのではないかと思い、
>
> Dim fnum            As Integer
> Dim buf             As String
> Dim csv_data()      As String
> Dim output_data()   As Variant
> Dim cnt             As Long
> Dim i               As Integer
>
> Do While Not EOF(fnum)
>     Line Input #fnum, buf
>     csv_data = Split("")
>     csv_data = Split(buf, ",")
>     If UBound(csv_data) <> -1 Then
>         ReDim Preserve output_data(cnt, UBound(csv_data)) As Variant
>         For i = 0 To UBound(csv_data)
>             output_data(cnt, i) = csv_data(i)
>         Next
>         cnt = cnt + 1
>     End If
> Loop
>
> このようにしてみたところ、1回目のReDimは通るのですが、2回目にReDimしようとすると、
> 「インデックスが有効範囲にありません。」とエラーになってしまいます。
>
> 二次元配列の動的定義の仕方からして間違っているような気がするのですが、
> よい解決方法がありましたら、ご教授いただけないでしょうか?
>
> よろしくお願いします。
MSDNで、"Redim ステートメント"について見ると訳が分かります。
で、このような場合、
・「配列を要素とするユーザ定義型、の配列」を用いる。
・「配列の配列」:ジャグ配列を用いる。
 →例えば、[Variant]()の各々の元に[String]()を格納すると、
  [Variant](Index)[String](SubIndex)のように取り出せます…きっと。
・そもそも二次元的な配列にしない。
など、色々方法がありえます。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -