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

投稿日: 2005/07/05(Tue) 09:28
投稿者はこ
Eメール
URL
タイトルRe^2: 動的二次元配列

ガッさん。

おはようございます。
ご回答どうもありがとうございます。

MSDNもチェックせずに質問してすみませんでした。

> ・「配列を要素とするユーザ定義型、の配列」を用いる。

ユーザ定義型を標準モジュールでこのように定義して、

Public Type CSV_INFO
    csv_buf()               As String
End Type
Public CSVInfo()            As CSV_INFO

先ほどのソースを、

Dim fnum As Integer
Dim buf As String
Dim csv_data() As String
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 CSVInfo(cnt) As CSV_INFO
        ReDim Preserve CSVInfo(cnt).csv_buf(UBound(csv_data)) As String
        CSVInfo(cnt).csv_buf = csv_data
        cnt = cnt + 1
    End If
Loop

というように修正したら、ユーザ定義型配列CSVInfo()にはCSVファイルのデータが
ちゃんと格納されるのですが、それをいざExcelファイルに出力しようと、

xlsSheet.Range("$A$2") _
    .Resize(UBound(CSVInfo) + 1, UBound(CSVInfo(0).csv_buf) + 1) _
    .Value = CSVInfo

としたところ、コンパイルエラー「パブリックオブジェクトモジュールで定義された
ユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの
関数に渡すことができます。」が発生してしまいました。

そこで、

> ・「配列の配列」:ジャグ配列を用いる。
>  →例えば、[Variant]()の各々の元に[String]()を格納すると、
>   [Variant](Index)[String](SubIndex)のように取り出せます…きっと。

これを実験してみようと、

Dim fnum As Integer
Dim buf As String
Dim csv_data() As String
Dim cnt As Long
Dim i As Integer
Dim tbl()       As Variant
Dim csv_buff()  As String

Do While Not EOF(fnum)
    Line Input #fnum, buf
    csv_data = Split("")
    csv_data = Split(buf, ",")
    If UBound(csv_data) <> -1 Then
        ReDim Preserve tbl(cnt) As Variant
        ReDim Preserve csv_buff(UBound(csv_data)) As String
        csv_buff = csv_data
        tbl(cnt) = csv_buff
        cnt = cnt + 1
    End If
Loop

このようにソースを修正したところ、ジャグ配列tbl()()にはCSVファイルのデータが
ちゃんと格納されたのですが、いざExcelファイルに出力しようと、

xlsSheet.Range("$A$2").Resize(UBound(tbl) + 1, UBound(tbl(0)) + 1).Value = tbl

としたところ、Excelファイルには何も出力されませんでした。
(エラーは何も発生しなかったのですが。)

> ・そもそも二次元的な配列にしない。

CSVファイルのデータが数千行以上存在しても、それなりに高速に
動かしたいので、できたら二次元配列を使用したいと考えています。

せっかく教えていただいたのに、わがまま言ってすみません。


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

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

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