Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10252 / 13644 ツリー ←次へ | 前へ→

【22853】リストボックスの表示方法 たかし 05/3/5(土) 0:52 質問[未読]
【22871】Re:リストボックスの表示方法 G-Luck 05/3/5(土) 13:42 発言[未読]
【22879】Re:リストボックスの表示方法 たかし 05/3/5(土) 15:04 発言[未読]
【22881】Re:リストボックスの表示方法 G-Luck 05/3/5(土) 18:08 回答[未読]
【22882】Re:リストボックスの表示方法 たかし 05/3/5(土) 19:38 お礼[未読]
【22883】Re:リストボックスの表示方法 たかし 05/3/5(土) 20:57 質問[未読]
【22884】Re:リストボックスの表示方法 G-Luck 05/3/5(土) 21:10 発言[未読]
【22888】Re:リストボックスの表示方法 たかし 05/3/6(日) 11:23 質問[未読]
【22889】Re:リストボックスの表示方法 G-Luck 05/3/6(日) 11:47 発言[未読]
【22893】Re:リストボックスの表示方法 たかし 05/3/6(日) 13:21 質問[未読]
【22895】Re:リストボックスの表示方法 G-Luck 05/3/6(日) 14:57 発言[未読]
【22896】Re:リストボックスの表示方法 たかし 05/3/6(日) 16:19 質問[未読]

【22853】リストボックスの表示方法
質問  たかし E-MAIL  - 05/3/5(土) 0:52 -

引用なし
パスワード
   VBA初心者で、勉強中のたかしです。
今、お客様先にある機械を管理するリストを作成しているのですが、
対象の機械のヴァージンを表示させるのに苦労しています。
ワークシートにそれぞれの情報を記入するマクロはできています。
それらを表示させるのに戸惑っています。
いい方法があれば、教えていただけないでしょうか?
よろしくお願いしたします。

ワークシートのリスト

1 お客様 機種 管理番号 シリアルNo Ver.1 Ver.2 ・・・ Ver.10
2  A   A  AAA   11   1   1     1
3  A   A  BBB   12   1   2     2
4  A   B  CCC   21   2   1     3
5  B   A  DDD   13   2   2     1
6  B   C  EEE   31   3   3     1
7  B   C  FFF   32   4   3     4

Userform1にCombobox1とListbox1とCommandbutton1を配し
Combobox1でお客様を表示させると、リストボックスに機種と管理番号、
シリアルNoを表示させたい。できれば、それぞれが縦に整列されていると
うれしいのですが・・・

理由:機種は同じものが存在する。
   管理番号はすべて異なるが、設定されていないものも存在する。
   この2種類でほぼ管理しているが、管理番号が設定されていないもの
   では、シリアルNoで区別するしかない。
 以上のことより、できれば3種類の表示をしたい。

Commandbutton1をクリックすると、リストボックスで選択された機械の
Ver.1〜Ver.10をUserform2のTextbox1〜Textbox10に表示させる。

わがままな質問ですみませんが、よろしくお願いいたします。

【22871】Re:リストボックスの表示方法
発言  G-Luck  - 05/3/5(土) 13:42 -

引用なし
パスワード
   ▼たかし さん:

順次確認しましょう。

Combobox1の値を取得することはできますか?
Listbox1の値を、VBAから自由に設定できますか?
Listbox1の値を、複数列表示に出来ますか?

セルの値と、Comboboxの値を比較して、一致と不一致で、処理を分けることは出来ますか?

間違っていてもいいので、思いのコードを書いてみてください。

他の回答者の方へ、私は無視して結構ですので、回答を付けてあげてください。

【22879】Re:リストボックスの表示方法
発言  たかし E-MAIL  - 05/3/5(土) 15:04 -

引用なし
パスワード
   ▼G-Luck さん:
回答ありがとうございます。
今のところ、このサイトで検索できたものを参考に、
ここまでできています。意味がまったくわからず、
ただ、コピーしてみたものがほとんどです。
シート名"データ1"にデータが書き込まれています。

----------------------------------------
Public CE As Long
Private Sub ComboBox1_Change()
 Dim CT2 As Range, Cel As Range, LB2tb() As String
 Worksheets("データ1").Activate
 If ActiveSheet.AutoFilterMode Then
   ActiveSheet.AutoFilterMode = False
 End If
 LtW = ComboBox1.List(ComboBox1.ListIndex)
 Range("B1").AutoFilter field:=3, Criteria1:=LtW
 CE = ActiveSheet.Range("C65536").End(xlUp).Row
 Set CT2 = Range("U2:U" & CE).SpecialCells(xlCellTypeVisible)
   ListBox1.Clear
   Cnt = 0
   For Each Cel In CT2
     On Error Resume Next
     mt = Application.Match(Cel, ListBox1.List, 0)
     If IsError(mt) Or mt = Empty Then
      Cnt = Cnt + 1
      ReDim Preserve LB2tb(1 To Cnt)
      LB2tb(Cnt) = Cel
     End If
     ListBox1.List = LB2tb
     Err.Clear
     On Error GoTo 0
   Next
   Set CT2 = Nothing
   Erase LB2tb
   Application.ScreenUpdating = True
 Worksheets("読み出し").Activate
End Sub
---------------------------------
Combobox1の値は、プロパティの"RoWSource"で設定しています。
が、これからデータを整理していく上で、増えていくことを想定して
かなり多めに設定しています。50行くらい。
これを、データの入っているSell範囲を選択、というようにできると
いいのですが、できますでしょうか?
よろしくお願いいたします。

>▼たかし さん:
>
>順次確認しましょう。
>
>Combobox1の値を取得することはできますか?
>Listbox1の値を、VBAから自由に設定できますか?
>Listbox1の値を、複数列表示に出来ますか?
>
>セルの値と、Comboboxの値を比較して、一致と不一致で、処理を分けることは出来ますか?
>
>間違っていてもいいので、思いのコードを書いてみてください。
>
>他の回答者の方へ、私は無視して結構ですので、回答を付けてあげてください。

【22881】Re:リストボックスの表示方法
回答  G-Luck  - 05/3/5(土) 18:08 -

引用なし
パスワード
   ▼たかし さん:

チェンジイベント上では、オートフィルターがかけれないようです。

'Private Sub oldComboBox1_Change()
Private Sub ComboBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
 Dim CT2 As Range, Cel As Range, LB2tb() As String
 Worksheets("データ1").Activate
 If ActiveSheet.AutoFilterMode Then
   ActiveSheet.AutoFilterMode = False
 End If
 Ltw = ComboBox1.List(ComboBox1.ListIndex)
' Range("B1").AutoFilter field:=3, Criteria1:=Ltw
' Range("B1").AutoFilter field:=1, Criteria1:=Ltw
' CE = ActiveSheet.Range("C65536").End(xlUp).Row
 CE = ActiveSheet.Range("A65536").End(xlUp).Row
' Set CT2 = Range("U2:U" & CE).SpecialCells(xlCellTypeVisible)
 Set CT2 = Range("B2:D" & CE).SpecialCells(xlCellTypeVisible)
   ListBox1.Clear
   ListBox1.ColumnCount = 3 '追加
'   cnt = 0
'   For Each Cel In CT2
'     On Error Resume Next
'     mt = Application.Match(Cel, ListBox1.List, 0)
'     If IsError(mt) Or mt = Empty Then
'      cnt = cnt + 1
'      ReDim Preserve LB2tb(1 To cnt)
'      LB2tb(cnt) = Cel
'     End If
'     ListBox1.List = LB2tb
'     Err.Clear
'     On Error GoTo 0
'   Next
  ListBox1.List = CT2.Value
   Set CT2 = Nothing
'   Erase LB2tb
'   Application.ScreenUpdating = True
' Worksheets("読み出し").Activate

End Sub

【22882】Re:リストボックスの表示方法
お礼  たかし E-MAIL  - 05/3/5(土) 19:38 -

引用なし
パスワード
   ▼G-Luck さん:
ListBox1.ColumnCount = 3
で、表示される列数を決められるんですね!勉強になりました。
ありがとうございました。
Userform2上にせれぞれのVerを表示する方法を考えて見ます。
わからないことがあれば、また書き込みます。
そのときはよろしくお願いいたします。

【22883】Re:リストボックスの表示方法
質問  たかし E-MAIL  - 05/3/5(土) 20:57 -

引用なし
パスワード
   ▼G-Luck さん:
すみません。早速あきらめてしまいました。
リストボックスで選択した値の行番号を取得して
その行をOffsetでTextboxに表示させていけばいいと思ったのですが、
行番号の取得方法がわかりませんでした。
Textboxの内容を検索し、行番号を取得する方法はあったのですが、
応用がわかりません。
申し訳ありませんが、アドバイスお願いいたします。

【22884】Re:リストボックスの表示方法
発言  G-Luck  - 05/3/5(土) 21:10 -

引用なし
パスワード
   ▼たかし さん:
先ほど取得したお客様名と共に、オートフィルタをかけてみては?

【22888】Re:リストボックスの表示方法
質問  たかし E-MAIL  - 05/3/6(日) 11:23 -

引用なし
パスワード
   ▼G-Luck さん:
private sub conbobox1_change()
で、オートフィルターできました。
それで、Listbox1_Click()でオートフィルターをかけようとしたのですが、
Listbox1に表示している3つのセルの1番左の値でのオートフィルターしか
できません。

Dim CT2 As Range, Cel As Range, LB2tb() As String
 Worksheets("データ1").Activate
 LtW = ListBox1.List(ListBox1.ListIndex)
 Range("E1").AutoFilter Field:=4, Criteria1:=LtW
     ↑
  これを何に変えてもオートフィルターで選択する値が変更できない。
  シリアルNoでオートフィルターしたいのに、シリアルNoの列を
  機種の値でオートフィルターしてしまう。

いい方法があれば、教えていただけないでしょうか?
オートフィルターで1行に絞れたとして、その行番号の取得はどうすればいいのでしょうか?よろしくお願いいたします。

【22889】Re:リストボックスの表示方法
発言  G-Luck  - 05/3/6(日) 11:47 -

引用なし
パスワード
   ▼たかし さん:

>Listbox1に表示している3つのセルの1番左の値でのオートフィルターしか
>できません。
>
>Dim CT2 As Range, Cel As Range, LB2tb() As String
> Worksheets("データ1").Activate
> LtW = ListBox1.List(ListBox1.ListIndex)
> Range("E1").AutoFilter Field:=4, Criteria1:=LtW
>     ↑
>  これを何に変えてもオートフィルターで選択する値が変更できない。
>  シリアルNoでオートフィルターしたいのに、シリアルNoの列を
>  機種の値でオートフィルターしてしまう。

AutoFilter を三回かけてみては?
AutoFilter の Field:=1 がフィルターの対象列になります。
左から1,2,3です。

>オートフィルターで1行に絞れたとして、その行番号の取得はどうすればいいのでしょうか?よろしくお願いいたします。

AutoFilter.Range でオートフィルターの対象範囲が取得できます。
それと、
Offset 'セル範囲の移動
Resize 'セル範囲の変更
Specialcell '特殊セルの取得
を使ってみてはどうですか?

【22893】Re:リストボックスの表示方法
質問  たかし E-MAIL  - 05/3/6(日) 13:21 -

引用なし
パスワード
   ▼G-Luck さん:
>AutoFilter を三回かけてみては?
リストボックスには"機種"、"管理番号"、"シリアルNo"
が表示されていて、オートフィルターをかけると、選択した行の"機種"列にある
機種名(たとえば"AAA")で"管理番号""シリアルNo"もオートフィルターをかけ
てしまうので、シートには何も表示されなくなってしまいます。

>AutoFilter.Range でオートフィルターの対象範囲が取得できます。
これは、最後にオートフィルターをして獲得したセルを取得でいいのですかね?

>Specialcell '特殊セルの取得
>を使ってみてはどうですか?
特殊セルとは、たとえばどんなセルですか?

【22895】Re:リストボックスの表示方法
発言  G-Luck  - 05/3/6(日) 14:57 -

引用なし
パスワード
   ▼たかし さん:
>リストボックスには"機種"、"管理番号"、"シリアルNo"
>が表示されていて、オートフィルターをかけると、選択した行の"機種"列にある
>機種名(たとえば"AAA")で"管理番号""シリアルNo"もオートフィルターをかけ
>てしまうので、シートには何も表示されなくなってしまいます。

Val = List(N,M)
のようにすれば、リストの任意の値が取得できます。

Range("E1").AutoFilter Field:=1, _
  Criteria1:=ListBox1.List(ListBox1.ListIndex,0)
Range("E1").AutoFilter Field:=2, _
  Criteria1:=ListBox1.List(ListBox1.ListIndex,1)
Range("E1").AutoFilter Field:=3, _
  Criteria1:=ListBox1.List(ListBox1.ListIndex,2)

のような感じで出来ませんか?

>>AutoFilter.Range でオートフィルターの対象範囲が取得できます。
>これは、最後にオートフィルターをして獲得したセルを取得でいいのですかね?

全体ですね。
対象範囲がA2:N10ならA2:N10です。

>>Specialcell '特殊セルの取得
>>を使ってみてはどうですか?
>特殊セルとは、たとえばどんなセルですか?
引数によって変わります。
Helpを参照してください。
いろいろ有りますので、
たとえば、xlCellTypeVisible は可視セルです。

【22896】Re:リストボックスの表示方法
質問  たかし E-MAIL  - 05/3/6(日) 16:19 -

引用なし
パスワード
   ▼G-Luck さん:
オートフィルターはうまくいきました。
ありがとうございました。
対象1行のみ表示できました。
Userform2への読み込みもできました。
ありがとうございました。

10252 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free