以下のような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も見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
【VBA】ユーザーフォーム リストボックスのヘッダー設定方法
Visual Basic(VBA)
-
ExcelVBA でリストリストボックスにNULLを挿入
Access(アクセス)
-
コンボボックスにレコードセットでリストをセットする
その他(データベース)
-
-
4
EXCEL リストボックスのRowSouce欄が表示されない
Excel(エクセル)
-
5
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
6
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
7
DATE型変数を初期化する方法
Visual Basic(VBA)
-
8
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
9
Access サブフォームでの選択行の取得
その他(データベース)
-
10
リストボックスの列見出し(ExcelのVBA)
Visual Basic(VBA)
-
11
ADOでRecordsetオブジェクトをレコードソースに設定したい
その他(データベース)
-
12
SQLを連続発行する時の正しい(?)書き方は?
Visual Basic(VBA)
-
13
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
14
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
15
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
16
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
17
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
18
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
19
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
20
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラスに配列を渡す方法
-
Perl:hiddenタグを使って二次...
-
grepを利用して、特定の要素が...
-
チェックボックスのperlでの値...
-
Strawberry Perl for Windows ...
-
VBAのautofilter、criteriaの配...
-
リストボックスに縦スクロール...
-
Perl このプログラムの解説をお...
-
perl 配列の要素数について
-
Dim flag(4) as boolean で配列...
-
perl qw(aaa bbb ccc)[$hoge]...
-
C言語についてです。 配列xの3...
-
VBのReturnの使い方
-
GIFアニメをループさせたくない
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
VBA Dir関数でファイルをループ...
-
CSVファイルの特定の行だけを読...
-
VBA for i=1 to lastrow
-
ハッシュ検索はなぜ速い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラスに配列を渡す方法
-
エクセルVBAでTransposeの不思議
-
Excel VBA ユーザーフォームの...
-
VBAのautofilter、criteriaの配...
-
Strawberry Perl for Windows ...
-
二次元配列における要素数のは...
-
VB6で配列の最大値を簡単に求め...
-
リストボックスに縦スクロール...
-
文字の整列(printf)
-
ファイル名に日付・時刻を付与...
-
DataGridViewに配列の値を表示...
-
チェックボックスのperlでの値...
-
一致する要素が格納されている...
-
隣同士の数字を足し合わせる
-
perlで配列の要素が空なのを知...
-
条件に一致した塩基配列を含む...
-
perlで2次元配列をサブルーチ...
-
マクロ Publicでの配列定義
-
二次元配列のインデックスについて
-
perl 配列の要素数について
おすすめ情報