以下のような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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
コンボボックスにレコードセットでリストをセットする
その他(データベース)
-
-
4
【VBA】ユーザーフォーム リストボックスのヘッダー設定方法
Visual Basic(VBA)
-
5
ExcelのVBAで、ListBox内に複数のAlignを設けたい
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
8
ExcelVBA でリストリストボックスにNULLを挿入
Access(アクセス)
-
9
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
10
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
11
ListviewにDB内容を表示し方について
Visual Basic(VBA)
-
12
ACCESSでコンボボックスにSQLで抽出した値を表示したい
その他(データベース)
-
13
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
14
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
15
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
16
DATE型変数を初期化する方法
Visual Basic(VBA)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
19
オープンしているレコードセットの中の最大値
その他(データベース)
-
20
レコードセットのデータを1行ごとに抽出したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dim flag(4) as boolean で配列...
-
Excel VBA ユーザーフォームの...
-
Excel(VBA)で配列の要素数を...
-
perlで配列の要素が空なのを知...
-
VBA 多次元配列を用いてグルー...
-
重複しない乱数発生
-
可変長配列を、動的確保した固...
-
リストボックスに縦スクロール...
-
perl このテキストファイルを簡...
-
マクロ Publicでの配列定義
-
Strawberry Perl for Windows ...
-
エクセルVBAでTransposeの不思議
-
perl 配列の要素数について
-
VBA 二次元配列 ループの書き方
-
jcode->jfold で禁則処理
-
perlで2次元配列をサブルーチ...
-
Powershell $変数 = @()の空配...
-
アクティブセルから、A列最終行...
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列のインデックスについて
-
VBAのautofilter、criteriaの配...
-
Excel VBA ユーザーフォームの...
-
二次元配列における要素数のは...
-
マクロ Publicでの配列定義
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
エクセルVBAでTransposeの不思議
-
perlで2次元配列をサブルーチ...
-
perlで配列の要素が空なのを知...
-
perl 配列の要素数について
-
組み合わせについての質問です...
-
隣同士の数字を足し合わせる
-
複数の配列の全ての組み合わせ...
-
perl 初等プログラミングについて
-
jcode->jfold で禁則処理
-
一致する要素が格納されている...
-
チェックボックスのperlでの値...
おすすめ情報