ListBoxにExcelシートの一行を順に表示するには?

解決


ひとし  2003-06-03 03:07:22  No: 107371

こんにちわ。非常にレベルが低い質問かもしれませんが、どうかお力をお貸しください。
内容というのは、今まで、Excelの各列の要素を一つのレコードと見立て、
Excel VBAのListBoxに列数を指定して収納していたのですが、
それをVBへ移行しようとすると、列数を指定できないため、うまく
一レコードずつ表示することができません。
このような、あるExcelシートの一列をうまくListBoxに表示する方法は
ありませんでしょうか?


岡田 之仁  2003-06-03 08:50:15  No: 107372

Excelからのデータ取得ですが・・・
GetObject(...)で、エクセルのファイルをオープンしデータを取得する
方法(そのマシンにExcelが必要)と、ADOで、Microsoft.Jet.OLEDB.4.0
を使ってエクセルのシートを、データベースのテーブルのように見立て、
取得する方法(VBのインストール時にISAMドライバーでExcelのが必要)
がありますが、このどちらもダメなのでしょうか?

ISAMドライバーは当然ながら配布可能だったと思います(調べていないです)
し、ADOとの組み合わせでExcelのファイルからデータを取得するプログラム
は書けますので・・・

ご検討下さい。


Dim AdoExcelDb As ADODB.Connection
Dim AdoExcelRs As ADODB.Recordset
Dim i As Integer

Set AdoExcelDb = New ADODB.Connection

AdoExcelDb.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=xxxxxxxx.xls;" & _
                "Extended Properties=""Excel 8.0;HDR=NO;"""

Set AdoExcelRs = New ADODB.Recordset

AdoExcelRs.Open "Select * from [Sheet1$]", AdoExcelDb, adOpenKeyset, adLockOptimistic, adCmdText

If AdoExcelRs.RecordCount > 0 Then
    While Not AdoExcelRs.EOF
        '
        ' 何等かのレコード処理
        '
        For i = 0 To AdoExcelRs.Fields.Count - 1
            Debug.Print i, AdoExcelRs.Fields(i).Value
        Next i
        
        AdoExcelRs.MoveNext
    Wend
End If

AdoExcelRs.Close
AdoExcelDb.Close

Set AdoExcelRs = Nothing
Set AdoExcelDb = Nothing

※ HDR=NO は、エクセルのシートの1行目を項目名として
    使用するかしないかを表しています。
    よって、NO の場合は、1行目はデータです。

以上。


ひとし  2003-06-03 11:04:15  No: 107373

岡田 之仁さん、ありがとうございます^^;

初心者なので、このまま甘えてご質問させていただきます!
作成済みExcelファイルの場合にも、
>Set AdoExcelDb = New ADODB.Connection

>Set AdoExcelRs = New ADODB.Recordset
は、必要なのでしょうか?
たとえば、既存ファイル名:「顧客情報.xls」のシート名:「顧客取引」
という場合は、どのようになるのでしょうか?

大変お手数ですが、ご回答の程、宜しくお願い致します。


ひとし  2003-06-03 11:10:50  No: 107374

すみません、追記させていただきます。
シート名なんですが、実はグローバル変数に格納した値を参照させたいのですが、この場合、変数そのものを指定してあげればよいのでしょうか?


岡田 之仁  2003-06-03 18:39:06  No: 107375

あくまで例としてあげたのですが、ADOでも、Excelファイルの
読み書きが可能だと言うことなのです。
今回のこの方法で行うと言うのであれば・・・

AdoExcelDb.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=顧客情報.xls;" & _
                "Extended Properties=""Excel 8.0;HDR=NO;"""

AdoExcelRs.Open "Select * from [顧客取引$]", AdoExcelDb, adOpenKeyset, adLockOptimistic, adCmdText

となります。
試してみて下さい。

以上。


岡田 之仁  2003-06-03 18:40:45  No: 107376

グローバル変数の方を忘れていました・・・

格納されている変数名を、
Dim szSheet As String
としますと、

AdoExcelRs.Open "Select * from [" & szSheet & "$]", AdoExcelDb, adOpenKeyset, adLockOptimistic, adCmdText

となりますが・・・

以上。


ひとし  2003-06-04 21:49:08  No: 107377

ありがとうございます!
&で囲うのですね^^;
なんとかなりそうです!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加