こんにちわ。非常にレベルが低い質問かもしれませんが、どうかお力をお貸しください。
内容というのは、今まで、Excelの各列の要素を一つのレコードと見立て、
Excel VBAのListBoxに列数を指定して収納していたのですが、
それをVBへ移行しようとすると、列数を指定できないため、うまく
一レコードずつ表示することができません。
このような、あるExcelシートの一列をうまくListBoxに表示する方法は
ありませんでしょうか?
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行目はデータです。
以上。
岡田 之仁さん、ありがとうございます^^;
初心者なので、このまま甘えてご質問させていただきます!
作成済みExcelファイルの場合にも、
>Set AdoExcelDb = New ADODB.Connection
や
>Set AdoExcelRs = New ADODB.Recordset
は、必要なのでしょうか?
たとえば、既存ファイル名:「顧客情報.xls」のシート名:「顧客取引」
という場合は、どのようになるのでしょうか?
大変お手数ですが、ご回答の程、宜しくお願い致します。
すみません、追記させていただきます。
シート名なんですが、実はグローバル変数に格納した値を参照させたいのですが、この場合、変数そのものを指定してあげればよいのでしょうか?
あくまで例としてあげたのですが、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
となります。
試してみて下さい。
以上。
グローバル変数の方を忘れていました・・・
格納されている変数名を、
Dim szSheet As String
としますと、
AdoExcelRs.Open "Select * from [" & szSheet & "$]", AdoExcelDb, adOpenKeyset, adLockOptimistic, adCmdText
となりますが・・・
以上。
ありがとうございます!
&で囲うのですね^^;
なんとかなりそうです!
ツイート | ![]() |