
以下のようなExcelシートがあります。
1行目はラベル行です。
[製品管理表]
1| 管理番号| 製品名 | 在庫数 |
2| A001 | 製品A | 2000 |
3| A002 | B製品 | 1700 |
4| A002 | B製品 | 1700 |
......以下1000行くらい続く
この中から製品名で検索をかけて、検索結果をユーザーフォームの
リストボックスに一覧表示させたいのですが、
現在の方法は、
検索条件を元にSQL文を生成、
ADOでシートをRecordSetに格納し、
RecordSetを2次元配列に格納、
2次元配列をリストボックスの要素にする。
ソースは以下の通りです。
==========================================================
Sub Test()
Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim strSQL As String
Dim strName as String
Dim strElements() As String
Dim intRow As Integer
Dim i, ii As Integer
strName = Form1.TextBox1.Value
With CN
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties") = "Excel 8.0"
.Open ThisWorkbook.FullName
End With
If strName <> "" Then
strSQL = "select * from [製品管理表$] " _
& where 製品名 Like '%" & strName & "%'"
Else
strSQL = "select * from [製品管理表$]"
End If
RS.Open strSQL, CN, adOpenStatic, adLockReadOnly
intRow = RS.RecordCount
If intRow = 0 Then
MsgBox "条件に一致する製品名はありません"
Exit Sub
End If
ReDim strElements(intRow, 3)
For i = 0 To intRow - 1
For ii = 0 To 2
strElements(i, ii) = RS(ii).Value
Next
RS.MoveNext
Next
With Form1.ListBox1
.ColumnCount = 3
.BoundColumn = 1
.List = strElements
.ColumnHeads = True
End With
End Sub
==========================================================
この方法でも動くのですが、
問題点はラベル行が空白になってしまいます。
同じくリストボックスの要素を入れる方法として、
RowSource を使用すると ColumnHeads = True のときに
1行目がラベル行になるので、空白は想定外でした。
(1行目がラベルになるなら、配列にラベル名をぶち込んで
しまえばいいと考えていたもので…)
そこで質問なのですが、
(1)大枠はこのままで1行目をラベル行にする方法はあるのでしょうか?
(2)ラベル行を明示的に指定する、
またはラベル名を手打ちするコードはあるのでしょうか?
あと、
RecordSetから直接リストボックスの要素を入れる方法も
あったら知りたいと思います。
皆さんのお知恵を是非貸してください!!
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
(1)(2)ともに無いようですね。
どうも
http://support.microsoft.com/kb/164343/ja
この頃からの仕様のようです。
Sheet上にデータを置いてRowSourceを使うか、
Labelコントロールなどで代用するしかないのかもしれません。
>RecordSetから直接リストボックスの要素を入れる方法...
With Form1.ListBox1
.ColumnCount = 3
.Column = RS.GetRows()
End With
みたいな事でしょうか。
http://msdn.microsoft.com/ja-jp/library/cc364163 …
以下、余談ですが、
>.Open ThisWorkbook.FullName
本番コードもこのように、自Bookに対してADOでアクセスする場合、メモリリークが発生するようですから、
その点を把握された上で運用なさったほうが良いかと。
http://support.microsoft.com/kb/319998/ja
>>RecordSetから直接リストボックスの要素を入れる方法...
>With Form1.ListBox1
> .ColumnCount = 3
> .Column = RS.GetRows()
>End With
>みたいな事でしょうか。
まさに想像通りです!!ありがとうございます。
ただ(1)も(2)もだめなら
end-uさんの仰るとおりシートにコピーしてからRowSourceにするか
ColumnHeadsをやめてフォーム上にラベルを貼り付ける力技になりそうです。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
コンボボックスにレコードセットでリストをセットする
その他(データベース)
-
【VBA】ユーザーフォーム リストボックスのヘッダー設定方法
Visual Basic(VBA)
-
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
-
4
ADOでRecordsetオブジェクトをレコードソースに設定したい
その他(データベース)
-
5
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
6
ListBoxで改行したい
Visual Basic(VBA)
-
7
レコードセットで得た結果をサブフォームに出力したい
その他(データベース)
-
8
Access2016 リストボックスに検索結果を表示させたい
Access(アクセス)
-
9
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
10
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
11
VBAのAccessでDATE型のINSERT
その他(データベース)
-
12
ListviewにDB内容を表示し方について
Visual Basic(VBA)
-
13
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
14
リストボックスの特定行の背景色
Visual Basic(VBA)
-
15
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
16
リストボックスの列見出し(ExcelのVBA)
Visual Basic(VBA)
-
17
ACCESSのデータに自動で半角スペースを入れたい
その他(データベース)
-
18
TextBoxコントロールを引数として渡すには?
その他(教育・科学・学問)
-
19
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
20
vba listviewにおけるtextのAlingmentを中央にしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlで2次元配列をサブルーチ...
-
エクセルVBAでTransposeの不思議
-
二次元配列のインデックスについて
-
マクロ Publicでの配列定義
-
perl 配列の要素数について
-
可変長配列を、動的確保した固...
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
vb.netです。2次元配列の要素を...
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
VBAで3秒だけ時間を止めたい
-
ハッシュマーク以降のアドレス取得
-
文字列を変数名として扱う方法
-
英語でのシャープとコメの呼び...
-
エクセルの当番表を作っていま...
-
VBのReturnの使い方
-
UWSCに制限時間を付けたいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
文字の整列(printf)
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
エクセルVBAでTransposeの不思議
-
二次元配列のインデックスについて
-
Excel VBA ユーザーフォームの...
-
Strawberry Perl for Windows ...
-
バイナリデータの操作
-
perlで配列の要素が空なのを知...
-
perlの配列追加について
-
perl 配列の要素数について
-
グループ分けの仕方について
-
最後のフィールドを抜き出したい。
-
リストボックスに縦スクロール...
-
チェックボックスのperlでの値...
-
二つの配列から連想配列を作る方法
-
変則的なスタック配列を使う
-
二次元配列における要素数のは...
-
配列を使わずに、数字(連番)...
おすすめ情報