
VBA初心者です!!
ユーザーフォームを使って検索するフォームを作成しております。
検索結果をリストボックスに表示しており、そのリストボックスにヘッダーをつけたいのですが
RowSourceプロパティの記載方法がわからず教えて頂きたいです!!!
リストボックスのカラムの並びが
2列目、24列目、25列目、19列目、21列目、8列目
としております。
その場合、RowSourceをどのように記載すればよいのでしょうか・・・。
通常の範囲指定にすると、思ったものと違う内容が出てきてしまいました。
ご教授いただけますと幸いです。どうぞよろしくお願いいたします。
'----------------------------------------------
'ユーザーフォームの初期設定:リストの全データを表示しています。
Private Sub UserForm_Initialize()
Dim lastRow As Long
Dim myData, myData2()
Dim i As Long, j As Long, cn As Long
Dim myBook As Workbook
Set myBook = Workbooks("顧客リスト.xlsm")
With myBook.Worksheets("顧客一覧")
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
myData = .Range(.Cells(4, 1), .Cells(lastRow, 25)).Value
End With
With ComboBox1
.AddItem "男性"
.AddItem "女性"
.AddItem "回答なし"
End With
With ListBox1
.ColumnCount = 6
.ColumnWidths = "30;100;100;200;200;100"
.RowSource= ********* 'ここの書き方がわからないです・・・・・
End With
End Sub
Private Sub CommandButton1_Click()
Dim lastRow As Long
Dim myData, myData2(), myno
Dim i As Long, j As Long, cn As Long
Dim myBook As Workbook
Set myBook = Workbooks("顧客リスト.xlsm")
'検索するデータを配列 myData に格納しています。
With myBook.Worksheets("顧客一覧")
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
myData = .Range(.Cells(4, 1), .Cells(lastRow, 25)).Value
End With
'配列 myData の中で検索で一致したデータを配列 myData2 に格納しています。
ReDim myData2(1 To lastRow, 1 To 6)
For i = LBound(myData) To UBound(myData)
If myData(i, 20) Like "*" & TextBox1.Value & "*" And myData(i, 20) Like "*" & TextBox2.Value & "*" And myData(i, 20) Like "*" & TextBox3.Value & "*" And myData(i, 11) = ComboBox1.Value Then
cn = cn + 1
myData2(cn, 1) = myData(i, 2)
myData2(cn, 2) = myData(i, 24)
myData2(cn, 3) = myData(i, 25)
myData2(cn, 4) = myData(i, 19)
myData2(cn, 5) = myData(i, 21)
myData2(cn, 6) = myData(i, 8)
End If
Next i
'検索で一致したデータをリストボックスに表示します。
With ListBox1
.ColumnCount = 6
.ColumnWidths = "30;100;100;200;200;100"
.List = myData2
End With
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは
>リストボックスにヘッダーをつけたいのですが~
ご提示のコードには無いようですが、「ColumnHeads 」のことでしょうか?
RowSourceで指定する場合、内容は「セル範囲」となり、タイトルには指定範囲の1行上の内容が使用されます。
(そういう仕様なので、個別に設定はできないようです。)
現在のシートでは、項目タイトルが3行目に存在しているということでしょうか?
また、RowSourceの範囲は矩形のセル範囲となっていますので、まとめて設定することしかできません。
もしも3行目に項目タイトルがあるのなら、25列目迄の全部を範囲として設定しておいて、不要な列に関しては幅を0にしておくことで、必要な列だけを表示することは可能です。
ただし、列の順序を入れ替えることはできません。
列の順序も入れ替えて、かつ、タイトルも使いたいようであれば、シートの空きセル(または専用の非表示シートでも良い)に、VBAで一旦並べ替えた表を作成して、そちらをRowSourceとして参照するような仕組みにすれば可能と思います。
最初に並べ替えた表を作成してしまえば、ご提示のコードの後半のように、検索後に並び替えるような手間もなくなると思いますし、作業用のシートを編集することで、結果に反映することもできるものと思います。
あるいは、No1様の回答にもあるように、ListViewコントロールを使うかでしょうか。
>25列目迄の全部を範囲として設定しておいて、不要な列に関しては幅を0にしておくことで、必要な列だけを表示することは可能です。
その方法がありましたか!!!!確かに!!!!
ちょっと目からウロコでした。
>列の順序も入れ替えて、かつ、タイトルも使いたいようであれば、シートの空きセル(または専用の非表示シートでも良い)に、VBAで一旦並べ替えた表を作成して、そちらをRowSourceとして参照するような仕組みにすれば可能と思います。
こちらは私のちからでは物凄く時間がかかってしまいそうなので、一旦教えていただいた幅0で対応して、のちの勉強材料にさせていただきたいと思います!!
すっごくすっごく勉強になりました!!
ちなみにListViewコントロールというものを使ったことがないので、、、
こちらも次回の勉強に使わせていただこうと思います。
ありがとうございました!!
No.1
- 回答日時:
こんにちは
>リストボックスのカラムの並びが2列目、24列目、25列目、19列目、21列目、8列目
後の.List = myData2、、、
通常、
.ColumnHeads = True
.RowSource =範囲
ですが、試していないのですが、確か出来なかった記憶がありますね。
UserForm上のコントロールの配置を工夫するなどしてラベルで表示的に代替えするか
ListViewコントロールで代替えするか、、ですかね。
ありがとうございます!!!
そうか、、、、できないんですね。。勉強になりました!!!!
別シートに結果をきれいに並び替えて表示させ、表示させたシートをリストで読み取るようにすれば良いかな?
とも考えたのですが
私のちからではできずwwww
そのため、アナログに手作業でリストボックスの上にラベルを書くということに致しました。。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) ワークシート内を検索 1 2022/12/19 23:46
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
このQ&Aを見た人はこんなQ&Aも見ています
-
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
リストボックスの特定行の背景色
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
5
UserForm1.Showでエラーになります。
工学
-
6
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
7
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
8
VB6,リストボックスの特定行の色変更は可能?
Visual Basic(VBA)
-
9
Excel VBA ユーザーフォームのリストボックスにRecordSetの値を入れた際のラベル行
Visual Basic(VBA)
-
10
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
11
EXCEL2013 VBA ListBox 未選択
Excel(エクセル)
-
12
エクセル vbaのリストボックスにRowSourceを指定する方法
Excel(エクセル)
-
13
VBA基本構文の作り方 2列のリストボックスの昇順並び替え&列削除
Visual Basic(VBA)
-
14
【VBA】【ユーザーフォーム_ListBox】オートフィルタで絞りこんだ値だけを取り出したい
Visual Basic(VBA)
-
15
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
-
16
ExcelのVBAで、ListBox内に複数のAlignを設けたい
Excel(エクセル)
-
17
ExcelVBAでListViewが使用できない
Visual Basic(VBA)
-
18
エクセルVBA ListBox最初と最後を選択
Excel(エクセル)
-
19
リストボックスの列幅をドラッグで変更したい
Access(アクセス)
-
20
vba ListViewの選択色について教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
Excel VBA 配列の分割について
-
検索して合致したら一列づつ別...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
表にフィルターをかけ、絞った...
-
ListBoxでの Drag&Dropについて
-
iniファイルのキーと値を取得す...
-
DataSetから、DataTableを取得...
-
For Nextマクロの高速化につい...
-
Dictionary の書き出しのコード
-
Excel教えてください
-
Datatableへの代入
-
配列のSession格納、及び取得方...
-
.NET - 配列変数を省略可能の引...
-
【VBA】配列に格納したデータを...
-
こういう場合、どの関数を使え...
-
【Excel】VLOOKUP検索値が複数...
-
SUMPRODUCT関数を用いた最小値
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
Excel オートフィルタのリスト...
-
DataSetから、DataTableを取得...
-
array関数で格納した配列の型を...
-
読み込みで一行おきに配列に格納
-
.NET - 配列変数を省略可能の引...
-
【VBA】ユーザーフォーム リス...
-
配列がとびとびである場合の書き方
-
SUMPRODUCT関数を用いた最小値
-
iniファイルのキーと値を取得す...
-
VBAでの100万行以上のデータの...
-
エクセルでエラーを無視して一...
-
配列のSession格納、及び取得方...
-
VBA 配列に格納した値の平均の...
-
VB6.0 ファイルの一括読込み
-
Datatableへの代入
おすすめ情報