[[20141110230005]] 『マクロで作成したリストBOXからのセル移動』(たけし) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで作成したリストBOXからのセル移動』(たけし)

マクロでユーザーフォームを作成しOR条件3つでシート2のセルをリストボックスに表示させその表示された12Xyzという記述されたリストをクリックするとシート2の12Xyxが入っているセルへセル選択できるようにしたいのですが おしえてください

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 クラス等を使って、配置したコントロールにイベントを割り付ける必要があると思います。
(カリーニン) 2014/11/10(月) 23:37

すみません初心者なので言われている意味がわかりません
正直専門用語もあまり理解できていないので 
面倒くさいけど何とか教えてください

(たけし) 2014/11/11(火) 08:17


 リストボックスに表示させるところまではできている前提で・・

 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim fd_Cell
    Set fd_Cell = Sheets(2).Cells.Find(What:=ListBox1.Text, LookAt:=xlWhole)
    Sheets(2).Activate
    fd_Cell.Select
 End Sub

 フォームのモジュールに入れてください。
 エラー処理はしていません。

(ぽち) 2014/11/11(火) 09:24


 ??

 コードでユーザーフォームとリストボックスを生成した、ということではないのですか?
(カリーニン) 2014/11/11(火) 09:48

 「初心者」と書かれていたので勝手に判断してしまいましたが、
 違っていたら無視してください。
 どこまでができていて、どこができないのか明確にしてもらえると
 ありがたいです。
(ぽち) 2014/11/11(火) 10:09

 >マクロで作成したリストBOX
 >マクロでユーザーフォームを作成

 この記述があったのでユーザーフォームやリストボックスをコードで生成したのか
 と思ったのですが違いますか?

 ↓のようなことをしていると思ったのですが。

[[20110825165308]] 『ユーザーフォームを標準モジュール内マクロで作成』(てんて) 
(カリーニン) 2014/11/11(火) 22:28


お手数掛けます
(参考書たよりに)
品番一覧マスタを1列に作成しました((元シートは別に縦横に見やすいように並べてありますが)
検索ボタンを作成
検索フォームを作成
*検索はできますがこの先がうまくできない
(ぽち)さんどのフォームに記述したらよいですか(このくらいド素人です)
すみませんよろしくお願いいたします。
(たけし) 2014/11/12(水) 10:20

ぽちさん
自分の作ったマクロ文に教え言えいただいたマクロを接続してもうまくいきません
もう少し教えていただきけないでしょうか
いけなければ一連のマクロで教えてください
(たけし) 2014/11/13(木) 08:23

 カリーニンさんも言われていましたが、私にも勘違いがあるといけないので
 少し整理させてください。

 1.ユーザーフォームはコードで作られたものですか?VBEで「挿入」-「ユーザーフォーム」から作られたもの
  ですか?

 2.「マクロでユーザーフォームを作成しOR条件3つでシート2のセルをリストボックスに表示させ・・」とあり
  ますがどこまでができていますか?出来ているところまでのコードを提示できますか?

 ちなみに私のコードはユーザーフォーム上にリストボックスが1つ配置(Listbox1)されており、そこに表示  
 されているリストの1つをダブルクリックした時に動くイベントプロシージャとなります。
 記述先はフォームのモジュールとなります。

(ぽち) 2014/11/13(木) 09:31


お世話になります
1.(VBAのツリー上です)ユーザーフォームから作成したつもりでしたが

2.ネットの参考書で見つけて利用させていただいてますが
  このコードでは表示までしかできません

'*****************************************************
'OR条件検索の処理
'*****************************************************
Private Sub cmdSerch_Click()

    Dim Obj As Object
    Dim wAddST As Variant
    Dim wAddress As Variant
    Dim wName As Variant
    Dim i As Integer
    Dim wlstCount As Integer

    With Worksheets("検索メニュー")

        'リストボックスをクリア
        lstName.RowSource = ""
        lstName.Clear

        '***   テキストボックス「キーワード?@」の値が含まれるセルを検索   ***

        'テキストボックス未入力の場合処理しない
        If txbName1.Value <> "" Then

           'キーワード1の値で検索
           Set Obj = .Cells.Find( _
                               What:=txbName1.Value, _
                               LookIn:=xlValues, _
                               LookAt:=xlPart, _
                               MatchByte:=False)

           '検索対象が存在する場合
           If Not Obj Is Nothing Then
               '検索にヒットした先頭のセルのアドレスをセット
               wAddST = Obj.Address

               '検索の繰り返し処理
               Do
                   '検索にヒットしたセルのアドレスをセット
                   wAddress = Obj.Address

                   '検索にヒットしたセルの値を取得
                   wName = .Range(wAddress).Value

                   'リストボックスに追加
                   lstName.AddItem wName

                   '次の検索を行う
                   Set Obj = .Cells.FindNext(Obj)

                   '最初にヒットしたアドレスと同じ場合は処理を終了
                   If Obj.Address = wAddST Then Exit Do
               Loop
           End If
        End If

        '***   テキストボックス「キーワード?A」の値が含まれるセルを検索   ***

        'テキストボックスの未入力または同じ値(含む)の場合処理しない
        If txbName2.Value <> "" And _
            InStr(txbName1.Value, txbName2.Value) = 0 Then

           'キーワード2の値で検索
           Set Obj = .Cells.Find( _
                               What:=txbName2.Value, _
                               LookIn:=xlValues, _
                               LookAt:=xlPart, _
                               MatchByte:=False)

           '検索対象が存在する場合
            If Not Obj Is Nothing Then
               '検索にヒットした先頭のセルのアドレスをセット
               wAddST = Obj.Address

               '検索の繰り返し処理
               Do
                   '検索にヒットしたセルのアドレスをセット
                   wAddress = Obj.Address

                   '検索にヒットしたセルの値を取得
                   wName = .Range(wAddress).Value

                    'リストボックスの値を読み込みます
                    wlstCount = 0
                    For i = 0 To Me.lstName.ListCount - 1
                       '既にリストボックスに追加されていないかチェック
                        If Me.lstName.List(i, 0) = wName Then
                            wlstCount = wlstCount + 1
                        End If
                    Next i

                   'リストボックスに重複が無い場合、値を追加
                   If wlstCount = 0 Then lstName.AddItem wName

                   '次の検索を行う
                   Set Obj = .Cells.FindNext(Obj)

                   '最初にヒットしたアドレスと同じ場合は処理を終了
                   If Obj.Address = wAddST Then Exit Do
               Loop
           End If
        End If

        '***   テキストボックス「キーワード?B」の値が含まれるセルを検索   ***

        'テキストボックスの未入力または同じ値(含む)の場合処理しない
        If txbName3.Value <> "" And _
            InStr(txbName1.Value, txbName3.Value) = 0 And _
            InStr(txbName2.Value, txbName3.Value) = 0 Then

           'キーワード3の値で検索
           Set Obj = .Cells.Find( _
                               What:=txbName3.Value, _
                               LookIn:=xlValues, _
                               LookAt:=xlPart, _
                               MatchByte:=False)

           '検索対象が存在する場合
            If Not Obj Is Nothing Then
               '検索にヒットした先頭のセルのアドレスをセット
               wAddST = Obj.Address

               '検索の繰り返し処理
               Do
                   '検索にヒットしたセルのアドレスをセット
                   wAddress = Obj.Address

                   '検索にヒットしたセルの値を取得
                   wName = .Range(wAddress).Value

                   'リストボックスの値を読み込みます
                    wlstCount = 0
                    For i = 0 To Me.lstName.ListCount - 1
                       '既にリストボックスに追加されていないかチェック
                        If Me.lstName.List(i, 0) = wName Then
                            wlstCount = wlstCount + 1
                        End If
                    Next i

                   'リストボックスに重複が無い場合、値を追加
                   If wlstCount = 0 Then lstName.AddItem wName

                   '次の検索を行う
                   Set Obj = .Cells.FindNext(Obj)

                   '最初にヒットしたアドレスと同じ場合は処理を終了
                   If Obj.Address = wAddST Then Exit Do
                                  Loop
           End If
        End If

    End With

End Sub

*シートにボタンをつけて呼び出ししています

(たけし) 2014/11/13(木) 10:32


 2でご提示いただいたコードの下(End Subの下)に下記を追加してみてください。

 Private Sub lstName_Click()
    Dim fd_Cell
    Set fd_Cell = Sheets("検索メニュー").Cells.Find(What:=lstName.Text, LookAt:=xlWhole)
    Sheets("検索メニュー").Activate
    fd_Cell.Select
 End Sub
(ぽち) 2014/11/13(木) 10:47

ありがとうございます
できました
このコードをじっくり勉強させてください
もうひとつ知りたいことがあります
検索が終わったら検索メニューを終了させるにはどうしたらよいですか
(たけし) 2014/11/13(木) 11:10

 ユーザーフォームを閉じればいいのでフォームのモジュールに「Unload」文を
 入れたらいいかと思います。

(ぽち) 2014/11/13(木) 11:56


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.